9 Stimmen

JAXB marshaling Karte von Listen

Ich habe eine Karte mit Listen, die ich zusammenstellen muss. Ich habe XML-Adapter erstellt, aber ich bekomme immer java.util.List is an interface, and JAXB can't handle interfaces. bei der Erstellung des JAXB-Kontextes. Wie sollte ich eine Map of Lists marshalen?

Dies ist mein Code:

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

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

Ich habe Adapter MapOfListsAdapater für die Map geschrieben:

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 hat diese JAXB-Anmerkungen:

public class MapOfListsEntry {

    @XmlAttribute
    private Integer key;

    @XmlElementRef
    @XmlElementWrapper
    private List<Condition> value;

4voto

padis Punkte 2274

Ich habe es herausgefunden. Das Problem war, dass ValueType in meinem Adapter war List und diese Liste hier war der Typ, der JAXB nicht verarbeiten konnte. Das Umhüllen dieser Liste in eine andere konkrete Klasse, die ValueType im Adapter ist, löste das Problem.

Adapter:

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) {...}
}

Eingewickelte Liste:

public class ListWrapper {

    @XmlElementRef
    private List<MapOfListEntry> list;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X