【问题标题】:JaxB property value is already defined. Use &lt;jaxb:property> to resolve this conflictJaxB 属性值已定义。使用 <jaxb:property> 解决此冲突
【发布时间】:2018-01-25 11:13:21
【问题描述】:

我正在使用以下 xsd 架构文件来生成 java 类

<xsd:complexType name="Instruction">
<xsd:choice>
    <xsd:sequence>
        <xsd:element name="InstructionIndicator" type="InstructionIndicator">
            <xsd:annotation>
                <xsd:documentation>some text</xsd:documentation>
            </xsd:annotation>
        </xsd:element>
        <xsd:sequence minOccurs="0" maxOccurs="49">
            <xsd:element name="MultipleTimingModifier" type="ANDOR"
                minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>some text</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="TimingAndDuration" type="TimingAndDuration" />
        </xsd:sequence>
    </xsd:sequence>
    <xsd:sequence>
        <xsd:choice>
            <xsd:element name="AdministrationIndicator" type="AdministrationIndicator">
                <xsd:annotation>
                    <xsd:documentation>some text</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:sequence>
                <xsd:element name="DoseAdministration" type="DoseAdministration" />
                <xsd:element name="TimingAndDuration" type="TimingAndDuration">
                    <xsd:annotation>
                        <xsd:documentation>some text</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:sequence minOccurs="0" maxOccurs="49">
                    <xsd:element name="MultipleTimingModifier" type="ANDOR"
                        minOccurs="0">
                        <xsd:annotation>
                            <xsd:documentation>some text</xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="TimingAndDuration" type="TimingAndDuration" />
                </xsd:sequence>
            </xsd:sequence>
        </xsd:choice>
        <xsd:sequence minOccurs="0">
            <xsd:element name="IndicationForUse" type="Indication"
                maxOccurs="50">
                <xsd:annotation>
                    <xsd:documentation>some text</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="IndicationClarifyingFreeText" type="an1..255"
                minOccurs="0" />
        </xsd:sequence>
        <xsd:element name="MaximumDoseRestriction" type="MaximumDoseRestriction"
            minOccurs="0" maxOccurs="50">
            <xsd:annotation>
                <xsd:documentation>some text</xsd:documentation>
            </xsd:annotation>
        </xsd:element>
    </xsd:sequence>
</xsd:choice>

但是处理这个会导致错误

属性“MultipleTimingModifierAndTimingAndDuration”已定义。使用 解决此冲突。

为了解决这个问题,我编写了一个包含以下内容的绑定文件

<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc" version="2.0">

<jaxb:bindings schemaLocation="structures.xsd"
    node="//xs:complexType[@name='Instruction']/xs:choice[1]
    /xs:sequence[1]/xs:sequence/xs:element[@name='MultipleTimingModifier']">
    <jaxb:property name="MultipleTimingModifier1" />
</jaxb:bindings>

<jaxb:bindings schemaLocation="structures.xsd"
    node="//xs:complexType[@name='Instruction']/xs:choice
    /xs:sequence[1]/xs:sequence/xs:element[@name='TimingAndDuration']">
    <jaxb:property name="TimingAndDuration1" />
</jaxb:bindings>

在 elcipse 中生成 Jaxb 类时添加此绑定文件后,会产生以下错误

编译器无法支持此属性自定义。它附加到错误的位置,或者与其他绑定不一致。

如果从目标序列节点中移除 maxoccurs="49" 约束,则类将成功生成

注意:

  • 架构是 5 个不同文件的组合,超过 2000 行
  • 这里只分享产生错误的部分
  • 如果您要对此投反对票,请在 cmets 中留下理由,以便我改进问题
  • 我已经尝试了所有现有的答案,但没有一个对我有用

【问题讨论】:

    标签: java xml eclipse xsd jaxb


    【解决方案1】:

    使用以下绑定代码我已经解决了我的问题

    <jaxb:bindings
         schemaLocation="structures.xsd"
         node="//xs:complexType[@name='Instruction']/xs:choice/xs:sequence[1]/xs:sequence[1]">
         <jaxb:property name="seq1"/>
    </jaxb:bindings>
    

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 2019-12-22
      • 2016-01-12
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多