3

我使用 JAXB 2.1 从几个我无法修改的 XSD 文件(实际上来自 WSDL 文件)生成 Java 类,并且我遇到了与复杂类型限制相关的问题。On of the limits 将发生配置从 修改minOccurs="0" maxOccurs="unbounded"minOccurs="0" maxOccurs="0"。因此,在受限类型中不再需要此字段。但实际上 JAXB 使用 [0..1] 基数而不是 0 生成受限类。

顺便说一句,生成是经过调整的,<xjc:treatRestrictionLikeNewType />因此 XSD 限制不会映射到 Java 类继承。

这是一个例子:

这是在复杂类型 A 中定义字段的方式:

<element name="qualifier" type="CR" maxOccurs="unbounded" minOccurs="0"/>

这是限制 A 的另一个复杂类型 B 中限制相同字段的方式:

<element name="qualifier" type="CR" minOccurs="0" maxOccurs="0"/>

在生成的 A 类中,我有:

@XmlElement(name = "qualifier")
protected List<CR> qualifiers;

在 B 生成的类中,我有:

protected CR qualifiers;

由于我对 JAXB 的了解不足,XmlElement注释的缺失告诉 JAXB 不要编组/解组该字段。我错了吗?如果我是对的,有没有办法告诉 JAXB 根​​本不生成该qualifiers字段?在我看来,这将是更好的一代,因为它尊重约束。

任何想法,关于这个话题的想法?

谢谢!!

4

2 回答 2

0

如果不需要类型,那么单独minOccurs="0" 就足够了,不是吗?看起来您正在尝试定义一个可能未包含在文档中的元素 - 尽管它是有效的,但它没有意义。

于 2010-06-17T08:42:32.937 回答
0

Ok I figured it out.

This is basically an interaction issue between the <xjc:treatRestrictionLikeNewType /> customization and the <xjc:simple /> one. If I remove the simple one the fields are not generated anymore!

That's what happens when you walk on the experimental path of JAXB ;)

于 2010-06-17T09:40:54.863 回答