A classe gerada pelo Jaxb usou JAXBElement em vez do tipo especificado

Esta pergunta foi feita de várias formas - mas sinto que ainda há espaço para catalogar isso ainda mais.

Eu tenho um xsd com duas definições de elemento

<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>

Isso gera:

protected String date;
@XmlElementRef(name = "lastXdigits", namespace = "http://xxxxxxx", type = JAXBElement.class)
protected JAXBElement<String> lastXDigits;

Alterando o xsd para:

<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="1"/>

resulta em:

protected String date;
@XmlElement(name = "lastXdigits", required = true, nillable = true)
protected String lastXDigits;

e usando:

<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/>

resulta em:

protected String date;
@XmlElement(name = "lastXdigits")
protected String lastXDigits;

Isso parece extremamente estranho para mim. Por que lastXDigits é gerado como um tipo JAXBElement no primeiro caso e por que um tipo String não é suficiente em todos os casos? Além disso, por que o jaxb deve tratar esses dois elementos de maneira diferente quando sua definição além do nome é idêntica?

Estou usando uma tarefa ant jaxb-xjc do jaxb 2.0.5.

Isso parece suspeito ou existe uma boa justificativa para essas diferenças?

questionAnswers(1)

yourAnswerToTheQuestion