如何用MOXy等Java XML框架双向编解码同名元素XML与对象
MOXy实现双向编解码方案
完全可以通过MOXy的注解组合实现XML与Java对象的双向编组和解组,具体配置如下:
1. 调整Field类的注解映射
给Field类的字段添加对应注解,将name映射为XML元素的属性,value映射为元素的文本内容:
import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlValue; public class Field { @XmlAttribute String name; @XmlValue String value; // JAXB要求的无参构造器 public Field() {} // 可选带参构造器,方便实例化 public Field(String name, String value) { this.name = name; this.value = value; } // JAXB要求的getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
2. 调整Teacher类的路径映射
给Teacher类的每个Field属性添加@XmlPath注解,指定对应XML元素的匹配规则:
import org.eclipse.persistence.oxm.annotations.XmlPath; public class Teacher { @XmlPath("field[@name='Age']") Field age; @XmlPath("field[@name='Name']") Field name; @XmlPath("field[@name='Course']") Field course; // JAXB要求的无参构造器 public Teacher() {} // getter/setter方法 public Field getAge() { return age; } public void setAge(Field age) { this.age = age; } public Field getName() { return name; } public void setName(Field name) { this.name = name; } public Field getCourse() { return course; } public void setCourse(Field course) { this.course = course; } }
3. 双向编解码验证
- 解组(XML→Java对象):MOXy会根据
@XmlPath匹配XML中对应name属性的field元素,将属性值和文本内容分别注入Field对象的对应字段,再赋值给Teacher的属性。 - 编组(Java对象→XML):MOXy会按照
@XmlPath生成指定结构的field元素,把Field对象的name作为元素属性、value作为元素文本,完全匹配目标XML格式。
注意事项
- 确保项目引入MOXy依赖(如Maven中添加eclipselink依赖)。
- JAXB规范要求实体类必须提供无参构造器,且字段需配套getter/setter方法。
内容的提问来源于stack exchange,提问作者hippofan
相关产品推荐
相关产品推荐

