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?