3

XStream パッケージを使用して Java で文字列をデシリアライズしようとしています。XStream パッケージは、私のクラスを正常にシリアライズできます。サーバーから XML (XML の形式を変更することはできません) を取得し、そのノード情報を特定のクラスの対応する変数に保存しようとします。私の関数は一番下にあり、XStream オブジェクトの新しいコンバーターを登録しようとしましたが (1 つの変数がバイト配列であるためだと考えていました)、まだ運がありません。誰でもこれらの例外に光を当てることができますか? 「MyClass」を登録し、XStream 用の独自のコンバーターを作成して、クラスの逆シリアル化を処理する必要がありますか? 前もって感謝します。

文字列または StringReader オブジェクトが入力として fromXML() に渡された場合の例外:

[致命的なエラー] :1:1: プロローグではコンテンツを使用できません。
com.thoughtworks.xstream.io.StreamException: : プロローグではコンテンツは許可されていません。
com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:86)
com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:66)
com.thoughtworks.xstream.XStream .fromXML(XStream.java:853)

ByteArrayInputStream が fromXML() への入力として使用される場合の例外:

com.thoughtworks.xstream.converters.ConversionException: ByteSize : ByteSize : ByteSize : ByteSize
---- デバッグ情報 ----
メッセージ : ByteSize : ByteSize
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : ByteSize : ByteSize
クラス : MyClass
必須タイプ : MyClass
パス : /MyClass/ByteSize
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:89)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller. java:63)
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76) で
com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60
)
で(AbstractTreeMarshallingStrategy.java:33)
com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
com.thoughtworks.xstream.XStream. fromXML(XStream.java:861)

static Object fromXmlString(String xml) 
{
    XStream xStream = new XStream(new DomDriver());
    xStream.registerConverter(new EncodedByteArrayConverter());
    //tried all 3 below
    //return xStream.fromXML(new StringReader(xml));
    //return xStream.fromXML(new ByteArrayInputStream(xml.getBytes()));
    return xStream.fromXML(xml);
}
4

3 に答える 3

4

この質問を見てください: content not allowed in prolog exception

「プロローグで許可されていないコンテンツ」は、通常、ファイルの<?xmlヘッダー (「プロローグ」) の前に何らかのコンテンツがあることを意味します。これは許可されていません。

<?xmlそのため、文字列の前に文字がないこと、およびBOMの問題がないことを確認してください。

于 2009-06-16T14:42:54.370 に答える
4

これはエンコードの問題です。XStream のドキュメントから:

「すべての HierarchicalStreamDriver 実装は、バージョン 1.3 以降のエンコーディングを尊重しますが、InputStream を提供する場合のみです。」

XML を読み込もうとするときに、Reader を追加するだけです。例えば:

Object obj = xStream.fromXML(new FileReader(xmlFile));
于 2012-04-02T16:04:28.927 に答える
0

逆シリアル化/デコード XStream インスタンスは、エンコード XStream インスタンスと同じ方法で構成されていますか? 私は後者をチェックし、同じ XStream インスタンスがエンコードとデコードの両方を行えることを確認します。

于 2009-06-16T14:44:59.157 に答える