问题听起来很容易,但我没有设法让它正常工作。我想创建XML,但其中一个字段应该是CDATA格式,因为我们在生成的XML中进行全文搜索。
当一个字段应该在CDATA块中时,如何告诉JAXB对该对象进行marschal?我尝试的是,我用以下内容注释该字段:
@XmlJavaTypeAdapter(value=CDATAAdapter.class)
protected String valueCDATA;
适配器:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CDATAAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String v) throws Exception {
return "<![CDATA[" + v + "]]>";
}
@Override
public String unmarshal(String v) throws Exception {
return v;
}
}
事情是,无论如何它都会逃脱它。但是,如果我使用:
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.characterEscapeHandler",
(CharacterEscapeHandler) (ch, start, length, isAttVal, writer1) -> writer1.write(ch, start, length));
但这不会逃避任何其他领域。那么解决方案是什么呢?