0

我有一个这种结构的 xml(项目的键值对):

<root>
  <item value="dada" key="dad" />
  <item value="mama" key="mum" />
  <others>
    <os>asdad</os>
  </others>
</root>

我想将项目元素映射到一个HashMap,字符串是Item.key

我编写了一个适配器,它从 xml 中解组一个列表并将一个映射编组到一个列表。问题是,JAXB 在解组时获取列表 emtpy,并且在编组到 xml 时只写入一项。

下面是对应的类:

根.java

@XmlRootElement(name = "root")
public class Root
{
    @XmlJavaTypeAdapter(ItemMapAdapter.class)
    @XmlElement(name = "item")
    public HashMap<String, Item> getContent()
    {
        return content;
    }

    public void setContent(HashMap<String, Item> content)
    {
        this.content = content;
    }

    private HashMap<String, Item> content;
}

ItemMapAdapter.java

public final class ItemMapAdapter extends XmlAdapter<HashMap<String, Item>, LinkedList<Item>>
{
    @Override
    public HashMap<String, Item> marshal(LinkedList<Item> v)
    {
         //the list here is empty.
         //returns a map<Item.key, Item>
    }

    @Override
    public LinkedList<Item> unmarshal(HashMap<String, Item> v){}
}

有人有任何见解吗?可能缺少一些东西.. 谢谢!

4

1 回答 1

0

您应该切换HashMapLinkedList在您的适配器中:

public final class ItemMapAdapter extends XmlAdapter<LinkedList<Item>, HashMap<String, Item>>
{
    @Override
    public LinkedList<Item> marshal(HashMap<String, Item> v) {}

    @Override
    public HashMap<String, Item> unmarshal(LinkedList<Item> v) {}
}
于 2012-08-01T13:38:01.317 回答