2011-07-29 27 views
9

Listelemek zorunda olduğum listelerden oluşan bir haritam var. XML bağdaştırıcısı oluşturdum ama JAXB içeriği oluştururken java.util.List is an interface, and JAXB can't handle interfaces. almaya devam ediyorum. Harita Listesi'ni nasıl sıralamalıyım?JAXB marshaling Listeler haritası

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

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

ben Kart adaptörü MapOfListsAdapater yazdım:

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 bu JAXB açıklaması bulunmaktadır:

public class MapOfListsEntry { 

    @XmlAttribute 
    private Integer key; 

    @XmlElementRef 
    @XmlElementWrapper 
    private List<Condition> value; 
+1

konusuna bakın http://stackoverflow.com/questions/818327/jaxb-how-should-i-marshal-complex-nested -veri-yapılar. İstediğiniz çözüm var. – user219882

+0

Bunu gördüm, teşekkürler. Adaptörleri kullanmak istersem ne olur? Neden java.util.List bir arabirim var ve JAXB arabirimleri işleyemiyor? – padis

cevap

4

ben bunu anladım

Bu benim kodudur. Sorun, bağdaştırıcımdaki ValueType öğesinin List ve bu Listenin JAXB'nin işleyemediği türdeydi. Bu Listeyi adaptördeki ValueType olan başka bir somut sınıfta sarmalamak sorunu çözdü.

Adaptör:

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

Sarılı listesi:

public class ListWrapper { 

    @XmlElementRef 
    private List<MapOfListEntry> list;