空タグ - xmlaccessortype json




JAXBバインディングのカスタマイズ (4)

"orderProperty"のシーケンスを表す生成されたJavaクラス自体が "OrderPropertyList"という名前になっている可能性が高いため、これが起こっていると思います。

私がやることは、まずカスタムバインディングなしで生成し、生成するクラス名と階層を調べることです。 次に、あなたが上書きしたいものと、どのように考えているのかを考えます。

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>

私のカスタマイズのバインディングは、 このページで指定されている通りですが、うまくいきません。 ここで私の縛り:

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

私の目的は、xsdのルート要素の内部に内部クラスを生成するデフォルトの動作ではなく、orderPropertyListの個別のクラスを生成することです。

私はここここで同じ意図を持つ誰かを見ましたが、それは私のために適切に動作しません。 :(

JAXBバージョン:

Specification-Version: 2.1
Implementation-Version: 2.1.8

どんな助け?


あなたが次のようなスキーマを持っているのは本当に面白いです:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
    <xsd:element name="TopLevelElement">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Something">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Something" maxOccurs="unbounded">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element name="somethingFieldA" type="xsd:string"/>
                                        <xsd:element name="somethingFieldB" type="xsd:string"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

この場合、xjcは実際にSomethingという4つのクラスを生成しようとしているようですが、 Somethingという名前の要素ごとに1つ、 complexTypeのそれぞれに1つずつあります。 したがって、これらの4つの要素複雑な型のそれぞれがスキーマ内で発生するレベル(具体的には3つだけです)でヒットするバインディングを提供する必要があります。


この/xs:complexTypeを要素の最後に入力すると、不正なクラス継承ループエラーを修正するのに役立ちました。


jeff303のようなスキーマのカスタマイズを行う必要がありました。 私のシナリオは、WSDLドキュメント内でスキーマがインライン化されている点で若干異なります。

philvarnerが指摘していることの1つは、要素のノード選択が '/ xs:complexType'で終わっていなければならないということです。コンパイラはそれを使わずにループ継承に関連するIllegalArgumentExceptionを継続的に生成するため、

これらの投稿は関連しているので、私はリンクバックがここで終わる誰かに「グーグル・グーグル」に役立つだろうと考えました。

質問を確認する7881883