1

Java用のSimpleXMLライブラリを使用しています。現在、 @Convert アノテーションを使用してノードをデシリアライズしようとしています。次のプロトタイプを持つ Converter インターフェイスの read() メソッドをオーバーライドします。

Converter.read(InputNode node)

read() メソッドでは、子ノードを反復処理して逆シリアル化します。ただし、一部のサブノードは非常に複雑であり、現在のコンテキストを使用して通常の方法でデシリアライズしたいと考えています。Traverser クラスを使用して実行できると思います。

public void read(InputNode node) {
    InputNode child;
    while ((child = node.getNext()) != null) {
        String name = child.getName();
        if (name == "child1") {
            //manually read object - no problem
            MyFirstClass object = new MyFirstClass(child.getValue());
        } else if (name == "child2") {
            //automatically read object - here is the problem
            Traverser traverser = new Traverser(context);
            MySecondClass object = traverser.read(child, MySecondClass.class);
        }
    }
}

これには 2 つの問題があります。

  1. Traverser クラスは SimpleXML の内部クラスであり、デフォルトでは外部では利用できません。

  2. 読み取りメソッドでコンテキスト オブジェクトにアクセスできません。InputNode はそれにアクセスする方法を提供しません。

SimpleXML を複雑に変更せずに、この場所で Context オブジェクトを取得する方法はありますか? Traverser クラスの可視性を変更するのは簡単ですが、コンテキストを提供するのは簡単ではありません。

それとも、私が必要とすることを行うためのより簡単な方法はありますか?

4

1 に答える 1

1

作成した Persister を使用するだけで、AnnotationStrategy を使用する代わりに RegistryStrategy を使用できます。

于 2013-03-05T09:53:51.680 に答える