当数据包含不可显示的字符时,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出现非法字符。