[英]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.