私はXJCを使用して、次のXSDからJavaクラスSignResponse
とAuthResponse
を生成したいと思います:JAXB/XJC:同じのcomplexTypeに要素からクラスを生成
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SignResponse" type="tns:OrderResponseType"/>
<xsd:element name="AuthResponse" type="tns:OrderResponseType"/>
<xsd:complexType name="OrderResponseType">
<xsd:sequence>
<xsd:element name="orderRef" type="xsd:string"/>
<xsd:element name="autoStartToken" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
これは、同じ複合型を持つ要素からクラスを生成することを意味します。上記のXSDを入力として使用すると、XJCはOrderResponseType
クラスを生成しますが、SignResponse
およびAuthResponse
は生成しません。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SignResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderRef" type="xsd:string"/>
<xsd:element name="autoStartToken" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="AuthResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="orderRef" type="xsd:string"/>
<xsd:element name="autoStartToken" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
次XJBを使用して、type="tns:OrderResponseType"
が実際に使用されますが、一つだけがある場合にのみ、これは動作します:OrderResponseType
がSignResponse
とAuthResponse
内で定義されたとき、すべてがOK動作するためtype="tns:OrderResponseType"
は、XJCによって適切に使用されていないようです属性としてtype="tns:OrderResponseType"
を持つ要素:
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc">
<jxb:globalBindings>
<xjc:simple/>
</jxb:globalBindings>
</jxb:bindings>
この<xjc:simple/>
XJB結合要素と組み合わせて複数の要素を使用するだけでOrderResponseType
が生成されます。以下のようなカスタムバインディングを使用して
:
<jxb:bindings node="//xs:complexType[@name='OrderResponseType']">
<jxb:class name="SignResponse"/>
</jxb:bindings>
も一つだけの要素のために働きます。 XJCは、例:
<jxb:bindings node="//xs:complexType[@name='OrderResponseType']">
<jxb:class name="SignResponse"/>
</jxb:bindings>
<jxb:bindings node="//xs:complexType[@name='OrderResponseType']">
<jxb:class name="AuthResponse"/>
</jxb:bindings>
ありがとうございます。
SignResponseおよびAuthResponseの代わりにOrderResponseTypeを使用しました。 – frevib