JAXB Unmarshalls XML неправильно - PullRequest
0 голосов
/ 02 августа 2011

Хорошо, я новичок в JAXB, и у меня возникают проблемы с поиском правильной документации, чтобы помочь мне в этом, я прочитал кучу и до сих пор не понимаю, что делает JaxB.

У меня есть класс, назовите егоКонтейнер.Это расширено MyContainer.MyContainer имеет дополнительное логическое значение в дополнение к тому, что он наследует от контейнера.

В любом случае, вот как JAXB Marshalls MyContainer

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyContainer name="container" id="1">
    <boolVal>false</boolVal>
    <ListOfResources> //Using @XmlElementWrapper(name=..
        <child>
            <ID>Test Comp 1</ID>
        </child>
        <child>
            <ID>Test Comp 2</ID>
        </child>
    </ListOfResources>
</MyContainer>

Что я не понимаю, так это тег «child».Единственное, что называется child - это имя списка.Список содержит объекты (которые имеют строковое свойство, ID), однако объект не должен быть «дочерним».Однако настоящая проблема в том, когда я иду в класс Демаршалла.Список будет заполнен перечисленными «потомками».Я не вижу, чего мне не хватает.Заметьте, я не получаю исключение JAXB, но я, когда проверяю неархивированный объект, список не заполнен

РЕДАКТИРОВАТЬ: Уточнение

Извините, я говорю, что JAXBбудет маршалировать элементы в списке, хотя каждый элемент в списке имеет имя списка (дочерний).Однако при переходе к демаршаллу он не заполняет список в новом объекте.

EDIT2: Current Setter

public void setChildren(List<Resource<IType>> other) {
    Iterator iterator = other.iterator();
    while(iterator.hasNext()){
        Resource<IType> piece = 
            new Resource<IType>((Resource<IType>) iterator.next());
        this.listOfResources.add(piece);
    }

}

1 Ответ

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

Я не уверен, в чем твоя проблема.Сначала вы сказали, что список будет заполнен "childs", затем вы говорите, что список не заполнен.Что это такое, и чем оно отличается от того, что вы ожидаете увидеть?Если что-то не заполняется, наиболее распространенной причиной является то, что у вас нет правильно сформированного установщика для этого свойства.

При именовании элемент всегда именуется так же, как и свойство, отображающеек этому.Вы можете изменить имя элемента с помощью @ XmlElement (name = "...") , или если вы хотите, чтобы элемент назывался в честь объекта, на который ссылается свойство (например, объектов, составляющих список), используйте @XmlElementRef.

...