JAXB输出时,数据中包含不可显示的字符无效的XML(JAXB outputting invalid

2019-08-02 08:22发布

我使用JAXB 2.2.5从JAXB模型输出XML,数据从数据库中填充偶尔数据库中包含的非显示的字符,它不应该如

0x1a 

如果是的话那么JAXB输出由作为是,它不应该逃避它或东西只是输出这个字符无效的XML?

更新

我不知道是否有那些解决这个问题的任何实现,也许EclipseLink的莫西呢?

编辑

我想,修复了非法字符的问题但是它改变不期望的方式输出的解决方法。

<?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>这是不可取的,我不知道为什么它是这样做的。

Answer 1:

这显然是一个共同的问题-并标记为错误JAXB产生非法XML字符 。

你可以找到一个解决办法逃生非法字符



Answer 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方法逃避字符串,并删除无效字符。 该unescapeXml方法将撤消转义。 最终的结果是相同的XML,但与无效XML字符删除。



Answer 3:

只需在邮件内容的任何或空格替换字符。 如果你不想使用额外的罐子或第三方的东西,你可以试试下面的方法就可以了:

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

在该示例中,方法的replaceAll替换以下划线不可打印的字符。 所以,你的msgContent将刚刚打印的字符和防止JAXB从非法字符。



文章来源: JAXB outputting invalid XML when data contains non-displayable chars