2010-12-02 40 views
7

这个问题已经以各种形式提出 - 但我觉得还有空间来进一步编目。Jaxb生成的类使用JAXBElement而不是指定的类型

我有两个元素定义

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

这产生一个xsd:

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

这看起来可疑吗?还是有这些差异的合理理由?

回答

6

如果nillable="true"连同minOccurs="0"这是不可能用String代表值。 null是什么意思?这是否意味着它是空的,或者它发生了0次?但是我认为这只是一个字符串而已。

与空白列表比较。空列表当然与空列表不同。

+1

我想这是相关的,如果你有兴趣在没有元素存在和元素的值为空的区别,但我想在大多数情况下没有人真正关心和额外的间接级别只是一个滋扰。 – Ellis 2010-12-02 18:59:12

相关问题