java - JAXB:在 xsd 文件中设置了 maxOccurs 属性的元素的代码生成没有在 java 类中获得设置方法

标签 java xsd jaxb

我有一个名为 Person 的 xsd 文件与一些元素。一些元素同时具有这两个属性 minOccursmaxOccurs放。 xsd 文件中的两行可能如下所示。

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

在 NetBeans 中,我想使用 JAXB 生成此 xsd 文件的 Java 类。 所有只有 minOccurs 的元素property 在生成的 Person 中获取 set 和 get 方法java 文件,但同时具有 minOccurs 的元素和 maxOccurs xsd 文件中设置的属性变为列表。所以生成后上面的xsd行变成了这个:

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

奇怪的是变量nameOfAnotherElementPerson 中获取 set 和 get 方法Java 类和 nameOfElement只获取一个get方法。

为什么元素不变成 List<>在 Java 代码中获取一个设置方法(那些在 xsd 中设置了属性 minOccursmaxOccurs 的元素)?

所以我的问题是我无法将 NameOfElement 设置为 Person 对象,因为它缺少 set 方法,但它包含 get 方法!为什么会这样?

最佳答案

如果您将 maxOccurs 设置为 != 1,它可以包含该元素的多个实例,因此它成为一个列表。

您应该使用 get 方法,然后将元素添加到该列表。像这样:

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

编辑:如果您已经有了要使用的列表,您可以执行以下操作:

doc.getNameOfElement().addAll(myList);

关于java - JAXB:在 xsd 文件中设置了 maxOccurs 属性的元素的代码生成没有在 java 类中获得设置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734840/

相关文章:

java - Web 服务的 Web 客户端

java - 如何从服务回调到 Activity

java - 如何修饰现有Java对象的方法?

java - 随机生成形状和颜色并绘制到 Canvas 上

java - 运行 Guava 的问题

java - cvc-elt.1 : Cannot find the declaration of element 'countries'

c++ - XSD : How to make a polymorphic "list"?

java - src-解析 : Cannot resolve the name 'ST' to a(n) 'type definition' component in HL7

java - 在 Java 中解码为数组或 arrayList

java - 如何将 jaxb 注释移植到 simpleXml 库?