空列表解组Java对象

时间:2012-06-27 04:34:33

标签: java xml collections jaxb unmarshalling

我正在尝试使用JAXB Unmarshaller将XML文档生成到Java对象中。在XML文档中是否有要呈现给类List的类Java对象的元素,但是生成的对象List是空的,尽管it元素中有内容,

XML文档中的元素是否因为不像Java上的类表示那样完整,使得JAXB无法将XML文档解析为Class表示形式?

有没有人可以帮助我,为什么会发生,以及解决方案是什么?

1 个答案:

答案 0 :(得分:0)

在不知道对象模型或XML文档的情况下,很难说出为什么解组操作无法正常工作。下面我有一个包装和解包的集合示例,可以帮助您找出用例中可能出错的地方:

<强> input.xml中/输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <item>A</item>
    <item>B</item>
    <item>C</item>
    <items>
        <item>D</item>
        <item>E</item>
        <item>F</item>
    </items>
</root>

<强>根

对于包装集合,我们将使用@XmlElementWrapper注释来指定包装元素。

package forum11219454;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class Root {

    private List<String> list;
    private List<String> nestedList;

    @XmlElement(name="item")
    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    @XmlElementWrapper(name="items")
    @XmlElement(name="item")
    public List<String> getNestedList() {
        return nestedList;
    }

    public void setNestedList(List<String> nestedList) {
        this.nestedList = nestedList;
    }

}

<强>演示

package forum11219454;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11219454/input.xml");
        Root root = (Root) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}

了解更多信息