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

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

0x1a 

如果确实如此,那么JAXB只是按原样输出这个字符来输出无效的Xml,它不应该逃脱它或其他东西吗?

更新

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

编辑

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

 fred 

 fred 

已成为 ,这是不可取的,我不知道为什么会这样做。

这显然是一个常见问题 – 并且标记为JAXB生成非法XML字符的错误。

您可以在Escape非法字符中找到解决方法

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

 import org.apache.commons.lang3.StringEscapeUtils; String xml = "content with some invalid characters..."; xml = StringEscapeUtils.unescapeXml(StringEscapeUtils.escapeXml10(xml)); 

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

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

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

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