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