Этот вопрос задавался в разных ипостасях, но я чувствую, что еще есть место, чтобы каталогизировать это дальше.
У меня есть 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 из jaxb 2.0.5.
Выглядит ли это подозрительно или есть хорошее обоснование этих различий?