XmlRpcClientException:发现无效的 XML 字符(Unicode:0x8)
我正在使用 Apache XML-RPC 库从 Bugzilla 获取错误。调用该服务,我收到异常: org.apache.xmlrpc.client.XmlRpcClientException:无法解析服务器的响应:在文档的元素内容中发现无效的 XML 字符(Unicode:0x8)。
有没有办法了解错误到底在哪里。我找到了错误的日期,这导致了错误。但它们有很多。我可以打印收到的 xml 或使异常更精确吗?
I'm using Apache XML-RPC library to get bugs from Bugzilla. Calling the service, I receive exception:
org.apache.xmlrpc.client.XmlRpcClientException: Failed to parse server's response: An invalid XML character (Unicode: 0x8) was found in the element content of the document.
Is there a way to understand where exactly mistake is. I located a date of bugs, which causes mistake. But there are a lot of them. Can I print the received xml or make exception more precise?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
已经晚了,但以防万一有人偶然发现这一点。
编辑:
我已经研究了两个月了,终于找到了解决上述问题的可行方法。
出现此问题的原因是 Bugzilla::Webservice 有时为响应远程过程调用,在 XML 响应中发送无效字符。
当 Apache 的 XML-RPC 尝试解析该响应时,它会给出以下错误:
要解决此问题,需要扩展 Apache 的 XML-RPC 客户端,以在尝试解析响应之前清除无效的 XML 字符。
查找 apache-xmlrpc 的源代码作为 Eclipse 项目 此处。 (导入此项目而不是 jar 文件)
为此,我们首先需要扩展 BufferedReader 类,以在返回之前替换任何无效的 XML 字符。
因此,添加
/apache-xmlrpc-3.1.3-src/client/src/main/java/org/apache/xmlrpc/client/util/XMLBufferredReader.java
,如下所示:稍后,我们需要将扩展的
XMLBufferedReader
发送到parse
方法的InputSource
。文件
/apache-xmlrpc-3.1.3-src/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
中的函数readResponse
需要更改为:在对 Apache 的 XML-RPC 客户端进行此扩展后,一切都应该正常工作。
注意:本文的其余部分是我发布的初始解决方案,这是一个解决方法,以防有人不想扩展 Apache 的 XML-RPC 客户端。
旧帖子:
如果您使用Bugzilla::Webservice::Bug::search 实用函数,带有一些
offset
和limit
参数以及搜索条件。您会在某些特定值上遇到此异常,例如
offset
的x
和limit
的y
,您可以通过在调试模式下运行来找出答案。现在通过将
x
保留为偏移量并将1
作为limit
来调用search
函数,然后循环并递增x
直到达到x + y
值作为偏移量,同时仍保持limit
为1
。这样,您将一次提取一个错误并在调试模式下运行,您可以确定导致异常的确切错误。
对于
x = 21900
和y = 100
执行以下操作:在调试模式下运行此命令,我发现导致错误的实际
offset
为 < code>21963 所以我编写了代码来避免该特定错误:Its late but in case someone stumbles upon this.
Edit:
I have been on this for two months now and finally I have found a viable solution to the above problem.
This issue occurs because Bugzilla::Webservice sometimes, in response to a, remote procedure call, sends an invalid character in the XML response.
When Apache's XML-RPC tries to parse that response, it gives the following error:
To solve this issue, Apache's XML-RPC Client needs to be extended to clean the response off invalid XML characters before trying to parse it.
Find the source code of apache-xmlrpc as an Eclipse project here. (Import this project instead of the jar files)
To do this, we first need to extend the
BufferedReader
class to replace any invalid XML character before it returns.So, add
/apache-xmlrpc-3.1.3-src/client/src/main/java/org/apache/xmlrpc/client/util/XMLBufferredReader.java
, like this:Later, we need to send in the extended
XMLBufferedReader
to theInputSource
of theparse
method.The function
readResponse
in the file/apache-xmlrpc-3.1.3-src/client/src/main/java/org/apache/xmlrpc/client/XmlRpcStreamTransport.java
needs to be changed to:After this extension to the Apache's XML-RPC Client, everything should work fine.
Note: The rest of this post, is the initial solution that I posted, which is a workaround in case someone does not want to extend Apache's XML-RPC client.
Old Post:
In case you are using the Bugzilla::Webservice::Bug::search utility function with some
offset
andlimit
parameters along with the search criteria.You would be getting this exception on some specific values lets say
x
ofoffset
andy
oflimit
which you can find out by running in debug mode.Now call the
search
function by keepingx
as offset and1
aslimit
and then loop and incrementx
until it reaches a value ofx + y
as offset while still keepinglimit
as1
.This way you will be extracting bugs one at a time and running in debug mode you can determine the exact bug which is causing the exception.
For
x = 21900
andy = 100
do something like:Running this in debug mode I found out that the actual
offset
causing the bug was21963
so then I wrote code to avoid that specific bug: