Tomcat - Axis 1.4 - org.xml.sax.SAXParseException; lineNumber:x; columnNumber:y;字符参考"&#

时间:2017-07-04 22:27:01

标签: java maven axis rpc saxparser

我们正在从Weblogic转移到Tomcat。

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

其中一个webservice调用正在响应以下示例:

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; lineNumber:x; columnNumber:y;字符参考&#34;&amp;#

似乎Axis&#39; SAX Parser并不期望一个带有#after&amp;的XML实体。 不幸的是,我们无法改变网络服务响应的行为/内容。

有没有办法在客户端解决此问题,例如,禁用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 Debugger中(使用Weblogic) In Eclipse Debugger

在Notepad ++中(使用上述Weblogic检索的响应) In Notepad

1 个答案:

答案 0 :(得分:0)

Tomcat能够处理那些字符,它的轴是&#39;无法解析的XML解析器。

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

Replace response body using filter

显然,如果可能,请修复在响应中发送应用的服务。