我有一个XML结构,如下所示:
<root>
<user></user>
<data></data>
<things-map>
<item>
<key>one</key>
<value>Eins</key>
</item>
<item>
<key>two</key>
<value>Zwei</key>
</item>
<item>
<key>three</key>
<value>Drei</key>
</item>
</things-map>
</root>
我想将其解组为以下结构:
public class Root {
// These are unimportant.
private String user;
private String data;
private ThingsMap thingsMap;
}
ThingsMap
类基本上是things-map
给出的地图的包装器。
public class ThingsMap {
private Map<String, String> items;
@XmlElement(name = "item")
public void setItems(List<Item> items) {
this.items = new Hashmap();
for (List item : items) {
this.items.put(items.key(), items.value());
}
}
public List<Item> getItems() {
List items = new ArrayList();
for (Map.Entry<String, String> entry : this.items.entrySet()) {
items.add(new Item(entry.getKey(), entry.getValue()));
}
return items;
}
可以从那里推断出Item
类。这是一个基本的Element
。
与here类似的问题。
问题是,JAXB更喜欢调用getter获取项目列表,然后直接处理它(这不是很荒谬......?)。 除非 the list returned is null
。即。
if (this.items == null) {
return null;
}
但是,尝试此操作时,传递给setItems
的项目为空。
我不想要一个普通的地图,我知道可以通过适配器来完成。据我所知,在这种情况下使用适配器需要一个包装器(我不想要)。