这个问题已经以各种形式提出 - 但我觉得仍有进一步分类的空间。
我有一个包含两个元素定义的 xsd
<xs:complexType name="elementA">
<xs:sequence>
<xs:element name="date" type="xs:string" minOccurs="0"/>
<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
这会产生:
protected String date;
@XmlElementRef(name = "lastXdigits", namespace = "http://xxxxxxx", type = JAXBElement.class)
protected JAXBElement<String> lastXDigits;
将 xsd 更改为:
<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="1"/>
结果:
protected String date;
@XmlElement(name = "lastXdigits", required = true, nillable = true)
protected String lastXDigits;
并使用:
<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/>
结果:
protected String date;
@XmlElement(name = "lastXdigits")
protected String lastXDigits;
这对我来说似乎非常奇怪。为什么 lastXDigits 在第一种情况下生成为 JAXBElement 类型,为什么 String 类型在所有情况下都不够?此外,为什么 jaxb 应该区别对待这两个元素,因为它们的定义除了名称之外是相同的?
我正在使用来自 jaxb 2.0.5 的 jaxb-xjc ant 任务。
这看起来可疑吗?或者这些差异是否有充分的理由?
最佳答案
如果 nillable="true"
与 minOccurs="0"
一起使用,则不可能仅用 String
表示值。 null
是什么意思?这是否意味着它为空,或者它出现了 0 次?但我想当仅涉及字符串时,这有点没有实际意义。
与空列表比较。空列表肯定不同于空列表。
关于java - Jaxb 生成的类使用 JAXBElement 而不是指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337597/