7
這個問題已經以各種形式提出 - 但我覺得還有空間來進一步編目。Jaxb生成的類使用JAXBElement而不是指定的類型
我有兩個元素定義
<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>
這產生一個xsd:
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 2.0.5使用jaxb-xjc ant任務。
這看起來可疑嗎?還是有這些差異的合理理由?
我想這是相關的,如果你有興趣在沒有元素存在和元素的值爲空的區別,但我想在大多數情況下沒有人真正關心和額外的間接級別只是一個滋擾。 – Ellis 2010-12-02 18:59:12