JAXB编组列表地图

时间:2011-07-29 09:15:32

标签: java list map jaxb marshalling

我有一份需要编组的列表地图。我创建了XML适配器,但在创建JAXB上下文时我不断获得java.util.List is an interface, and JAXB can't handle interfaces.。我应该如何编制列表地图?

这是我的代码:

@XmlRootElement(name = "myClass")
public class MyClass  {

    @XmlJavaTypeAdapter(MapOfListsAdapter.class)
    protected Map<Integer, List<Condition>> expectedResults;

我为Map编写了适配器MapOfListsAdapater:

public class MapOfListsAdapter extends XmlAdapter<List<MapOfListsEntry>, Map<Integer, List<Condition>>> {

    @Override
    public List<MapOfListsEntry> marshal(Map<Integer, List<Condition>> v) {...}

    @Override
    public Map<Integer, List<Condition>> unmarshal(List<MapOfListsEntry> v) {...}
}

MapOfListEntry具有以下JAXB注释:

public class MapOfListsEntry {

    @XmlAttribute
    private Integer key;

    @XmlElementRef
    @XmlElementWrapper
    private List<Condition> value;

1 个答案:

答案 0 :(得分:4)

我明白了。问题是我的适配器中的ValueType是List,这里的这个List是JAXB无法处理的类型。将此List包装在适配器中ValueType的另一个具体类中解决了问题。

适配器:

public class MapOfListsAdapter extends XmlAdapter<ListWrapper, Map<Integer, List<Condition>>> {

    @Override
    public ListWrapper marshal(Map<Integer, List<Condition>> v) {...}

    @Override
    public Map<Integer, List<Condition>> unmarshal(ListWrapper v) {...}
}

包裹清单:

public class ListWrapper {

    @XmlElementRef
    private List<MapOfListEntry> list;