2

XStreamwithを使用してオブジェクトDomDriverをシリアライズおよびデシリアライズするDefaultStyledDocumentため、その状態をデータベースに保存して取得します。シリアル化部分はうまくいきますが、逆シリアル化しようとすると、例外がスローされます。

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

はドキュメント内のスペース文字だと思います。

StaxDriverJsonHierarchicalStreamDriverおよびのような別のドライバーを使用してみ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.

編集 実際には はスペース文字ではありません。これは、スペース文字が " " で表されていることがわかったからです。 は、ドキュメントの編集されていない (空の) 部分のようです。それをシリアル化するのは本当に面倒ですが、逆シリアル化はしません。

4

1 に答える 1

2

上記のコメントで提供した XML スニペットを考えると、エラー メッセージは正しいです。文字参照であっても、仕様によって XML 1.0 ドキュメントに表示することが禁止されている特定の文字があり、U+0000 はこれらの文字の 1 つです。したがって�、整形式の XML ではなく、パーサーがそれを拒否するのは正しいことです。シリアライザーは明らかに、書き込みを許可する際により寛大です。

データベースでこのデータを表現するために、XML 以外の他の方法を検討することをお勧めします。たとえば、BLOB (Java オブジェクトのシリアル化を使用) などです。

于 2012-10-24T18:00:33.803 に答える