2017-04-13 13 views
0

와 요소에서 클래스를 생성 :JAXB/XJC : 나는이 XJC를 사용하여 자바 클래스 다음 XSD에서 <code>SignResponse</code> 및 <code>AuthResponse</code>을 생성하고자하는 같은 복합 타입

<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 클래스를 생성하지만 SignResponseAuthResponse은 생성하지 않습니다. OrderResponseTypeSignResponseAuthResponse 내부를 정의 할 때, 모든 확인을 작동하기 때문에 type="tns:OrderResponseType"는, XJC가 제대로 사용되지 않는 것 같다

<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

아마도 SignResponseAuthResponse의 기본 클래스는 OrderResponseType이 아니기 때문에 JAXBElement<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> 
+0

우리는 대신 SignResponse 및 AuthResponse의 OrderResponseType를 사용하여 끝났다. – frevib