JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,能够帮助开发者很方便的將XML和Java对象进行相互转换。
本文以一个简单的例子介绍JAXB的使用,首先我们需要了解一下JAXB常用的API。

  • JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
  • Marshaller接口,将Java对象序列化为XML数据。
  • Unmarshaller接口,将XML数据反序列化为Java对象。

  • @XmlType,将Java类或枚举类型映射到XML模式类型

  • @XmlAccessorType(XmlAccessType.FIELD),控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
  • @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序
  • @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
  • @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
  • @XmlRootElement,将Java类或枚举类型映射到XML元素。
  • @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
  • @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。

我们需要进行绑定的Java Bean内容如下:
Employee.java

package net.csdn.beans;import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" })
public class Employee {private String name;private String gender;private int age;private String role;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}@Overridepublic String toString() {return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="+ this.gender + " Role=" + this.role;}}

需要转换为Java对象的XML文件内容如下:
employee.xml

<?xml version="1.0"?>
<employee id="1"><name>Pankaj</name><age>29</age><role>Java Developer</role><gender>Male</gender>
</employee>

接下来编写测试用例代码:
TestJAXB.java

package net.csdn.test;import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;import net.csdn.beans.Employee;import org.junit.Test;public class TestJAXB {@Testpublic void testXml2Obj() throws Exception {InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");byte[] bytes = new byte[is.available()];is.read(bytes);String xmlStr = new String(bytes);JAXBContext context = JAXBContext.newInstance(Employee.class);  Unmarshaller unmarshaller = context.createUnmarshaller();  Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));System.out.println(emp);}@Testpublic void testObj2Xml() {Employee  emp = new Employee();emp.setAge(10);emp.setGender("Male");emp.setName("Jane");emp.setRole("Teacher");String xmlStr = TestJAXB.convertToXml(emp,"utf-8");  System.out.println(xmlStr);}public static String convertToXml(Object obj, String encoding) {  String result = null;  try {  JAXBContext context = JAXBContext.newInstance(obj.getClass());  Marshaller marshaller = context.createMarshaller();  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);  StringWriter writer = new StringWriter();  marshaller.marshal(obj, writer);  result = writer.toString();  } catch (Exception e) {  e.printStackTrace();  }  return result;  } }

运行testObj2Xml测试方法,控制台输出:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<employee><name>Jane</name><age>10</age><role>Teacher</role><gender>Male</gender>
</employee>

运行testXml2Obj测试方法,控制台输出:

Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer

注:本例中使用JUnit4作为单元测试工具,在Eclipse中点击Window->Show View->OutLine菜单打开outline视图,分别在testXml2Obj和testObj2Xml方法上点击右键->Run As->JUnit Test即可。

JavaXml教程(十一)JAXB实现XML与Java对象转换相关推荐

  1. java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换

    JAXB是Java Architecture for XML Binding的缩写,用于在Java类与XML之间建立映射,可以帮助开发人员非常方便的將XML和Java对象进行相互转换. 本文以一个简单 ...

  2. xml与java对象转换 -- XStreamAlias

    @XStreamAlias使用 一. 特点: 简化的API;  无映射文件;  高性能,低内存占用;  整洁的XML;  不需要修改对象;支持内部私有字段,不需要setter/getter方法  提供 ...

  3. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  4. 使用castor实现xml和java对象的转换

    对于xml和java对象的转换这里用castor进行转换,当然还有别的方式 方式一:castor和xml映射文件配合 首先提供需要解析的XML(内容不重要,重要的是格式) <?xml versi ...

  5. java非闭合xml转对象,不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  6. xml与java对象互转

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  7. digester java_[jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!)...

    # re: [jakarta-commons] 使用Digester解释xml获取java对象(代码入注规则 或 配置规则 任你选!) 2009-11-09 10:27 | Java小子 楼主,运行起 ...

  8. 【Java对象转换】003- Java 对象与 Yaml 互转

    [Java对象转换]003- Java 对象与 Yaml 互转 文章目录 [Java对象转换]003- Java 对象与 Yaml 互转 一.Java 对象与 Yaml 概述 1.Java 对象 2. ...

  9. 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)

    [Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...

最新文章

  1. 《预训练周刊》第40期: 量子预训练、千层BERT与GPT
  2. asp.net 动态绑定html表格
  3. IJCAI 2019 论文解读 | 基于超图网络模型的图网络进化算法
  4. 奖金(信息学奥赛一本通-T1352)
  5. linux less 阻塞输出,linux – `less`命令显示输出所用的时间
  6. 面试题--------7、Files的常用方法
  7. C# 连接sql 2005
  8. 【洛谷 1057】传球游戏
  9. ocs边缘服务器部署规划简要说明
  10. python给函数设置超时时间已到_在 Linux/Mac 下为Python函数添加超时时间
  11. ubuntu中 tftp 服务器搭建 tftpd-hpa
  12. 七周成为数据分析师 第三周:Excel篇
  13. 引用arXiv的文章标准的Latex的bib如何编辑
  14. 德语语法笔记——形容词综述
  15. 3D打印成型技术:看得见摸得着的真实
  16. c语言if语句教学设计,if语句教学设计
  17. C语言中strstr函数功能及用法
  18. 绕过 word 文档的密码,对加密文档
  19. apache默认端口号是多少
  20. Coding and Paper Letter(四十一)

热门文章

  1. RF技术设计的机械数码一体化防盗锁
  2. python应用题应用背景及实际意义_全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题-Go语言中文社区...
  3. 关于Delay函数的思考
  4. [统计学]大数定律与中心极限定理
  5. 研发体系的打造(总裁班)
  6. 【JavaScript 教程】事件——EventTarget 接口
  7. Outlook 2016: 不能预览Excel文件的解决办法
  8. [软件更新]迅雷(Thunder) 5.9.3.951特别版(0703修正)
  9. 用脑过度了头痛了两天
  10. linux配置jdk环境_linux配置jdk环境变量显示不识别的标志符