我们正在从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(........)2678700000 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如何处理此角色。
答案 0 :(得分:0)
Tomcat能够处理那些字符,它的轴是&#39;无法解析的XML解析器。
尝试使用过滤器拦截响应并用空格替换错误的字符以保留响应结构(如果这对您很重要): How to write response filter?
Replace response body using filter
显然,如果可能,请修复在响应中发送应用的服务。