2010-03-19 159 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