カスタムコレクション型XmlAdapter
にアンマーシャリングするために を使用しようとしています (クラスの別の使用によって課された競合する制限のために、意図的にインターフェイスを実装しません。クラスにコレクションが含まれている場合、残念ながら失敗します)。問題は、コレクションに配置されるノードがラッパー要素にラップされていないことです。XML
Collection
XML
これが私のXML
基本的な外観です。
<xml>
<foo></foo>
<bar>1</bar>
<bar>2</bar>
</xml>
JAXB
これを次のように非整列化できますPOJO
:
class Naive {
Foo foo;
List<Bar> bar;
}
ただし、私がやりたいことは次のとおりです。
class Bars {
// There will be a fixed number of these, known in advance
Bar bar1;
Bar bar2;
}
class BarsAdapter extends XmlAdapter<ArrayList<Bar>, Bars> {
...
}
class Custom {
Foo foo;
@XmlJavaTypeAdapter(BarsAdapter.class) // won't work
Bars bar;
}
ご覧のとおりXmlAdapter
、個々の要素ではなく、リスト全体を適応させる を作成しましたが、アンマーシャリングのために呼び出されることはありません。(マーシャリングのために呼び出されます。)
XML
要素の周りにラッパーが含まれている場合、<bar>
これを解決する方法を知っています:
<xml>
<foo></foo>
<wrapper>
<bar>1</bar>
<bar>2</bar>
</wrapper>
</xml>
bars
フィールドに注釈を付けることができ@XmlElement(id="wrapper")
、アダプターが正しく呼び出されるためです。ただし、XML
スキーマは から来ており、RFC
完全に変更できないため、どのように進めればよいか困っています。どんなアイデアでも大歓迎です!