2

ArrayList のサブクラスである自分のクラスのフィールドをシリアル化するのに問題があります。リストに追加されたアイテムはシリアル化されますが、フィールドはシリアル化されません。

@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>

奇妙なことに、リストをマップに追加すると、クラスのフィールドが期待どおりにシリアル化されます。

@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);
}

// Map 内の NumberedList のシリアライズからの出力:

<?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>

何か案は?

4

2 に答える 2

-1

私はあなたがルート要素を持っている2つのクラスを見ています..これは根本的に間違っています..ルート要素は1つしか持てません..それをNumberedListから削除してください. 2番目のステップで、マップを初期化していることがわかります

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

最初のように、あなたはしていません..

于 2013-09-03T06:57:18.643 に答える