2012-06-07 34 views
2

我在序列化我的类中的字段时遇到问题,该类是ArrayList的子类。添加到列表中的项目进行序列化,但字段并不:JAXB - 如何序列化集合的子类中的字段

@XmlRootElement 
public static class NumberedList extends ArrayList<String>{ 

    @XmlAttribute 
    private int number = 5; 

    @XmlList 
    public List<String> getNames(){ 
     return this; 
    } 

    public NumberedList(){ 
     add("a"); 
     add("b"); 
    } 
} 

@XmlRootElement 
public static class FieldTest{ 

    @XmlElement 
    NumberedList list = new NumberedList(); 
} 

public static void main(String[] args) throws Exception{ 

    JAXBContext context = JAXBContext.newInstance(FieldTest.class); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.marshal(new FieldTest(), System.out); 
} 

//从序列化NumberedList作为现场输出:没有数字领域存在

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><fieldTest><list>a</list><list>b</list></fieldTest> 

奇怪的是当我将列表添加到Map中时,我的类中的字段按照我的预期序列化。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><mapTest><map><entry><key>1</key><value number="5"><names>a b</names></value></entry></map></mapTest> 

任何想法:

@XmlRootElement 
public static class NumberedList extends ArrayList<String>{ 

    @XmlAttribute 
    private int number = 5; 

    @XmlList 
    public List<String> getNames(){ 
     return this; 
    } 

    public NumberedList(){ 
     add("a"); 
     add("b"); 
    } 
} 

@XmlRootElement 
public static class MapTest{ 
    @XmlElement 
    Map<Integer, NumberedList> map = Maps.newHashMap(); 

    public MapTest(){ 
     map.put(1, new NumberedList()); 
    } 
} 

public static void main(String[] args) throws Exception{ 

    JAXBContext context = JAXBContext.newInstance(MapTest.class); 
    Marshaller marshaller = context.createMarshaller(); 
    marshaller.marshal(new MapTest(), System.out); 
} 

//从一个地图序列化NumberedList输出?

回答

-1

我看到在两个类中你有根元素..这是根本错误..你可以只有一个根元素..所以将其从NumberedList中删除。在第二个步骤我看你是intializing地图

public MapTest(){ 
     map.put(1, new NumberedList()); 
    } 

,其中作为第一你是不是做..

0

的问题来自于NumberedList是延长ArrayList的事实。将一个内部ArrayList添加到该类中,然后将其与NumberedList中存在的其他字段一起序列化。请参阅以下代码:

@XmlRootElement 
public static class NumberedList { 
    private List<String> names = new ArrayList<String>(); 

    @XmlAttribute 
    private int number = 5; 

    public NumberedList(){ 
     names.add("a"); 
     names.add("b"); 
    } 

    @XmlList 
    public List<String> getNames(){ 
     return names; 
    } 
}