2010-12-02 64 views
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任務。

這看起來可疑嗎?還是有這些差異的合理理由?

回答

6

如果nillable="true"連同minOccurs="0"這是不可能用String代表值。 null是什麼意思?這是否意味着它是空的,或者它發生了0次?但是我認爲這只是一個字符串而已。

與空白列表比較。空列表當然與空列表不同。

+1

我想這是相關的,如果你有興趣在沒有元素存在和元素的值爲空的區別,但我想在大多數情況下沒有人真正關心和額外的間接級別只是一個滋擾。 – Ellis 2010-12-02 18:59:12

相關問題