我正在尝试使用一个XmlAdapterunmarshal XML到一个自定义集合类型(Collection由于另一个类的使用所施加的冲突限制,故意不实现接口,如果该类包含任何集合,这很可能会失败).难点在于XML放置在集合中的节点不会包装在包装元素中.
这是我的XML基本面貌:
<xml>
<foo></foo>
<bar>1</bar>
<bar>2</bar>
</xml>
Run Code Online (Sandbox Code Playgroud)
我可以JAXB解决以下问题POJO:
class Naive {
Foo foo;
List<Bar> bar;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是以下内容:
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;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我编写了一个XmlAdapter想要调整整个列表的内容,而不是单个元素,但它从不会被调用以进行解组.(它会被调用以进行编组.)
如果我XML在<bar>元素周围包含一个包装器,那么我知道如何解决这个问题:
<xml> …Run Code Online (Sandbox Code Playgroud)