我想使用XJC从以下XSD生成Java类SignResponse
和AuthResponse
:
<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
。 XJC似乎未正确使用type="tns:OrderResponseType"
,因为在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"
,但仅当只有一个元素具有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>
提前致谢。
答案 0 :(得分:0)
可能不是最佳解决方案,因为SignResponse
&{39}和AuthResponse
的基类将是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>