【发布时间】:2017-04-13 19:02:54
【问题描述】:
我想使用 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 使用时会抛出异常 e.g.:
<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>
提前致谢。
【问题讨论】: