【发布时间】:2015-05-30 12:50:30
【问题描述】:
我正在使用我的 XML-RPC 服务,使用 Apache XML-RPC 库,但响应 XML-RPC 有垃圾字符,所以库无法解析结果
这是我的 XML-RPC 程序:
导入 java.net.URL; 导入 org.apache.xmlrpc.client.XmlRpcClient; 导入 org.apache.xmlrpc.client.XmlRpcClientConfigImpl; 公共类 XMLRpcExample { 公共静态 void main(String[] args) 抛出异常 { // TODO 自动生成的方法存根 XmlRpcClientConfigImpl cf = new XmlRpcClientConfigImpl(); cf.setServerURL(新 URL("/xmlrpc/object")); cf.setBasicUserName("admin"); cf.setBasicPassword("m_demo"); cf.setConnectionTimeout(60000); XmlRpcClient 客户端 = 新 XmlRpcClient(); client.setConfig(cf); 对象[] 参数 = 新对象[] {"dbname",1,"m_demo","res.partner","partner_sync_openerp","kapil5drd@bxiz","22"}; String s =(String)client.execute("execute", params); System.out.println(s); } }但我收到此错误作为响应,如下所示:
[致命错误]:16:16:在文档的元素内容中发现了无效的 XML 字符(Unicode:0xc)。 线程“主”org.apache.xmlrpc.client.XmlRpcClientException 中的异常:无法解析服务器的响应:在文档的元素内容中发现了无效的 XML 字符(Unicode:0xc)。 在 org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:202) 在 org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:165) 在 org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:125) 在 org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69) 在 org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56) 在 org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167) 在 org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137) 在 org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126) 在 XMLRpcExample.main(XMLRpcExample.java:21) 引起:org.xml.sax.SAXParseException;行号:16;列号:16;在文档的元素内容中发现了无效的 XML 字符 (Unicode: 0xc)。 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1237) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:551) 在 org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:200) ... 8 更多XML-RPC 给出一个垃圾字符作为响应。
并且库本身无法解析响应。
所以这意味着,Apache XML-RPC 库是它自己无法解析响应。
任何机构都可以帮助我完成我需要做的事情吗?
我也尝试通过互联网解决此问题,但无法解决。
【问题讨论】:
-
我也遇到了同样的问题。你能解决问题吗?
-
您知道响应是什么,它会被发回以回答您的问题吗? (您可能会尝试使用wireshark 嗅探流量以查看发回的内容。)也许它以某种方式被压缩或根本不使用XML...
-
@AndréSchild 不,实际上大多数对远程过程的调用都正常。对于某些特定的呼叫,这种情况很少发生。请注意,远程过程来自第三方,无法更改。需要在我们端进行更改以避免此错误。
-
所以基本问题是:为什么远程服务有时会返回无效的 XML 答案。除非您可以跟踪此类无效消息,否则处理它的唯一方法是将 client.execute(...) 包装在 try/catch 块中,当抛出异常时,只需以某种“优雅”的方式处理它. (也许稍后重试,或者任何合适的方法)
-
@AndréSchild 感谢您跟进先生。具体来说,我正在使用Bugzilla::Webservice::Bug::search 远程过程从Bugzilla@Mozilla 的部署中获取错误,并使用以下代码
search(searchCriteria, offset, limit);在以下情况下失败:标准为product=firefox,offset为21900和@987654327 @ 是100而对于offset的其他值,它工作正常。