簡體   English   中英

JAXB何時生成@XmlElementRef和@XmlElement類型的注釋?

[英]When does JAXB generates @XmlElementRef and @XmlElement type of annotations?

這個問題已經以不同的方式被多次詢問,但我在這里從不同的角度進行查詢。 讓我們以下面的例子:

<xs:element name="Ric" type="String" nillable="true" minOccurs="0"/>

對於XSD中的上一行,JAXB生成如下代碼:

@XmlElementRef(name = "Ric", type = JAXBElement.class, required = false)
    protected JAXBElement<String> ric;

但是對於跟隨xsd元素,

<xs:element name="Ric" type="String" minOccurs="0"/>

我明白了

 @XmlElement(name = "Ric")
    protected String ric;

我已經閱讀了幾個關於@XmlElement@XmlElementRef之間差異的解釋,但由於我對使用XSD非常新,我無法理解他們想說的是什么。 我所能掌握的是,對於nillable="true" ,情況就是如此。 有人可以用外行的語言解釋為什么JAXB為一個元素生成一個參數類型,該元素具有nillable="true"minOccur="0" 我知道我們也可以取消其中一個,但客戶需要這樣做。

jaxb版本:2.2.11

JAXB是關於Java和XML之間兩個方向的映射。

因此對於以下模式:

<xs:element name="Ric" type="String" minOccurs="0"/>

像Java一樣:

protected String ric;  

with ric = null明確地映射到缺少“Ric”元素(即父元素具有零“Ric”子元素)。

但對於以下架構:

<xs:element name="Ric" type="String" nillable="true" minOccurs="0"/>

你不知道一個等於'null'的字符串是映射到零“Ric”元素還是一個值為xsi:nil的“Ric”元素。 所以你需要額外的JAXBElement包裝來區分。

請在此處查看接受的答案。

不確定我的答案是否比那更容易理解..但也許它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM