JAXB代码生成:限制类型 - >如何删除零事件字段?

时间:2010-06-17 08:30:05

标签: java xsd jaxb xjc

我使用JAXB 2.1从几个我无法修改的XSD文件生成Java类(实际上来自WSDL文件),并且我遇到了与复杂类型限制相关的问题。 在限制上修改从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字段? 在我看来,这是一个更好的一代,因为它尊重约束。

有什么想法,关于这个话题?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果不需要这种类型,那么单独 minOccurs =“0”应该足够,不是吗?看起来你正在尝试定义一个可能没有包含在文档中的元素 - 这没有意义,尽管它是有效的。

答案 1 :(得分:0)

好的我明白了。

这基本上是<xjc:treatRestrictionLikeNewType />自定义和<xjc:simple />之间的互动问题。如果我删除简单的字段,则不再生成字段!

当你走在JAXB的实验路径上时会发生这种情况;)