我完全理解错误"找到了无效的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不是耻辱。
答案 0 :(得分:0)
答案 1 :(得分:0)
为什么选择marshallin / unmarshaling技术呢? 你最初有一个Java对象。 你怎么得到的?为什么它对XML字符无效,但对Java有用? 根据要求,您有三种选择:
如果Java对象中的数据是正确的并且必须在XML内部传递,则必须使用Base64对它们进行编码。二进制数据无法在XML中显示。
如果数据不好而你必须将其作为错误处理 - 在编组前执行
如果您不需要无效字节 - 请按照建议删除它们。
另一方面:检查你的marshaller默认编码。 当你创建一个marshaller时,有一个属性" jaxb.encoding"。它与unmarshaller使用的相匹配吗?即为" utf-8"
ttyname()
答案 2 :(得分:0)
我忘记了第三件事......
XML中的字符串无效,必须转义为:
< <
> >
& &
for attribute values only:
" "
' '
如果你的任何字符串都有它们,那么如果它们不在属性中,它们必须被转义或包含在CDATA中。