我使用XStream
和DomDriver
来序列化和反序列化DefaultStyledDocument
对象,因此我在数据库中保存并检索它的状态。序列化部分运行良好,但是当它尝试反序列化时,会抛出异常:
[Fatal Error] :92:51: Character reference "&# Exception in thread "AWT-EventQueue-0" com.thoughtworks.xstream.io.StreamException: : Character reference "&#
我相信&#是文档中的空格字符。
我甚至尝试使用不同的驱动程序,例如StaxDriver
,JsonHierarchicalStreamDriver
和JettisonMappedXmlDriver
,但没有运气。
我在这里做错了什么?
这是我的代码:
DefaultStyledDocument doc = new DefaultStyledDocument();
//initialize doc
XStream xmlstream = new XStream(new StaxDriver());
String xml = xmlstream.toXML(doc);
//save 'xml' in database
//select from database
DefaultStyledDocument document = (defaultStyledDocument) xmlstream.fromXML(result.getString(1));
//this is where the exception is thrown.
修改 实际上&#不是空格字符,因为现在我看到空格字符用“”表示。 &#似乎是文档中未编辑(空)的部分。将序列化它真的很烦人,但不会反序列化它。
答案 0 :(得分:2)
鉴于您在上面的注释中提供的XML片段,错误消息是正确的 - 有些字符被规范禁止出现在XML 1.0文档中,甚至作为字符引用和U +0000是这些字符之一。因此�
不是格式良好的XML,解析器拒绝它是正确的。串行器显然更容易被允许写入。
我建议你探索其他非XML方法来在数据库中表示这些数据,可能是BLOB(使用Java对象序列化)或类似的。