JAXB: генерация кода элементов со свойством maxOccurs, установленным в файле xsd, не получает метод set в классе java - PullRequest
3 голосов
/ 16 марта 2012

У меня есть xsd-файл с именем Person с некоторыми элементами. Некоторые элементы имеют оба свойства minOccurs и maxOccurs set. Две строки в файле xsd могут выглядеть следующим образом.

<xsd:element name="NameOfElement" minOccurs="0" maxOccurs="unbounded">
<xsd:element name="NameOfAnotherElement" minOccurs="0">

В NetBeans я хочу генерировать Java-классы этого xsd-файла, используя JAXB. Все элементы, которые имеют только свойство minOccurs, получают как set, так и метод get в сгенерированном java-файле Person, но элементы, у которых в xsd-файле установлены свойства minOccurs и maxOccurs, становятся списком. Таким образом, приведенные выше строки xsd становятся такими после генерации:

@XmlElement(name = NameOfElement)
protected List<Person.NameOfElement> nameOfElement;
@XmlElement(name = NameOfAnotherElement)
protected Person.NameOfAnotherElement nameOfAnotherElement;

Странно то, что переменная nameOfAnotherElement получает и набор, и метод get в классе Person java, а nameOfElement получает только метод get.

Почему элементы, которые становятся List<> в коде Java, не получают метод set (те элементы, у которых оба свойства minOccurs и maxOccurs установлены в xsd)?

Так что моя проблема в том, что я не могу установить NameOfElement для объекта Person, потому что он пропускает метод set, но он содержит метод get! Почему это так?

Ответы [ 2 ]

6 голосов
/ 16 марта 2012

Если для maxOccurs установлено значение! = 1, он может содержать несколько экземпляров этого элемента, поэтому он становится списком.

Вам следует использовать метод get, а затем добавить элементы в этот список.Примерно так:

List<Person.NameOfElement> myList = doc.getNameOfElement();
myList.add(obj);

Редактировать: если у вас уже есть список, который вы хотите использовать, вы можете сделать следующее:

doc.getNameOfElement().addAll(myList);
2 голосов
/ 16 марта 2012

Вы можете использовать плагин, чтобы заставить XJC генерировать сеттеры для коллекций:

...