JAXB:将元素的实现与编组

时间:2017-12-13 17:13:24

标签: java xml jaxb

我有一个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的项目为空。

我不想要一个普通的地图,我知道可以通过适配器来完成。据我所知,在这种情况下使用适配器需要一个包装器(我不想要)。

0 个答案:

没有答案