java - 将java类转换为XML String时如何阻止JAXB转义某些字符?

问题描述

在尝试使用 JAXB 将 Java 对象编组为 XML 字符串时,我在 Java 1.8 应用程序中遇到了一些问题。第一个问题是认情况下编组转义 所以当我试图将某些字段包装在

<![CDATA[ my-field-value ]]> 

它正在变成

&lt;![CDATA[ my-field-value ]]&gt;

这首先破坏了使用 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 (将#修改为@)