Класс, сгенерированный Jaxb, использовал JAXBElement вместо указанного типа

Этот вопрос задавали в разных формах, но я чувствую, что еще есть место для его дальнейшего каталогизации.

] У меня есть 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-xjc ant из jaxb 2.0.5.

Выглядит ли это подозрительно или есть веское оправдание для этих различий?

9
задан Ellis 2 December 2010 в 16:56
поделиться