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;
} @Override
public 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 {
@Test
public 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);
} @Test
public 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就可以。

Java&amp;Xml教程(十一)JAXB实现XML与Java对象转换的更多相关文章

  1. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  2. Java&amp;Xml教程(十)XML作为属性文件使用

    我们一般会将Java应用的配置參数保存在属性文件里.Java应用的属性文件能够是一个正常的基于key-value对,以properties为扩展名的文件.也能够是XML文件. 在本案例中.將会向大家介 ...

  3. Java&Xml教程(十)XML作为属性文件使用

    我们通常会将Java应用的配置参数保存在属性文件中,Java应用的属性文件可以是一个正常的基于key-value对,以properties为扩展名的文件,也可以是XML文件. 在本案例中,將会向大家介 ...

  4. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. Java NIO系列教程(十一) Java NIO 与 IO

    Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ...

  6. Java NIO系列教程(三-十二) Buffer

    原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ...

  7. Java经典设计模式之十一种行为型模式

    转载: Java经典设计模式之十一种行为型模式 Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式 ...

  8. Java&Xml教程(十一)JAXB实现XML与Java对象转换

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

  9. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

随机推荐

  1. 移动端的click事件延迟触发的原理是什么?如何解决这个问题?

    移动端的click事件延迟触发的原理是什么?如何解决这个问题? 原理 :移动端屏幕双击会缩放页面 300ms延迟 会出现点透现象 在列表页面上创建一个弹出层,弹出层有个关闭的按钮,你点了这个按钮关闭弹 ...

  2. Redis(一)、Redis五种数据结构

    Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...

  3. SDAutoLayout的使用

    ## 简介- IOS布局的三个阶段:MagicNumber -> AutoResizingMask -> AutoLayout- 自动布局三大框架:UILayoutConstraint(原 ...

  4. 百度地图api的简单应用

    百度地图api 获取经纬度(通过浏览器的) //获取经纬度 window.navigator.geolocation.getCurrentPosition(function(position) { a ...

  5. JavaScript获取非行间样式

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  6. (转)webpack从零开始第6课:在Vue开发中使用webpack

    vue官方已经写好一个vue-webpack模板vue_cli,原本自己写一个,发现官方写得已经够好了,自己写显得有点多余,但为了让大家熟悉webpack,决定还是一步一步从0开始写,但源文件就直接拷 ...

  7. axis2 1.7.1使用教程

    写在前面 本文只说Axis2的用法. 1.下载与部署 需要下载两个文件: 下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/ ...

  8. 【Oracle】手工建库启动到nomount状态时错误ORA-09925,ORA-01017

    配置好pfile和口令文件后启动数据库到nomount状态下出现错误: [oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2 ...

  9. RAP开发入门-运行过程简析(三)

    今天通过标准的RAP程序来简单分析下RAP的启动过程 1.新建一个标准的rap plugin-in 项目: 得到的项目结构大概如下: run confi..->..add bundle(配置好b ...

  10. 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)

    算法原理请参考此文:  kinect fusion 3D重建基本算法  http://log.csdn.net/xiaohu50/article/details/51592503 三维重建为三维空间实 ...