【发布时间】:2011-05-19 06:22:33
【问题描述】:
人们曾以各种形式提出过这个问题 - 但我觉得仍有进一步分类的空间。
我有一个带有两个元素定义的 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 任务。
这看起来是否可疑,或者这些差异是否有充分的理由?
【问题讨论】:
标签: java code-generation jaxb