【发布时间】:2014-05-22 13:13:08
【问题描述】:
我有一个以 XML 格式生成数据的应用程序。最初它使用xml解码器生成文件,示例xml如下,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<java version="1.7.0_17" class="java.beans.XMLDecoder">
<object class="com.test.Bike">
<void property="color">
<string>military-green</string>
</void>
<void property="engineCapacity">
<int>150</int>
</void>
<void property="vin">
<int>215468</int>
</void>
</object>
</java>
后来的 xml 编组技术改为 JAXB。
现在我需要编写一个使用 JAXB 绑定读取新 xml 和旧 xml 文件的应用程序。但我面临着遗留 xml 绑定的问题。因为它有<java> 标签,我不能把XMLRootElement 给object
所以遵循基于JAXBContext的解组如下
JAXBContext jaxbContext = JAXBContext.newInstance(Bike.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
StreamSource xml = new StreamSource("bike.xml");
JAXBElement<Bike> je1 = jaxbUnmarshaller.unmarshal(xml, Bike.class);
Bike bike = je1.getValue();
System.out.println(bike);
Bike Domain 对象如下,
public class Bike {
String color;
int engineCapacity;
int vin;
public Bike() {
}
public Bike(int vin, int engineCapacity, String color) {
this.vin = vin;
this.engineCapacity = engineCapacity;
this.color = color;
}
public String getColor() {
return color;
}
@XmlElement
public void setColor(String color) {
this.color = color;
}
public int getEngineCapacity() {
return engineCapacity;
}
@XmlElement
public void setEngineCapacity(int engineCapacity) {
this.engineCapacity = engineCapacity;
}
public int getVin() {
return vin;
}
@XmlAttribute
public void setVin(int vin) {
this.vin = vin;
}
public String toString() {
return "Bike [color=" + color + ", engineCapacity=" + engineCapacity
+ ", vin=" + vin + "]";
}
}
但我总是得到Bike [color=null, engineCapacity=0, vin=0]的输出
任何人都可以帮助我如何有效地使用 JAXB 绑定这些 xml 吗?
【问题讨论】:
标签: java xml xml-parsing jaxb jaxb2