5

カスタムコレクション型XmlAdapterにアンマーシャリングするために を使用しようとしています (クラスの別の使用によって課された競合する制限のために、意図的にインターフェイスを実装しません。クラスにコレクションが含まれている場合、残念ながら失敗します)。問題は、コレクションに配置されるノードがラッパー要素にラップされていないことです。XMLCollectionXML

これが私の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完全に変更できないため、どのように進めればよいか困っています。どんなアイデアでも大歓迎です!

4

0 に答える 0