我有一个由XJC生成的对象,叫做Product.我想设置product.currentPrice (a String)成为£210其中£的货币符号(从其他地方系统中的传递).
麻烦的是,JAXB正在逃避我的&号,所以它生产了£210.我怎么做不这样做?
我需要使用JAXB Marshaller(JAXB 2.2版)将XML java对象序列化为XML文件.现在在xml对象中,我有一个包含String值的标记,这样:
"<"tagA>
**"<"YYYYY>done"<"/YYYYY>**
"<"/tagA>
Run Code Online (Sandbox Code Playgroud)
现在您可以看到此字符串值再次包含标记.我希望在xml文件中以相同的方式编写它.
但是JAXB Marshaller会转换这些值,例如:
"&"lt;YYYYY"&"gt;"&"#xD;done ......等等
我无法使用JAXB 2.2单独处理这些转义字符.反正可能吗?
在这方面的任何帮助都会很棒..
在此先感谢Abhinav Mishra
我有一个JAX-WS端点,其中包含许多方法,这些方法都返回转换为String的XML文档.
这已经在Sun Java System Application Server 9.1 Update 2上运行了一段时间,但需要部署到新服务器.
它被部署到Glassfish 3.0.1没有任何问题,除了一个小问题.原始响应示例摘录:
<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return xmlns=""><?xml version="1.0" encoding="UTF-8"?>
<my_xml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Transfer In" name="Xfr or R/O In" type="X"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)
在新服务器上,它返回:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getTransactionTypesResponse xmlns:ns2="http://myns.com.au/">
<return><?xml version="1.0" encoding="UTF-8"?>
<myxml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Administration Fee" name="Fee:AUM" type="U"/>
</my_xml>
</return>
</ns2:getTransactionTypesResponse>
</S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)
几乎完全相同但只有开口尖括号被转义,而不是关闭括号.
我已使用直接HTTP POST请求对此进行了测试,因此我知道它没有受到任何客户端代码的破坏.
我再次将服务器升级到Glassfish 3.1,认为包含的webservice库存在问题,但没有运气.我的应用程序完全依赖于glassfish中的webservice支持 - 它不包含任何自己的WS或XML库.
端点基本上定义如下: …
想象一下以下情况:我们从某些外部工具收到一个 xml 文件。最近,在此 xml 中,节点名中或其 richcontent 标记中可能存在一些转义字符,如以下示例(简化)所示:
<map>
<node TEXT="Project">
<node TEXT="ää">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
I am a Note for Node ää!
</p>
</body>
</html>
</richcontent>
</node>
</node>
</map>
Run Code Online (Sandbox Code Playgroud)
使用 JAXB 解组文件后,那些转义的字符就不会转义。不幸的是,我需要他们保持原样,这意味着逃跑。有什么方法可以避免在解组时取消转义这些字符?
在研究时,我发现了很多有关编组 xml 文件的问题,其中出现了相反的问题,但这些也没有帮助我:
是否有可能使用 JAXB 来实现这一目标,或者我们是否必须考虑更改为不同的 xml 读取器 API?
提前谢谢你,ymene
我有下一个 xml 文件
<xml name="Places">
<data>
<row Code="1" Name="#X1.A&B(City)" />
</data>
</xml>
Run Code Online (Sandbox Code Playgroud)
在执行 unmarshal 后,The reference to entity "B" must end with the ';' delimiter由于 Name 属性内的 & 符号,我收到异常。
JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
File xml = new File("test2.xml");
Object obj = unmarshaller.unmarshal(xml);
Run Code Online (Sandbox Code Playgroud)
我怎样才能逃脱这些角色?
我已经尝试添加 CharacterEscapeHandler 但它不适用于 Unmarshaller
private static class EscapeHandler implements CharacterEscapeHandler {
@Override
public void escape(char[] buf, int start, int len, boolean isAttValue,
Writer out) throws IOException {
...
}
}
unmarshaller.setProperty("com.sun.xml.bind.marshaller.CharacterEscapeHandler", …Run Code Online (Sandbox Code Playgroud)