JAXB маршалинг Карта списков - PullRequest
9 голосов
/ 29 июля 2011

У меня есть карта списков, которые мне нужно собрать. Я создал адаптер XML, но продолжаю получать java.util.List is an interface, and JAXB can't handle interfaces. при создании контекста JAXB. Как мне составить карту списков?

Это мой код:

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

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

Я написал адаптер 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 Ответ

4 голосов
/ 30 июля 2011

Я понял это.Проблема заключалась в том, что ValueType в моем адаптере был List, а этот List был типом, который JAXB не мог обработать.Перенос этого списка в другой конкретный класс 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;
...