当数据包含不可显示的字符时,JAXB输出无效的XML

时间:2012-11-05 10:54:14

标签: java xml jaxb eclipselink moxy

我正在使用JAXB 2.2.5从JAXB模型输出Xml,数据从数据库中填充,有时数据库包含不应显示的不可显示的字符

0x1a 

如果确实如此,那么JAXB只是按原样输出这个char输出无效的Xml,它不应该逃脱它吗?

更新

我想知道是否有任何实现可以解决这个问题,也许是Eclipselink MOXy吗?

修改

我尝试了修复非法字符问题的解决方法,但它以不合需要的方式更改了输出。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><metadata created="2013-02-27T11:40:04.009Z" xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"/></cdstub></cdstub-list></metadata>

<?xml version="1.0" ?><metadata xmlns:ext="http://musicbrainz.org/ns/ext#-2.0" xmlns="http://musicbrainz.org/ns/mmd-2.0#" created="2013-02-27T11:39:15.394Z"><cdstub-list count="1" offset="0"><cdstub id="w237dKURKperVfmckD5b_xo8BO8-" ext:score="100"><title>fred</title><artist></artist><track-list count="5"></track-list></cdstub></cdstub-list></metadata>

<track-list count="5"/>已成为<track-list count="5"></track-list>这是不受欢迎的,我不确定为什么会这样做。

3 个答案:

答案 0 :(得分:5)

这显然是一个常见问题 - 并标记为错误JAXB generates illegal XML characters

您可以在Escape illegal characters

找到解决方法

答案 1 :(得分:2)

另一个解决方案是使用Apache Commons Lang删除无效的XML字符:

import org.apache.commons.lang3.StringEscapeUtils;

String xml = "<root>content with some invalid characters...</root>";
xml = StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml10(xml));

escapeXml10方法将转义String并删除无效字符。 unescapeXml方法将撤消转义。最终结果是相同的XML,但删除了无效的XML字符。

答案 2 :(得分:0)

只需将字符替换为邮件内容中的任何字符或空格。如果您不想使用额外的罐子或第三方物品,可以尝试以下方法:

String msgContent = "......";// string with some illegal character
msgContent = msgContent .replaceALL("\\P{Print}","_");

在此示例中,replaceALL方法用下划线替换不可打印的字符。因此,您的msgContent将只是可打印的字符,并且可以防止JAXB出现非法字符。