是否可以在 .xsd 文件 jaxb 中引用现有的 class 作为基础
Is it possible to refer to an existing class as a base in .xsd file jaxb
我正在开始学习 JAXB,所以这个问题可能非常愚蠢。现在我有两个 classes,一个基础 "base.java" 和一个派生的 class "child.java"。这些 classes 是使用“.xsd”文件生成的。我还有一个class "secondBase.java",这个class不是我的“.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
{
}
提前致谢:)
这是解决方案,它可能对某人有帮助.. 我将其添加到我的 .xsd 文件中:
<xs:complexType name="secondBase">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="secondBase" implClass="com.myjaxb.classes.secondBase"/>
</xs:appinfo>
</xs:annotation>
</xs:complexType>
我用这个“complextype 作为我的元素的扩展:)
PS :这个答案的灵感来自这个话题:how to force schema compiled classes to extend specific class outside schema
我正在开始学习 JAXB,所以这个问题可能非常愚蠢。现在我有两个 classes,一个基础 "base.java" 和一个派生的 class "child.java"。这些 classes 是使用“.xsd”文件生成的。我还有一个class "secondBase.java",这个class不是我的“.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
{
}
提前致谢:)
这是解决方案,它可能对某人有帮助.. 我将其添加到我的 .xsd 文件中:
<xs:complexType name="secondBase">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="secondBase" implClass="com.myjaxb.classes.secondBase"/>
</xs:appinfo>
</xs:annotation>
</xs:complexType>
我用这个“complextype 作为我的元素的扩展:) PS :这个答案的灵感来自这个话题:how to force schema compiled classes to extend specific class outside schema