1

現在、SimpleXMLフレームワークを使用してXMLファイルを解析していますが、繰り返し発生する問題に直面しています。

受信したXMLは、次のいずれかになります。

<root>
   <B>
      ...
   </B>
</root>

またはそのようなもの:

<root>
   <C>
      ...
   </C>
</root>

そして、BとCに別のクラス、たとえばAを拡張してもらいたい。

SimpleXMLでそれを行うためのきちんとした方法は次のとおりです。

@Root(name="root")
class Root {

   @Element(name="B", required="false")
   private B b;

   @Element(name="C", required="false")
   private C c;
}

class B extends A {

}

class C extends A {

}

SimpleXMLドキュメントで見つけた何かを、XML形式を変更して実行できることはわかっています。

<root>
   <A class="example.B">     // or "example.C"
      ...
   </A>
</root>

そして私のJavaクラス:

@Root(name="root")
class Root {

   @Element(name="A")
   private A a;
}

class B extends A {

}

class C extends A {

}

このソリューションを使用したいのですが、解析する前にクライアント側でXMLを変更するプロセスを実行するかどうかはまったくわかりません。問題は、私がそれを制御できないため、サーバー側で実行できないことです。

だから私の質問は:

これが私が持っている唯一の解決策ですか?

この場合、クライアント側でxmlファイルを変更するための高速な解決策があるかどうか知っていますか?

4

1 に答える 1

6

継承を行う方法がわかりませんが、インターフェイスを使用して解決策を見つけました(私の場合は問題ありません)

トリックは使用することです:

@Root(name="root")
class Root {

   @ElementUnion({
       @Element(name="B", type=B.class),
       @Element(name="C", type=C.class)
   })
   private A a;
}

interface A {

}

class B implements A {

}

class C implements A {

}

継承でも同じことができればいいのですが。

更新: を使用して継承を利用できます@ElementUnion。ドキュメントには指定されていませんが、これも機能します。

@Root(name="root")
class Root {

   @ElementUnion({
       @Element(name="B", type=B.class),
       @Element(name="C", type=C.class)
   })
   private A a;
}

class A {

}

class B extends A {

}

class C extends A {

}
于 2012-04-26T15:48:29.597 に答える