成功编组后,在解组时找到了无效的XML字符(Unicode:0x3)

时间:2016-12-08 12:01:14

标签: java xml jaxb marshalling rt.jar

我完全理解错误"找到了无效的XML字符(Unicode:0x3)"

  

引起:org.xml.sax.SAXParseException:在文档的元素内容中找到了无效的XML字符(Unicode:0x3)。       at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)〜[na:1.8.0_111]       在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)〜[na:1.8.0_111]       at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)〜[na:1.8.0_111]       at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)〜[na:1.8.0_111]       at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)〜[na:1.8.0_111]       at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2923)~ [na:1.8.0_111]

但是我不敢相信我的眼睛,因为它首先是用这个角色编组的。

我已经编组了包含部分.gz文件的类,并且编组成功了。 当我试图解组它时,它给了我这个错误。

我使用的marshaller和unmarshaller来自/ com / sun / xml / internal / bind / v2 / runtime / - rt.jar。

Marshaller marshaller = context.createMarshaller();
marshaller.marshal(object, stringWriter);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshal(new StringReader(stringWriter.toString()));

这是明显的反身性问题,我不知道如何处理它。

任何有同样问题的人,请告知如何克服它,希望不要改变编组。

P.S。根据我的理解,marshallers应该始终反身,不要整理那些无法解散的东西。 rt.jar不是耻辱。

3 个答案:

答案 0 :(得分:0)

为什么不尝试删除无效的字符。

在这个帖子中讨论了这个问题。

check this thread

希望这会有所帮助!!

答案 1 :(得分:0)

为什么选择marshallin / unmarshaling技术呢?  你最初有一个Java对象。 你怎么得到的?为什么它对XML字符无效,但对Java有用? 根据要求,您有三种选择:

  1. 如果Java对象中的数据是正确的并且必须在XML内部传递,则必须使用Base64对它们进行编码。二进制数据无法在XML中显示。

  2. 如果数据不好而你必须将其作为错误处理 - 在编组前执行

  3. 如果您不需要无效字节 - 请按照建议删除它们。

  4. 另一方面:检查你的marshaller默认编码。  当你创建一个marshaller时,有一个属性" jaxb.encoding"。它与unmarshaller使用的相匹配吗?即为" utf-8"

    ttyname()

答案 2 :(得分:0)

我忘记了第三件事......

XML中的字符串无效,必须转义为:

<   &lt;
>   &gt;
&   &amp;
 for attribute values only:
"   &quot;
'   &apos;

如果你的任何字符串都有它们,那么如果它们不在属性中,它们必须被转义或包含在CDATA中。

见这里: Invalid Characters in XML