簡體   English   中英

JAXB / XJC:從具有相同complexType的元素生成類

[英]JAXB / XJC: Generate classes from elements with same complexType

我想使用XJC從以下XSD生成Java類SignResponseAuthResponse

<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>

這意味着從具有相同complexType的元素生成類。 使用上述XSD作為輸入,XJC將生成OrderResponseType類,但不SignResponseAuthResponse 看來type="tns:OrderResponseType"不XJC正確使用,因為當OrderResponseType被內部定義SignResponseAuthResponse ,一切正常OK:

<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" ,但這僅在只有一個元素具有type="tns:OrderResponseType"作為屬性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>

提前致謝。

可能不是最佳解決方案,因為SignResponseAuthResponse的基類將是JAXBElement<OrderResponseType> ,而不是OrderResponseType 但是您可以使用以下jaxb綁定來擁有兩個不同的類:

<jxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
    <jxb:bindings node="//xsd:element[@name='SignResponse']">
        <jxb:class name="SignResponse"/>
    </jxb:bindings>
    <jxb:bindings node="//xsd:element[@name='AuthResponse']">             
       <jxb:class name="AuthResponse"/>
    </jxb:bindings>
</jxb:bindings>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM