我想使用XJC生成Java類從以下XSD 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>
這意味着從具有相同的complexType元件產生的類。使用上述XSD作爲輸入,XJC將生成OrderResponseType
類,但不生成SignResponse
和AuthResponse
。這似乎type="tns:OrderResponseType"
不受XJC正確使用,因爲當OrderResponseType
是內部SignResponse
和AuthResponse
定義,一切正常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"
作爲屬性元素:
<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>
在此先感謝。
我們最終使用OrderResponseType而不是SignResponse和AuthResponse。 – frevib