如何使用JAXB对带包名的XML元素进行编组/解组?
JAXB编组/解组带包名根元素的XML处理方案
一、现有代码的问题
- Setter方法参数缺失:
setNumber()和setEngine()未定义入参,无法完成属性赋值,必须补充参数才能正常工作。 - 根元素名称不匹配:XML根元素是
com.jaraws.api.Vehicle,但默认JAXB会将类名首字母小写的vehicle作为根元素名称,导致无法与XML对应,需要显式指定根元素名称。
二、修正后的Vehicle类
package com.jaraws.api; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "com.jaraws.api.Vehicle") public class Vehicle { private String number; private String engine; @XmlElement public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } @XmlElement public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } }
三、编组(Marshalling)示例
将Vehicle对象转换为指定格式的XML:
import com.jaraws.api.Vehicle; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.StringWriter; public class MarshallerExample { public static void main(String[] args) throws JAXBException { // 创建Vehicle对象 Vehicle vehicle = new Vehicle(); vehicle.setNumber("KT12356"); vehicle.setEngine("DIESEL"); // 初始化JAXB上下文 JAXBContext context = JAXBContext.newInstance(Vehicle.class); Marshaller marshaller = context.createMarshaller(); // 格式化输出XML marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 将对象编组为字符串 StringWriter writer = new StringWriter(); marshaller.marshal(vehicle, writer); System.out.println(writer.toString()); } }
四、解组(Unmarshalling)示例
将指定格式的XML转换为Vehicle对象:
import com.jaraws.api.Vehicle; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class UnmarshallerExample { public static void main(String[] args) throws JAXBException { String xmlContent = "<com.jaraws.api.Vehicle>\n" + " <number>KT12356</number>\n" + " <engine>DIESEL</engine>\n" + "</com.jaraws.api.Vehicle>"; // 初始化JAXB上下文 JAXBContext context = JAXBContext.newInstance(Vehicle.class); Unmarshaller unmarshaller = context.createUnmarshaller(); // 将XML解组为Vehicle对象 Vehicle vehicle = (Vehicle) unmarshaller.unmarshal(new StringReader(xmlContent)); System.out.println("车牌号:" + vehicle.getNumber()); System.out.println("发动机类型:" + vehicle.getEngine()); } }
五、可行性说明
修正上述代码错误后,完全可以实现对给定格式XML的编组和解组操作。
内容的提问来源于stack exchange,提问作者Jaraws
相关产品推荐
相关产品推荐

