3

我正在尝试使用 JAXB 将 xsd 模式转换为 java 类。不幸的是,我确实有一个问题。引起问题的xsd是:

<xs:complexType name="AdditionalDataType">
  <xs:sequence>
    <xs:element name="AvailabilityStatus" minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="AvailabilityStatus" maxOccurs="999">
            <xs:complexType>
              <xs:attributeGroup ref="IdentifierGrp"/>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

我得到的错误是

[ERROR] \target\generated-sources\AdditionalDataType.java:[1012,22] AdditionalDataType.AvailabilityStatus is already defined in AdditionalDataType

我发现这个如何使用外部绑定文件覆盖 JAXB 中的默认名称? 但是当我尝试使用以下绑定解决它时:

<jxb:bindings node="//xs:complexType[@name='AdditionalDataType']//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType//xs:sequence//xs:element[@name='AvailabilityStatus']">
  <jxb:property name="AvailabilityStatusSA"/>
</jxb:bindings>

它没有帮助,它没有改变任何东西。

有人可以帮忙吗?

@Ekrem我无法修改xml,我会这样做,但我不能。我需要具有可用性状态列表的 AdditionalDataType 我不在乎内部可用性状态(我试图映射到可用性状态SA)是否是内部类。

4

1 回答 1

3

更改 <jxb:property name="AvailabilityStatusSA"/><jxb:class name="AvailabilityStatusSA"/>,您的绑定节点路径应以 complexType -> 结尾<jxb:bindings node=...[@name='AvailabilityStatus']xs:complexType"

所以你的外部绑定文件应该是这样的:

<jxb:bindings node="//xs:complexType[@name='AdditionalDataType']//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType//xs:sequence//xs:element[@name='AvailabilityStatus']//xs:complexType">
  <jxb:class name="AvailabilityStatusSA"/>
</jxb:bindings>
于 2013-07-29T13:04:45.853 回答