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