我正在尝试解组以下XML:
<calcElement partname="driver">
<driverXs>300.00</driverXs>
<seq>1</seq>
</calcElement>
<calcElement partname="ratingData">
<baseMiles>6000</baseMiles>
<vehicleGroup>15</vehicleGroup>
<documentVersion>4</documentVersion>
</calcElement>
我有以下类,它们代表上面2个calcElement实例:
public abstract class CalcElement {
private String partName;
@XmlAttribute
public String getPartName() {
return partName;
}
public void setPartName(String partName) {
this.partName = partName;
}
}
public class DriverCalcElement extends CalcElement {
private String driverXs;
private String seq;
public String getDriverXs() {
return driverXs;
}
public void setDriverXs(String driverXs) {
this.driverXs = driverXs;
}
public String getSeq() {
return seq;
}
public void setSeq(String seq) {
this.seq = seq;
}
}
public class RatingDataCalcElement extends CalcElement {
private String baseMiles;
private String vehicleGroup;
private String documentVersion;
public String getBaseMiles() {
return baseMiles;
}
public void setBaseMiles(String baseMiles) {
this.baseMiles = baseMiles;
}
public String getVehicleGroup() {
return vehicleGroup;
}
public void setVehicleGroup(String vehicleGroup) {
this.vehicleGroup = vehicleGroup;
}
public String getDocumentVersion() {
return documentVersion;
}
public void setDocumentVersion(String documentVersion) {
this.documentVersion = documentVersion;
}
}
但是我无法找到注释的组合来添加到类中以成功解组(和编组)此代码。
我需要在类中添加什么才能使其正常工作?
答案 0 :(得分:1)
JAXB本身不支持您尝试执行的操作。 XML Schema 1.1引入了一个类型替代的概念,您可以使用该元素的类型来确定元素的类型,使用该元素的属性值,但JAXB 2.x不支持此类基于XML Schema 1.0)。
您可以使用xsi:type对JAXB执行类似操作,但是您需要在磁盘上更改文档或进行转换(例如使用XSLT)以包含xsi:type
属性,然后再将其传递给JAXB Unmarshaller。 xsi:type
的值将是您使用注释指定的类型名称。有关如何计算类的类型名称,请参阅@XmlType注释。