我是JAXB的新手,并将XSD文件解析为Java类。 计划是有一个抽象类和多个扩展抽象类的类。所有子类都必须覆盖特定方法。 实现这一目标的最佳方法是什么?希望有人可以给我一个提示。 基本上我现在已经实现了这个实现:
抽象类XSD描述:
<xs:complexType name="DataObject" abstract="true">
<xs:sequence>
<xs:element name="value" type="xs:string"/>
<xs:element name="dataType" type="xs:string"/>
<xs:element name="match" type="xs:string"/>
</xs:sequence>
</xs:complexType>
现在我想在子类XSD描述文件中覆盖'DataObject'抽象类的'match'对象的getter。 提前谢谢。
答案 0 :(得分:0)
请注意,JAXB不能创建抽象类的实例;因此,您需要将xml标记绑定到DataObject的具体子类。
下面的示例显示了一个具体的StringMatchDataObject类;其他类可以遵循相同的结构:
public abstract class DataObject {
private String value;
private String dataType;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public abstract String getMatch();
public abstract void setMatch(String match);
}
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="DataObject")
public class StringMatchDataObject extends DataObject {
private String match;
@Override
public String getMatch() {
return match;
}
@Override
public void setMatch(String match) {
this.match = match;
}
}
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class AppRun {
public static void main(String[] args) throws JAXBException {
StringMatchDataObject stringMatchDataObject = new StringMatchDataObject();
stringMatchDataObject.setDataType("data type");
stringMatchDataObject.setMatch("STRING MATCH");
stringMatchDataObject.setValue("value");
JAXBContext context = JAXBContext.newInstance(StringMatchDataObject.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(stringMatchDataObject, System.out);
}
}