8
我在做一個WSDL客戶端,並想知道如何將XML元素設置爲CDATA。WSDL客戶端中的CDATA元素
我使用wsimport
來生成源代碼,而CDATA元素是請求XML的一部分。 這是XML類的要求:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "dataRequest" })
@XmlRootElement(name = "ProcessTransaction")
public class ProcessTransaction {
protected String dataRequest;
public String getDataRequest() {
return dataRequest;
}
public void setDataRequest(String value) {
this.dataRequest = value;
}
}
我已經試過@XmlAdapter,但它的變化對輸出沒有什麼...
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class AdaptorCDATA extends XmlAdapter<String, String> {
@Override
public String marshal(String arg0) throws Exception {
return "<![CDATA[" + arg0 + "]]>";
}
@Override
public String unmarshal(String arg0) throws Exception {
return arg0;
}
}
在XML類:
@XmlJavaTypeAdapter(value=AdaptorCDATA.class)
protected String dataRequest;
我試圖調試,但它從來沒有踩到AdaptorCDATA
函數。
wsimport
版本是2.2.9
和jaxb-api
版本是2.1
。
爲什麼你需要這個?因爲你想寫xml-data到元素?這應該是開箱即用的。我們有一個xml數據字符串,在相應的元素中將其設置爲值,然後JAXB的魔術在編組時將所有的CDATA包裹起來。 – Frank
我需要這個,因爲當我設置「dataRequest」與CDATA字符串,它完全逃脫。 – fabriciols
好吧,我只是用我們的一個類的任意字符串成員嘗試了你的AdaptorCDATA,它很好地進入了'marshall()' - 方法。看看你的問題,我發現你有一個代碼片段,你有'@ XmlJavaTypeAdapter'-Annotation,但不是'ProcessTransaction'類中它應該是的。如果你有它,但是斷點仍然沒有被擊中,也許你必須在引發客戶之前重建和刷新? – Frank