`
javatgo
  • 浏览: 1125225 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

WAS与低版本WebLogic进行WebService通信问题

 
阅读更多

现象:

原有两台WebLogic v6.1上面运行的WS应用,改成WebLogic v6.1作为服务提供方,WebSphere V6作为服务接收方后,在WebSphere接收到返回信息时,抛出错误:
00000032 SystemErr R WebServicesFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultString: org.xml.sax.SAXParseException: 内容中不得出现字符序列“]]>”,除非它用于标记 CDATA 部分的结尾。 Message being parsed: <?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance' xmlns:xsd='http://www.w3.org/1999/XMLSchema'><SOAP-ENV:Body><ns0:unifiedCall20Response xmlns:ns0='urn:local' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><return xsi:type='xsd:string'>&lt;?xml version="1.0" encoding="GB2312"?>
&lt;RESPONSE>
&lt;ROUTE>
&lt;VERSION>2.0&lt;/VERSION>
&lt;OBJ_RANGE>01&lt;/OBJ_RANGE>
&lt;RET_FLAG>Y&lt;/RET_FLAG>
&lt;/ROUTE>
&lt;DISPATCHER>
&lt;VERSION>2.0&lt;/VERSION>
&lt;/DISPATCHER>
&lt;CONTENT>
&lt;COMMAND>QUERY&lt;/COMMAND>
&lt;RET_FORMAT>VN,CN,VL,CT&lt;/RET_FORMAT>
&lt;DATA APPID="A001">
&lt;STATE>1/1&lt;/STATE>
&lt;R>
&lt;PHOTO VN="PIC">&lt;![CDATA[/9j/4AAQSkZJRgABAQAAAQABAAD/2wOckkZrL(以下略)
(以上略)orODSv3Sknd5i5JPrzWx9s8Qf8AQN/8fX/GqbZO/U//2Q==]]>&lt;/PHOTO>
&lt;/R>
&lt;/DATA>
&lt;/CONTENT>
&lt;/RESPONSE>
</return></ns0:unifiedCall20Response></SOAP-ENV:Body></SOAP-ENV:Envelope>
faultActor: null
faultDetail:

原因:

究其原因,因为发送的XML中包含<CDATA>标签,而在发送前WebLogic将该段XML放入到SOAP时,该段XML”<”全部被转义成”&lt;”,但”>”却没有被转义,导致WebSphere在接收之后解析该段XML时就会抛出Exception。但如果该段XML不含有<CDATA>字样时不会有任何转义现象出现。

解决方案:

因为当时无法更换发送端的WebLogic服务器,而问题出现在那边,因此只好对发送出来的XML进行编码(如Base64),使发送时的内容不再是含有CDATA的XML,而只是一串特殊的字符串,以此“蒙骗”WebLogic进行SOAP打包时候的问题。WebSphere方接收后应用程序需要对该特殊字符串进行解码再做原有的XML解析。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics