我正在使用JAX-WS和JAX-WS參考實現。我正在創建一個Web服務來獲取XML,然後可以返回之前存儲的XML。JAX-WS:將字符串作爲CDATA返回
@WebMethod(operationName="store")
public void store(@WebParam(name="XML") String XML)
{
...
}
@WebMethod(operationName="retrieve")
public String retrieve()
{
String s = XML;
return s;
}
My Interface對XML使用String類型。當我發送XML數據時,我將整個字符串包裝成一個CDATA-Tag(因爲我需要在soap消息中發送像<和>這樣的字符)。但是,當Web Service稍後返回該XML數據時,會發生奇怪的事情:
如果字符串足夠長,則WS將所有內容都包裝成CDATA,這就是我想要的方式。但是,如果字符串非常短(例如小XML實例),則單個字符會被轉義(例如,<變爲& lt;)。這不是我想要的,因爲它使得處理數據非常困難。此外,如果我的字符串包含&
這樣的字符,因爲我存儲了轉義文本,這會被殺死並變爲&
如何強制我的Web服務在CDATA中始終返回字符串,並且不會自行轉義任何內容?在返回值之前在字符串前後簡單追加<![CDATA[
和]]>
並沒有幫助,因爲CDATA標記本身會被轉義。
順便說一句:我認爲我存儲和檢索XML的事實並不重要。如果我存儲包含字符'<','>'和'&'(這本質上就是我所做的)的常用字符串,問題也會如此。如果我通過CDATA存儲它們,但不通過CDATA取回它們,但每個特殊字符都會獨立地轉義出來,我必須自己重建整個字符串。如何在返回字符串時強制使用CDATA?
您是否考慮過嵌套XML,而不是將其嵌入爲String?它應該讓你的生活更輕鬆。 – artbristol
接收器中的XML解析器只會做正確的事情,無論該字符串是否包含在CDATA中或者是否有單個字符都已轉義。您將獲得所有轉義解決的原始字符串。 – Henry