如何告诉JAXB marschaller创建CDATA元素?

时间:2017-07-20 11:14:22

标签: java xml jaxb

问题听起来很容易,但我没有设法让它正常工作。我想创建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));

但这不会逃避任何其他领域。那么解决方案是什么呢?

0 个答案:

没有答案