gpt4 book ai didi

xml - JAXB 绑定(bind)自定义

转载 作者:数据小太阳 更新时间:2023-10-29 02:00:04 25 4
gpt4 key购买 nike

在尝试从 xsd 生成类时,我遇到了这个错误:

java.lang.IllegalArgumentException: Illegal class inheritance loop.  Outer class OrderPropertyList may not subclass from inner class: OrderPropertyList

我的 xsd 定义了一个元素来对这样的无界元素进行分组:

  <element minOccurs="0" name="orderPropertyList">
<complexType>
<sequence>
<element maxOccurs="unbounded" name="orderProperty" type="tns:orderProperty" />
</sequence>
</complexType>
</element>

我的自定义绑定(bind)遵循 this page 上的规定,但它不起作用。这是我的绑定(bind):

<jaxb:bindings schemaLocation="../xsd/Schema.xsd" node="/xs:schema">
<jaxb:bindings node="//xs:element[@name='orderPropertyList']">
<jaxb:class name="OrderPropertyList"/>
</jaxb:bindings>
</jaxb:bindings>

我的意图是为 orderPropertyList 生成一个单独的类,而不是在 xsd 的根元素内生成内部类的默认行为。

我看到有人怀着同样的意图herehere ,但它对我来说不能正常工作。 :(

JAXB 版本:

Specification-Version: 2.1
Implementation-Version: 2.1.8

有什么帮助吗?

最佳答案

我相信你需要做的是:

<jaxb:globalBindings localScoping="toplevel"/>

这将生成独立类而不是嵌套类。

<jaxb:bindings schemaLocation="../xsd/Schema.xsd" node="/xs:schema">
<jaxb:bindings node="//xs:element[@name='orderPropertyList']">
<jaxb:class name="OrderPropertyList"/>
</jaxb:bindings>
</jaxb:bindings>

是冗余绑定(bind),因为默认情况下 orderPropertyList 将映射到 OrderPropertyList。包的名称包括默认嵌套的外部类名称,因此您无需更改它。

此外,如果您确实想更改生成的类的名称,我认为 XPath 实际上应该是:

<jaxb:bindings node="//xs:element[@name='orderPropertyList']/xs:complexType">

最后是 complexType。我认为排除这个是导致您收到错误消息的原因。

关于xml - JAXB 绑定(bind)自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/144118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com