我正在尝试使用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
并且完全不可更改,因此我不知道如何继续。任何想法都赞赏!