残りの呼び出しから返されたXmlをPOJOにアンマーシャリングしようとしています。しかしながら、1つの呼び出しは、異なるルート要素を有する異なるタイプの文書を返すことができる。ルート要素に依存するJaxbアンマーシャリング
<obj1> ... </obj1>
<obj2> ... </obj2>
私は、一般的な機能使用して非整列化:私は別の根のそれぞれのためのクラスを分離するために作成しましたが、私は、私はルート要素の種類を確認することができますかわからない
private <T> T unmarshal(String xml, Class<T> clazz) {
JAXBContext jc = JAXBContext.newInstance(clazz);
return clazz.cast(jc.createUnmarshaller().unmarshal(new StringReader(xml));
}
をし、私のunmarshall関数を正しい型で呼び出すのですか?
if rootElement.equals("obj1")
Obj1 obj = unmarshal(xml, Obj1.class)
else if rootElement.equals("obj2")
Obj2 obj = unmarshal(xml, Obj2.class)
JaxBを使用してルート要素の条件チェックを行う方法はありますか?
'@ XmlRootElement'自体で、アンマーシャリングした後に正しいオブジェクトインスタンスを取得できます。私は問題はあなたが '@ XmlRootElement'としてそれらをdelcaredしていないことだと思います。あなたはなぜ私の答えで上記のポイント3を使って直接ルート要素オブジェクトにキャストできないのかを詳しく説明できますか? – ulab
Obj1とObj2モデルクラスの両方に '@XmlRootElement'というアノテーションが付けられています。私は問題文があいまいであると思います。私は、複数の '@XmlRootElement'をとり、それらを単一のオブジェクトに変換できるようなカスタム解析ロジックを作成したかったのです。私はこれをやりたかったのです。なぜなら、私が外部のRESTサービスに行っていた呼び出しが、同じ呼び出しのために異なるタイプのオブジェクトを返すことができるからです。 – Niru