【问题标题】:Jaxb generated class used JAXBElement instead of specified typeJaxb 生成的类使用 JAXBElement 而不是指定的类型
【发布时间】:2011-05-19 06:22:33
【问题描述】:

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

我有一个带有两个元素定义的 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 任务。

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

【问题讨论】:

    标签: java code-generation jaxb


    【解决方案1】:

    如果nillable="true"minOccurs="0" 一起使用String 表示值是不可能的。 null 是什么意思?这是否意味着它为空,或者它发生了 0 次?但我想这对于一个字符串来说有点没有实际意义。

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

    【讨论】:

    • 我想如果您对不存在元素和元素的值为 null 之间的区别感兴趣,这是相关的,但我想在大多数情况下,没有人真正关心和额外的级别间接性只是一个麻烦。
    • 是的,但我想在某些情况下这可能是一个有效的区别。
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多