2014-02-27 4 views
3

지금 가지고있는 다른 계층 구조로 xml 바인딩을 사용하여 POJO를 생성하고 싶습니다. 는 지금이 하나의 같은 XSD 있습니다Jaxb POJO generation with Inheritance

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://manueldoncel.com" xmlns:tns="http://manueldoncel.com" elementFormDefault="qualified"> 
    <!-- Base element that any element uses/extends --> 
    <complexType name="baseElement" abstract="true"> 
     <sequence> 
      <element name="attributes" type="anyType" minOccurs="0" /> 
     </sequence> 
     <attribute name="id" type="string" /> 
    </complexType> 

    <complexType name="Square"> 
     <complexContent><extension base="tns:baseElement" /></complexContent> 
    </complexType> 

    <complexType name="Triangle"> 
     <complexContent><extension base="tns:baseElement" /></complexContent> 
    </complexType> 

</schema> 

이 같은 xjb을;

<?xml version="1.0"?> 
<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:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jxb:bindings schemaLocation="figures.xsd" node="/xs:schema"> 
    <jxb:globalBindings> 
     <xjc:simple /> 
     <xjc:superClass name="org.manuel.metadata.Figure"/>  
    </jxb:globalBindings> 
    </jxb:bindings> 
</jxb:bindings> 

하지만, 그래서, 삼각형 POJO가 ThreeSideFigure에서보다는 Figure에서 확장해야 XSD에서 생성

public abstract class Figure { 
    // some methods for all the figures 
} 

public abstract class ThreeSideFigure extends Figure { 
.... // some methods for only the Three side Figures 
} 

이 방법으로 더 나은 계층 구조를 가지고 싶습니다.

이 특정 xsd에서 나는 2 개의 숫자 만 넣었지만 훨씬 더 가질 수 있습니다. xjb에서 모든 complexType이 Figure에서 확장되어야한다는 것을 지정할 수 있기를 원하지만 그 중 단지 몇 개만이 ThreeSideFigure에서 확장되어야합니다.

xjb가 어떻게 보이는지 알고 있습니까?

답변

2

나는 Metro JAXB RI 확장 프로그램이 그렇게 할 수는 없을 것이라고 생각합니다. 2.2.7 documentation에서

:

3.1.3. 공통 슈퍼 클래스

<xjc:superClass> 사용자 정의를 확장하면 슈퍼 클래스 모든 생성 된 구현 클래스의 로서 사용되는 자바 클래스의 완전 수식 명을 지정할 수 있습니다. <xjc:superClass> 정의는 XJC superinterface and superclass only for all classes?에 대한 대답은 당신이 제 3 자 확장과 함께 할 수있을 수 있음을 시사 말했다 <xs:schema> 요소

<jaxb:globalBindings> 정의 내에서 발생할 수 있습니다. details about plugins in the documentation이 있습니다.