Tomcat - Axis 1.4 - org.xml.sax.SAXParseException;行号:x;列号:y;字符引用 "&#

Posted

技术标签:

【中文标题】Tomcat - Axis 1.4 - org.xml.sax.SAXParseException;行号:x;列号:y;字符引用 "&#【英文标题】:Tomcat - Axis 1.4 - org.xml.sax.SAXParseException; lineNumber: x; columnNumber: y; Character reference "&# 【发布时间】:2017-07-04 22:27:01 【问题描述】:

我们正在从 Weblogic 迁移到 Tomcat。

在 Weblogic 中,我们使用 weblogic.ant.taskdefs.webservices.clientgen.ClientGenTask 和 ant 从 WSDL 生成 Web 服务客户端 jar。 在 Tomcat 中,我们尝试将 Axis 1.4 与 Maven 一起使用,以生成相同的 Web 服务客户端。

其中一个 Web 服务调用响应以下示例:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 04 Jul 2017 20:35:37 GMT
Connection: close
Content-Length: 898

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body>
<MyRequestResponse xmlns="http://tempuri.org/">
<MyRequestResult>~BLDSQPQP(........)26787&#x2;00000  000  </MyRequestResult>
</MyRequestResponse>
</s:Body></s:Envelope>

但是,当我们调用/调用 Axis 1.4 生成的 Web 服务客户端时,我们会遇到运行时异常:

org.xml.sax.SAXParseException;行号:x;列号:y;字符引用 "

Axis 的 SAX 解析器似乎不期望在 & 之后带有 # 的 XML 实体。 很遗憾,我们无法更改 Web 服务响应的行为/内容。

有没有办法在客户端解决这个问题,例如,禁用 XML 验证或使其理解这些实体?

调用客户端的代码:

service = new BrowserServiceLocator();
service.setEndpointAddress("HttpWebService", webserviceUrl);
IBrowserService myService = (IBrowserService) service.getHttpWebService();
myResponse = myService.myRequest(object, verb, user.getMyUser(), user.getCenter(), inputData);

注意:我们目前无法更新到 Axis 2,因为我们使用的是 RPC 编码的 WSDL。

编辑 - 请看下面 Weblogic 是如何处理这个字符的。

在 Eclipse 调试器中(使用 Weblogic)

在 Notepad++ 中(如上使用 Weblogic 检索到的响应)

【问题讨论】:

轴行为在这里是正确的,请参阅***.com/a/28152666/180100。另见issues.apache.org/jira/browse/AXIS-2025 @RC。我了解 Axis 的行为在这里可能是正确的。但是,我仍然希望能够解析 XML(如果需要,则为 1.1)并使其理解实体(因为它们无论如何都是有效的)。有什么办法吗?谢谢。 我可能会通过使用一些请求来获取内容(HttpClient),替换错误的内容(或&lt;CDATA[它)并用一些常规的xml解析器(XStream)解析现在有效的xml .以***.com/questions/10671494/… 为例 @RC。非常感谢你。请参阅我上面的编辑。 Weblogic 似乎能够读取 XML 实体并以自己的方式处理它。至少我们能够得到响应并处理它。使用 Tomcat 和 Axis 1.4,我们根本没有得到响应,因为它会因上述异常而崩溃。对于 Axis 2,当我们提出这个请求时,我们只会得到“null”。您知道我们是否可以使 Tomcat/Axis 的行为方式与 Weblogic 相同吗?非常亲切的问候。 您可以尝试使用 -Dfile.encoding=UTF-8 启动 java vm 吗?如果这没有帮助,请尝试 -Dfile.encoding=ISO-8859-1。我知道这听起来很奇怪,但我在issues.apache.org/jira/browse/AXIS-2342 中发现了这些信息作为解决方法。也许这对您也有帮助? 【参考方案1】:

Tomcat 能够处理这类字符,它是轴的 XML 解析器不能。

如果这对您很重要,请尝试使用过滤器来拦截响应并用空格替换错误的字符以保持响应结构: How to write response filter?

Replace response body using filter

显然,如果可能,请修复在响应中向您的应用发送此类字符的服务。

【讨论】:

以上是关于Tomcat - Axis 1.4 - org.xml.sax.SAXParseException;行号:x;列号:y;字符引用 "&#的主要内容,如果未能解决你的问题,请参考以下文章

更改 Axis 1.4 生成的 SOAP Java 客户端的超时设置

Axis 1.4 Axis:管理工具在尝试使用maven部署服务时出错。

使用axis 1.4 生成金蝶EAS webservice客户端

关于Axis 1.4 环境的搭建问题

MyEclipse安装axis插件/tomcat发布axis

tomcat 用AXIS2发布WebService 网站的方法