2010-03-19 157 views
3

我试图在Soap请求中发送特殊的(&,'(单引号))字符。我正在使用轴1.4。 webservice客户端位于weblogic服务器中,webservice服务器是ibm主机(COBOL程序)。在Soap请求中发送无效的XML字符

来自客户机的请求数据中包含特殊字符(&符号),它被转换为&

我试图与CDATA包围它作为

<![CDATA[Some Name & Some Data ]]> ,其得到了转化为

&lt;![CDATA[Some Name &amp; Some Data]]&gt; 

web服务客户端是从wsdl生成的,所以我无法使用CDATA api来构建请求。我可以将它设置为字符串值,并且它正在转换。

任何帮助,将不胜感激。如果您需要更多关于此的信息,请告诉我。

+0

究竟是什么问题?您正在发送XML实体。你无法处理它们或者不能使用它们吗? – 2010-03-19 18:56:47

+2

您是以XML还是字符串形式发送数据?我不知道Axis API,但在.NET中,我发现人们在使用字符串API而不是XML API构建XML时始终存在此问题。也许这是你的问题。 – 2010-03-19 18:59:35

+0

是的,COBOL解析器遇到放大器符号时无法读取完整的字符串。例如:String“Name&Sex”,cobol解析器无法将其解析为完整的字符串。所以我必须把它放在cdata中以指示cobol解析器验证内容。 当我将它放入CDATA中时,它会转换为<![CDATA [名称&性别]] > - 再次,cobol解析器无法读取内容。 – 2010-03-22 15:17:55

回答

7

Web服务客户端存根正在为您执行XML编码。 Web服务需要XML,并且它将&'编码为实体引用,以便您将发送有效的XML。

对于XML解析器,它将“看到”&amp;&并且您没有问题。

如果服务器无法处理实体引用,那么COBOL“web服务”就没有做它应该做的事情。这使得您(和基于标准的工具)很难从WSDL生成客户端存根,这本质上是描述数据格式和交换规则的合约。

如果WSDL和SOAP服务不遵守规定的接口规则,提供WSDL和SOAP服务有什么意义?

+0

好的,忽略了COBOL程序无法解析我的内容的部分。 如何在请求中发送一个CDATA而不需要编码? – 2010-03-22 15:26:12

+0

我不确定AXIS存根是否允许您设置内容并指定它应该是CDATA。看起来好像其他人也有类似的问题:http://osdir.com/ml/axis-user-ws.apache.org/2009-12/msg00095.html您可能必须破解生成的存根代码,寻找一个生成存根的不同工具,或者手动构建您的SOAP请求和发布。 – 2010-03-22 23:13:45

+0

是的。我最后也做了同样的事情,看着轴存根来处理这个特定的情况。我还没有弄清楚,如果我找到了一些东西,我会再次发布。谢谢你的帮助。 – 2010-03-23 14:27:23