Использование JAXB XmlAdapter для адаптации всего списка без элемента-оболочки

Я пытаюсь использовать 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 и совершенно неизменен, поэтому я застрял в том, как поступить. Любые идеи приветствуются!

0 ответов

Другие вопросы по тегам