JAXB代码生成:受限类型->如何删除零出现字段?

发布于 2024-09-05 16:15:25 字数 967 浏览 12 评论 0原文

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

顺便说一下,生成过程是通过 进行调整的,这样 XSD 限制就不会出现映射到 Java 类继承。

这是一个例子:

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

<元素名称=“限定符”类型=“CR”maxOccurs=“无界”minOccurs=“0”/>

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

<元素名称=“限定符”类型=“CR”minOccurs=“0”maxOccurs=“0”/>

在 A 生成的类中,我有:

@XmlElement(name = "限定符")
受保护列表预选赛;

在 B 生成的类中,我有:

受保护的 CR 限定符;

由于我对 JAXB 的理解很差,缺少 XmlElement 注释告诉 JAXB 不要编组/取消编组该字段。我错了吗? 如果我是对的,有没有办法告诉 JAXB 根​​本不生成 qualifiers 字段? 在我看来,这将是一个更好的一代,因为它尊重这些限制。

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

谢谢!!

I use JAXB 2.1 to generate Java classes from several XSD files that I cannot modify (coming from a WSDL file actually), and I have a problem related to complex type restriction.
On of the restrictions modifies the occurence configuration from minOccurs="0" maxOccurs="unbounded" to minOccurs="0" maxOccurs="0". Thus this field is not needed anymore in the restricted type. But actually JAXB generates the restricted class with a [0..1] cardinality instead of 0.

By the way the generation is tuned with <xjc:treatRestrictionLikeNewType /> so that a XSD restriction is not mapped to a Java class inheritance.

Here is an example:

Here is the way a field is defined in a complex type A:


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

Here is the way the same field is restricted in another complex type B that restricts A:


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

In the A generated class I have:


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

And in the B generated class I have:


protected CR qualifiers;

With my poor understanding of JAXB the absence of the XmlElement annotation tells JAXB not to marshall/unmarshall this field. Am I wrong?
If I am right is there a way to tell JAXB not to generate the qualifiers field at all?
This would be in my opinion a much better generation as it respects the constraints.

Any idea, thougths on the topic?

Thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耶耶耶 2024-09-12 16:15:25

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

If the type is not needed then alone minOccurs="0" should be enough, no ? Looks like you are trying to define an element that may not be included in the document - that does not make sense, although it's valid.

弥枳 2024-09-12 16:15:25

好吧,我想通了。

这基本上是 自定义与 自定义之间的交互问题。如果我删除简单的字段,则不再生成字段!

这就是当您走在 JAXB 实验道路上时会发生的情况;)

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文