2016-06-01 20 views
0

Ich beginne zu lernen JAXB, so kann diese Frage sehr dumm sein. Jetzt habe ich zwei Klassen, eine Basis "base.java" und eine abgeleitete Klasse "child.java". Diese Klassen wurden mit einer ".xsd" -Datei generiert. Ich habe eine andere Klasse "secondBase.java", diese Klasse wurde nicht von meinem ".xsd" generiert. Meine Frage ist: Ist es möglich, "secondBase.java" als Basis für "child.java" anstelle der von meinem Jaxb erstellten Basis zu verwenden?Ist es möglich, auf eine vorhandene Klasse als Basis in .xsd-Datei verweisen jaxb

Hier ist meine XSD-Datei:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1"> 

    <xs:complexType name="base"> 
     <xs:sequence> 
      <xs:element name="id" type="xs:string" minOccurs="1" 
       maxOccurs="1" /> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="chlid" /> 
    <xs:complexType name="chlid"> 
     <xs:complexContent> 
      <xs:extension base="base"> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 

Mein secondBase.java:

public class secondBase { 
    public secondBase(){ 
    id="0"; 
    } 
    protected String id; 
    public String getId() { 
     return id; 
    } 
    public void setId(String value) { 
     this.id = value; 
    } 
} 

Mein base.java (erzeugt mit XSD-Datei)

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "base", propOrder = { 
    "id" 
}) 
@XmlSeeAlso({ 
    Chlid.class 
}) 
public class Base { 

    @XmlElement(required = true) 
    protected String id; 
    public String getId() { 
     return id; 
    } 
    public void setId(String value) { 
     this.id = value; 
    } 

} 

Mein Kind. Java (erzeugt unter Verwendung der .xsd Datei)

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "chlid") 
public class Chlid 
    extends Base 
{ 


} 

Dankten im Voraus :)

+0

Können Sie Ihre Basis und Kind-Klasse auch teilen? –

Antwort

0

Hier ist die Lösung, könnte es für jemanden hilfreich sein .. Ich habe diese auf meine XSD-Datei:

<xs:complexType name="secondBase"> 
    <xs:annotation> 
     <xs:appinfo> 
     <jaxb:class name="secondBase" implClass="com.myjaxb.classes.secondBase"/> 
     </xs:appinfo> 
    </xs:annotation> 
    </xs:complexType> 

und ich dieses „complex als Erweiterung zu meinem Element :) PS: Diese Antwort ist inspiriert von diesem Thema: how to force schema compiled classes to extend specific class outside schema