Java Jaxb生成的类使用JAXBElement而不是指定的类型

Java Jaxb生成的类使用JAXBElement而不是指定的类型,java,code-generation,jaxb,Java,Code Generation,Jaxb,这个问题已经以各种各样的方式被问到了,但我觉得仍然有进一步分类的空间 我有一个包含两个元素定义的xsd <xs:complexType name="elementA"> <xs:sequence> <xs:element name="date" type="xs:string" minOccurs="0"/> <xs:element name="lastXdigits" type="xs:string" nillable="

这个问题已经以各种各样的方式被问到了,但我觉得仍然有进一步分类的空间

我有一个包含两个元素定义的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>
并使用:

<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/>
这对我来说似乎非常奇怪。为什么lastXDigits在第一种情况下生成为JAXBElement类型,为什么字符串类型在所有情况下都不够?此外,当这两个元素除了名称之外的定义相同时,为什么jaxb应该以不同的方式对待它们呢

我正在使用来自JAXB2.0.5的jaxb xjc ant任务

这看起来可疑吗?或者这些差异有充分的理由吗?

如果
nillable=“true”
minOccurs=“0”
一起使用
字符串来表示值是不可能的。
null
是什么意思?这是否意味着它是空的,或者它发生了0次?但我想,当涉及到一个字符串时,这有点没有意义


与空列表进行比较。空列表当然不同于空列表。

如果您对不存在元素和元素值为空之间的区别感兴趣,我想这是相关的,但我想在大多数情况下,没有人真正关心,额外的间接级别只是一个麻烦。是的,但我想在某些情况下,这可能是一个有效的区别。
<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;