如何防止JAXB转义字符串

时间:2010-07-20 10:26:40

标签: java jaxb

我有一个由XJC生成的对象,名为Product。我想将product.currentPrice (a String)设置为£210,其中£是货币符号(从系统中的其他位置传入)。

麻烦的是,JAXB正在逃避我的&号,所以它产生了£210。我怎么做不这样做?

6 个答案:

答案 0 :(得分:10)

默认情况下,JAXB的marshaller实现通常会转义字符。要更改此默认行为,您必须编写一个实现com.sun.xml.bind.marshaller.CharacterEscapeHandler接口的类。

在Marshaller中设置该处理程序

CharacterEscapeHandler escapeHandler = NoEscapeHandler.theInstance;
marshaller.setProperty("com.sun.xml.bind.characterEscapeHandler", escapeHandler); 

您可以查看JAXB提供的样本,字符转义样本

答案 1 :(得分:7)

就像rjsang所说,使用“UTF-8”编码时存在一个错误,这是默认情况。如果您不关心区分大小写的问题,请尝试使用“utf-8”并让您的自定义转发器按预期工作。 UTF-16也适用,除了“UTF-8”之外的任何东西:“uTf-8”等等。

标准中的可怕错误。

以下是执行此操作的代码:

marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "utf-8");

答案 2 :(得分:2)

XmlStreamWriter的解决方案

final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);

From here

答案 3 :(得分:1)

如果你实现了这个接口:com.sun.xml.bind.marshaller.CharacterEscapeHandler,你自己的角色转义,但你想将一些行为委托给传统的转义,你可以使用任何这些条款(或写你的拥有基于它们的代码):

  • com.sun.xml.bind.marshaller.MinimumEscapeHandler
  • com.sun.xml.bind.marshaller.NioEscapeHandler
  • com.sun.xml.bind.marshaller.DumbEscapeHandler

它们带有JAXB RI Implementation AKA jaxb-impl-2.2.1.jar。

希望这对任何人都有帮助,就像它帮助了我一样。

答案 4 :(得分:0)

如何使用CDATA部分包装值,然后使用可以处理CDATA的EclipseLink MOXy等JAXB实现?

   

使用MOXy处理CDATA请参阅:

答案 5 :(得分:0)

根据您正在寻找的内容,您可以:

  • 禁用字符转义
  • 或使用CDATA字符串,支持只需添加到JAXB中即可 一点配置