2011-07-29 33 views
9

Tôi có một bản đồ các danh sách mà tôi cần để sắp xếp. Tôi tạo ra XML adapater nhưng tôi tiếp tục nhận được java.util.List is an interface, and JAXB can't handle interfaces. khi tạo bối cảnh JAXB. Làm thế nào tôi nên sắp xếp bản đồ của danh sách?JAXB marshaling Bản đồ Danh sách

Đây là mã của tôi:

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

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

Tôi đã viết bộ chuyển đổi MapOfListsAdapater cho bản đồ:

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 có những chú thích JAXB:

public class MapOfListsEntry { 

    @XmlAttribute 
    private Integer key; 

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

Xem chủ đề http://stackoverflow.com/questions/818327/jaxb-how-should-i-marshal-complex-nested -cấu trúc dữ liệu. Có giải pháp bạn muốn. – user219882

+0

Tôi thấy điều đó, cảm ơn. Nếu tôi muốn sử dụng bộ điều hợp thì sao? Tại sao tôi nhận được java.util.List là một giao diện, và JAXB không thể xử lý các giao diện? – padis

Trả lời

4

I figured it out. Vấn đề là ValueType trong bộ điều hợp của tôi là Danh sách và Danh sách này ở đây là loại mà JAXB không thể xử lý. Gói danh sách này trong một lớp bê tông khác là ValueType trong bộ điều hợp đã giải quyết được vấn đề.

Adaptor:

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

danh sách Wrapped:

public class ListWrapper { 

    @XmlElementRef 
    private List<MapOfListEntry> list; 
Các vấn đề liên quan