防止JAXB unmarshaller默认转义特殊字符

时间:2014-02-22 13:10:34

标签: java jaxb unmarshalling

我有一个XML文件,其中包含一个包含特殊字符或转义字符的元素。当我将此文件解组为Java对象时,JAXB会自动转义这些字符。但是我不希望它们被转义,并且应该使用XML文件中存在的任何值来填充对象。 我的XML文件的片段如下所示:

            <Order>
                  <name>Order One &gt;</name>
                  <price>50</price>
            <Order>

我的JAXB Order类如下所示:

            @XmlAccessorType(XmlAccessType.FIELD)
            @XmlRootElement(name = "Order")
            public class Order{

                 @XmlElement
                 private String name;

                 @XmlElement
                 private String price;

                 //skipping getter and setter for brevity

在解组时,Order类对象的名称字段的值为“Order one&gt;”而我希望它是“订单一&gt;”,因为这是要求。

我知道将此值放在CDATA中的解决方案,以便它不会被转义,但是我解组的XML文件来自外部源,我无法控制该文件。 我读到有关SO的解决方案,建议寻找'&amp;'并取代它。但该解决方案看起来并不通用,并不适用于所有场景。 Unmarshalling XML with JAXB without unescaping characters

我是JAXB世界的新手并试图找到我的脚。我之前尝试做的可能已经完成,但我还没有找到解决方案。 关于使用JAXB转义字符,SO上有几种可用的解决方案,但几乎所有关于编组的讨论。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您无法直接使用JAXB执行此操作。至少JAXB的MOXy和RI实现利用底层解析器来处理XML。当他们获得数据时,它已经被取消了。您应该寻找允许禁用unescaping的SAX或StAX解析器,并将其与JAXB一起使用以获取您正在寻找的行为。

或者你可以实现一个XmlAdapter,它可以重新转义unmarshal上的字符,并将其转发给元帅。