是否可以将现有类称为.xsd文件jaxb中的基类

时间:2016-06-01 07:35:53

标签: java xml xsd jaxb

我开始学习JAXB,所以这个问题可能非常愚蠢。现在我有两个类,一个基地" base.java"和派生类" child.java"。这些类是使用" .xsd"生成的。文件。我有另一个类" secondBase.java",这个类不是由我的" .xsd"生成的。我的问题是: 是否可以使用" secondBase.java"作为" child.java"的基础而不是我的Jaxb创建的基础?

这是我的.xsd文件:

<?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>

我的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;
    }
}

我的base.java(使用.xsd文件生成)

@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;
    }

}

我的child.java(使用.xsd文件生成)

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


}

提前感谢:)

1 个答案:

答案 0 :(得分:0)

这是解决方案,它可能对某人有帮助。我将此添加到我的.xsd文件中:

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

我用这个&#34; complextype作为我的元素的扩展:) PS:这个答案的灵感来源于这个主题:how to force schema compiled classes to extend specific class outside schema