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