如何使用外部绑定覆盖JAXB中的默认名称?

时间:2013-07-29 11:48:31

标签: java xml jaxb mapping

我正在尝试使用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>

<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
我找到了How to override the default name for in JAXB using a external binding file? 但是当我尝试使用以下绑定解决它时: [ERROR] \target\generated-sources\AdditionalDataType.java:[1012,22] AdditionalDataType.AvailabilityStatus is already defined in AdditionalDataType

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

有人可以帮忙吗?

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

1 个答案:

答案 0 :(得分:3)

更改 <jxb:property name="AvailabilityStatusSA"/><jxb:class name="AvailabilityStatusSA"/>,您的绑定节点路径应以complexType结尾 - &gt; <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>