2012-01-26 9 views
0

私は単に.save()を書くことができるクラスを作成しようとしています。子クラスの永久コピーを作成する。問題は、私はときcom.thoughtworks.xstream.mapper.CannotResolveClassExceptionを得ることであるCannotResolveClassExceptionメソッド内でXMLファイルを読み取っています。

public Object loadFile(String path) throws FileNotFoundException{ 
    File file = new File(appRootDIR + File.separator + path); 

    XStream xstream = new XStream(new KXml2Driver()); 
    FileReader extenceReader = new FileReader(file); 

    return xstream.fromXML(extenceReader); 
} 

public boolean save() throws IOException{ 
    XStream xstream = new XStream(new KXml2Driver()); 

    FileWriter extenceWriter = new FileWriter(saveFile); 
    xstream.alias(this.getClass().getSimpleName(), this.getClass()); 
    xstream.toXML(this, extenceWriter); 

    return saveFile.exists(); 
} 

し、それを読む必要があり、別の1:私は、XMLを作成する方法を作成しました私はloadFile()を使用しようとします。
私はgoogleをチェックしました。最も近いヒットはxstreamの異なるインスタンスが通信できないということでした。
これは、xstreamをクラスフィールドに移動することで解決できますが、次にxstreamがそれ自体をシリアル化できないという問題に関していくつかのエラーが発生します。

ボックスの外部でxstreamインスタンスを作成することなく、クラスに読み込みと書き込みの両方のメソッドを実装する良い方法はありますか?

答えて

0

save()に別名を使用しているため、完全修飾クラス名ではなく単純クラス名がXMLに書き込まれます。これにより、loadFile()はどのクラスを参照しているのかわかりません。

次のいずれかの方法でこの問題を解決することができます

  1. はエイリアシング使用してはいけない - シンプルな、しかし、XMLはクリーンに見えることはありません。
  2. あなたはXStreamインスタンス上で使用したいすべてエイリアスを登録する方法を確認し、彼らは別名の同じセットで動作することができるようsave()loadFile()の両方からそのメソッドを呼び出します。
+0

ありがとうございました! オプション1は素晴らしいです。 エイリアスの登録方法はまだ分かりませんでしたが、試してみます。 –

関連する問題