我有一份需要编组的列表地图。我创建了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;
答案 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;