2017-11-29 13 views
3

jaxbxsdtojava에 의해 자동 생성 된 클래스에 수퍼 interface을 추가하고 싶습니다.xsdtojava를 사용하여 자동 생성 된 jaxb 요소에 인터페이스를 추가하는 방법은 무엇입니까?

문제점 : 루트 요소에만 인터페이스를 추가 할 수 있습니다 (테스트를 목적으로하지 않습니다).

상속을 적용하려는 요소는 thelistelement입니다.

xsd 나는 통제 할 수 없습니다.

<xs:schema> 
    <xs:element name="myRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="thelist"> 
        <xs:complexType> 
         <xs:sequence> 
         <xs:element name="thelistelement" maxOccurs="unbounded"> 
        ... 

바인딩 파일 :

<jaxb:bindings  
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" 
    jaxb:extensionBindingPrefixes="xjc inheritance" 
    jaxb:version="2.1"> 

    <!-- this works --> 
    <jaxb:bindings schemaLocation="xsd/my.xsd"> 
     <jaxb:bindings node="//xs:element[@name='myRequest']"> 
        <inheritance:implements>MyInterface</inheritance:implements> 
     </jaxb:bindings> 
    </jaxb:bindings> 

    <!-- this does NOT work --> 
    <jaxb:bindings schemaLocation="xsd/my.xsd"> 
     <jaxb:bindings node="//xs:element[@name='thelistelement']"> 
        <inheritance:implements>MyInterface</inheritance:implements> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

<extensionArg>-Xinheritance</extensionArg>으로 실행합니다.

출력은 다음과 같아야합니다

... 
List<Thelistelement> thelist; 

class Thelistelement implements MyInterface { 

} 

하지만 인터페이스는 목록 요소의 클래스가 없습니다. 그렇다면 왜 루트 요소 myRequest에서 작동합니까?

답변

0

노드에 /xs:complexType을 추가해야했습니다. 그게 왜 효과가 있었는지 모르겠다.

complexType 앞에 단일 슬래시를 적어 두는 것이 중요합니다!

<jaxb:bindings schemaLocation="xsd/my.xsd"> 
    <jaxb:bindings node="//xs:element[@name='thelistelement']/xs:complexType"> 
       <inheritance:implements>MyInterface</inheritance:implements> 
    </jaxb:bindings> 
</jaxb:bindings>