Какая стратегия используется для демаршалинга XML-файлов с помощью JAXB?

1

Допустим, что это эти объекты.

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

Я могу unmarshall 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)?

Заранее спасибо.

Теги:
jaxb
jaxb2

1 ответ

1
Лучший ответ

Ответы на ваши вопросы

Реальный вопрос. Когда unmarshaller вызывает Root.setItems(items), гарантировано ли, что каждое свойство каждого элемента из этой коллекции полностью инициализировано?

Да,

Можно ли изменить поведение, как unmarshaller создает граф объектов (от TOP до BOTTOM или от BOTTOM до TOP)?

нет

Почему JAXB работает таким образом

Реализации JAXB (JSR-222) собираются использовать синтаксические анализаторы SAX или StAX для эффективной обработки XML. Эти синтаксические анализаторы совершают глубокий обход документа XML. Из-за этого JAXB собирается заполнять объекты одинаково. Объект, соответствующий первому элементу в коллекции, будет полностью обработан, прежде чем JAXB даже узнает, что есть второй элемент в собираемой коллекции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню