JAXB не Маршалл, как ожидалось - PullRequest
1 голос
/ 02 августа 2011

Мой друг попросил меня написать этот вопрос:

РЕДАКТИРОВАТЬ: Он решил оставить вопрос самостоятельно здесь: JAXB Unmarshalls XML неправильно Я пытался удалить этот вопрос, но не смог.

Я пытаюсь создать класс Java, который называется MyContainer. Этот класс расширяет мой другой класс, называемый Container. Container имеет переменную с именем: protected List<ResourceReference<Component>> child

Единственная переменная MyContainer имеет ту, которая наследуется от Container. Это List, однако, не будет маршалироваться с JAXB, когда у меня есть ребенок, указанный как XmlList.

Это будет маршал как XmlElement, однако я не хочу, чтобы данные отображались. Когда он маршалируется как XmlElement, он перечисляет атрибуты в List, но не «наследственно». Он просто перечисляет два элемента, как если бы они были свойствами класса, а не принадлежал дочернему списку.

Как мне заставить Jaxb правильно маршалировать List (который создается как ArrayList)?

РЕДАКТИРОВАТЬ: Вот пример: Вот что я получаю:

<MyContainer name="Container Name">
    <booleanVal>false</booleanVal>
    <child id="Test Comp 1"/>
    <child id="Test Comp 2"/>
</and>

Это больше, чем я ожидаю:

<MyContainer name="Container Name">
    <booleanVal>false</booleanVal>
    <child> /// This would be the class variable of the extended Class, Container
        <ResourceRef id="Entry 1">
        <ResourceRef id="Entry 2">
    </child>
</and>

Конечно, мои текущие результаты, вероятно, получены из списка в контейнере, помеченного аннотацией @XmlElement. Тем не менее, JAXB не будет ничего маршалировать ..

1 Ответ

4 голосов
/ 02 августа 2011

Аннотируйте свой список с помощью @XmlElementWrapper. См. Javadoc .

...