2

我使用XStreamwithDomDriver来序列化和反序列化一个DefaultStyledDocument对象,所以我在数据库中保存和检索它的状态。序列化部分运行良好,但是当它尝试反序列化时,会抛出异常:

[Fatal Error] :92:51: Character reference "&# Exception in thread "AWT-EventQueue-0" com.thoughtworks.xstream.io.StreamException: : Character reference "&#

我相信 是文档中的空格字符。

我什至尝试使用不同的驱动程序,例如:和StaxDriver,但没有运气。JsonHierarchicalStreamDriverJettisonMappedXmlDriver

我在这里做错了什么?

这是我的代码:

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.

编辑 实际上 不是空格字符,因为现在我看到空格字符由“”表示。 似乎是文档的未编辑(空)部分。序列化它真的很烦人,但没有反序列化它。

4

1 回答 1

2

鉴于您在上面的评论中提供的 XML 片段,错误消息是正确的 -即使作为字符引用,规范也禁止在 XML 1.0 文档中出现某些字符,并且 U+0000 是这些字符之一。因此�不是格式良好的 XML,解析器拒绝它是正确的。序列化程序显然更宽松地允许编写它。

我建议您探索其他非 XML 方式来表示数据库中的这些数据,可能是 BLOB(使用 Java 对象序列化)或类似的方式。

于 2012-10-24T18:00:33.803 回答