使用JAXB解组xml文件时使用了什么策略?

时间:2014-03-12 11:55:18

标签: java xml jaxb jaxb2

让我们说这些是对象。

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Root{

    private Collection<Item> items;

    @XmlElement(name="item")
    @XmlElementWrapper(name="items")
    public void setItems(Collection<Item> items){
        this.items = items
    }
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Item{

    private Collection<Item> items;

    @XmlElement(name="item")
    public void setItems(Collection<Item> items){
        this.items = items
    }
}

我可以使用类似于此示例的结构来解组xml文件。

<root>
    <items>
        <item>
            <item>
                <item></item>
                <item></item>
            </item>
            <item></item>
            <item></item>
        </item>
        <item></item>
        <item></item>
    <items>
</root>

实际问题是。当unmarshaller调用Root.setItems(items)时,是否保证此Item中每个Collection的每个属性都已完全初始化?是否有可能改变unmarshaller构建对象图形的行为(从TOP到BOTTOM或从BOTTOM到TOP)?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的问题的答案

  

实际问题是。当unmarshaller打电话时   Root.setItems(items)保证每个Item的每个属性   从这个集合完全初始化?

是,

  

是否可以更改unmarshaller构建的行为   对象图(从TOP到BOTTOM或从BOTTOM到TOP)?

没有

为什么JAXB以这种方式工作

JAXB(JSR-222)实现将利用SAX或StAX解析器来有效地处理XML。这些解析器对XML文档进行深度优先遍历。因此,JAXB将以相同的方式填充对象。在JAXB甚至知道要处理的集合中有第二个项目之前,将完全处理与集合中第一个项目对应的对象。