java - JAXB 何时生成@XmlElementRef 和@XmlElement 类型的注释?

标签 java xml xsd jaxb

这个问题已经以不同的方式被问过多次,但我在这里从不同的角度提出疑问。那么让我们来看下面的例子:

<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;  

ric = null 明确映射到不存在“Ric”元素(即父元素具有零个“Ric”子元素)。

但是对于一个架构:

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

您不知道等于“null”的字符串是映射到零“Ric”元素还是映射到值为 xsi:nil 的“Ric”元素。因此,您需要额外的 JAXBElement 包装器来区分。

查看已接受的答案 here .

不确定我的回答比那个更容易理解..但也许它有所帮助。

关于java - JAXB 何时生成@XmlElementRef 和@XmlElement 类型的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34286196/

相关文章:

java - 为什么在这种特殊情况下向 JList 添加元素会使其为空?

java - 是否可以使用 Spring 的注释为 Elasticsearch 中的映射定义 Completion Suggester?

java - RabbitTemplate 没有结束 Spring Boot + Spring Batch 作业应用程序

java - 异常 : No protocol while reading XML

android - 如何在 android 中的 style.xml 文件中设置 CardView 属性

visual-studio-2010 - 你能在 vs 2010 中根据 xml 验证 xsd 吗?

XMLDocument 节点没有值

java - 以编程方式将 POST 二进制内容设置为 Jmeter 中的 HTTP 采样器

xml - 如何反序列化此 PowerShell 输出?

xml - 根据另一个属性的值限制属性值