如何解决java - 将java类转换为XML String时如何阻止JAXB转义某些字符?
在尝试使用 JAXB 将 Java 对象编组为 XML 字符串时,我在 Java 1.8 应用程序中遇到了一些问题。第一个问题是默认情况下编组转义 所以当我试图将某些字段包装在
<![CDATA[ my-field-value ]]>
它正在变成
<![CDATA[ my-field-value ]]>
这首先破坏了使用 CDATA 的功能。我根据 How to prevent JAXB escaping a string 的一些评论使用了自定义字符处理程序。现在一切都在为我工作,但我听说我不应该使用 com.sun.xml.internal.* 包,目前我正在这样做(注意使用 internal):
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
marshaller.setProperty(
"com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler",new MyCustomCharacterHandler());
return marshaller;
MyCustomCharacterHandler 是这样声明的(注意使用 internal):
import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler;
public class XmlCdataCharacterHandler implements CharacterEscapeHandler {
...
}
这种组合对我来说效果很好,但是在修改我的代码以摆脱 .internal.* 时,就像使用此依赖项一样:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.7</version>
</dependency>
import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
public class XmlCdataCharacterHandler implements CharacterEscapeHandler {
...
}
JAXBContext jc = JAXBContext.newInstance(PrintPack.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
marshaller.setProperty(
"com.sun.xml.bind.marshaller.CharacterEscapeHandler",new MyCustomCharacterHandler());
return marshaller;
我的服务器将不再启动,并且收到带有以下消息的 JAXBException:
name: com.sun.xml.bind.marshaller.CharacterEscapeHandler value: com.fmrco.research.search.handlers.MyCustomCharacterHandler@1f3d4305
这让我认为实现 CharacterEscapeHandler 的自定义处理程序不再正确使用。有谁知道如何解决这个问题,这样我就可以在避免 com.sun.xml.internal.* 包的同时保留这个实现?是否有更好/更新的方法将 java 类转换为 XML 字符串?似乎我不应该一直坚持下去。谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。