java - Jaxb 生成的类使用 JAXBElement 而不是指定类型

标签 java code-generation jaxb

这个问题已经以各种形式提出 - 但我觉得仍有进一步分类的空间。

我有一个包含两个元素定义的 xsd

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

这会产生:

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 任务。

这看起来可疑吗?或者这些差异是否有充分的理由?

最佳答案

如果 nillable="true"minOccurs="0" 一起使用,则不可能仅用 String 表示值。 null 是什么意思?这是否意味着它为空,或者它出现了 0 次?但我想当仅涉及字符串时,这有点没有实际意义。

与空列表比较。空列表肯定不同于空列表。

关于java - Jaxb 生成的类使用 JAXBElement 而不是指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337597/

相关文章:

java - 如何让 Hibernate Tools 生成带有 toString、equals 和 hashcode 的 POJO?

asp.net-core - 即使在搭建所有身份页面后也找不到身份的 Layout.cshtml 文件

java - 有条件地生成方法体以满足Java中的大接口(interface)

java - 使用 JAXB 将 XML 转换为 Java 对象时删除额外的嵌套

java - Spring注入(inject)XML未编码实体

java - 带进度对话框的异步任务

java - Play Framework 测试错误

java - 如何为位于 Java 文件系统上的文件创建可下载的 URL?

java - 如何将 java.lang.Long 添加到用于测试的 GroovyScript

java - 如何将简单 Java 类的字段名称映射为名称-值对序列