一、简介

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

Java SE中的JAXB

JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。

JDK中JAXB相关的重要Class和Interface:

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

JDK中JAXB相关的重要Annotation:

@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属性。
 
 toXml方法是用Marshaller接口将对象转成xml数据
 

  //将java对象Car转成xml数据
1 static void toXml() throws Exception{
JAXBContext jaxbContext = JAXBContext.newInstance(Car.class);
Marshaller marshaller = jaxbContext.createMarshaller(); Wheel wheel = new Wheel();
FuelSystem fuelSystem = new FuelSystem();
fuelSystem.setName("燃油系统");
Engine engine = new Engine();
engine.setFuelSystem(fuelSystem);
Car car = new Car();
car.setWheel(wheel);
car.setEngine(engine); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//marshaller.marshal(car, System.out);
marshaller.marshal(car, new FileOutputStream("src/car.xml"));
}

生成的xml文件

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<car>
<wheel>
<hub>4</hub>
<tire>4</tire>
</wheel>
<engine>
<fuelSystem>
<name>燃油系统</name>
</fuelSystem>
</engine>
</car>
 //xml文件转成对象
static void Xml2Obj() throws Exception{
JAXBContext jaxbContext = JAXBContext.newInstance(Car.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Car car = (Car) unmarshaller.unmarshal(new File("src/car.xml"));
System.out.println(car);
}

输出的值为car.toString():

Car [wheel=Wheel [tire=4, hub=4], engine=Engine [fuelSystem=FuelSystem [name=燃油系统]]]

 package com.chen.jaxb;

 import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Car {
private Wheel wheel;
private Engine engine;
public Wheel getWheel() {
return wheel;
}
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
@Override
public String toString() {
return "Car [wheel=" + wheel + ", engine=" + engine + "]";
}
}
 package com.chen.jaxb;

 public class Engine {
private FuelSystem fuelSystem; public FuelSystem getFuelSystem() {
return fuelSystem;
} public void setFuelSystem(FuelSystem fuelSystem) {
this.fuelSystem = fuelSystem;
}
@Override
public String toString() {
return "Engine [fuelSystem=" + fuelSystem + "]";
}
}
 package com.chen.jaxb;

 public class FuelSystem {
private String name; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "FuelSystem [name=" + name + "]";
}
}
 package com.chen.jaxb;

 public class Wheel {
int tire = 4; //轮胎
int hub = 4; //轮毂 public int getTire() {
return tire;
}
public void setTire(int tire) {
this.tire = tire;
}
public int getHub() {
return hub;
}
public void setHub(int hub) {
this.hub = hub;
}
@Override
public String toString() {
return "Wheel [tire=" + tire + ", hub=" + hub + "]";
}
}

jaxb的更多相关文章

  1. XmlRootElement JAXB

    http://desert3.iteye.com/blog/1570092(文章已经很好) 看了那边文章以后尝试后写点直白的 PROPERTY: JAXB 绑定类中的每个获取方法/设置方法对将会自动绑 ...

  2. 错误:java.util.Map is an interface, and JAXB can't handle interfaces.

    问题: 在整合spring+cxf时报错java.util.Map is an interface, and JAXB can't handle interfaces. 解决方法: 将服务端的serv ...

  3. Jaxb annotation使用

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  4. JAXB最佳实践

    JAXB主要用来实现对象和XML之间的序列化和反序列化. 本文主要总结JAXB基本使用方法和注意事项! 通过下文的XML示例内容进行JAXB的简单实践 <?xml version="1 ...

  5. 在Gradle中使用jaxb的xjc插件

    jaxb,全称为Java Architecture for Xml Binding,是一种将java对象与xml建立起映射的技术.其主要提供两个功能,一是将java对象映射为xml,二是将xml映射为 ...

  6. Java for XML: JAXP、JAXB、JAXM、JAX-RPC、JAX-WS

    在XML领域里,对XML文件的校验有两种方式:DTD校验.Schema校验.在Java中,对于XML的解析,有多种方式:DOM解析.SAX解析.StAX解析.结合XML和Java后,就产生了Bind技 ...

  7. XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

    XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格 ...

  8. java JAXB 学习

    JAXB(Java Architecture for XML Binding)是JDK的一部分,用于Object <-> XML的转换(有点类似于.NET中的XML序列化). 1.创建XS ...

  9. Jaxb 解析 带有继承关系的bean与xml

    具体方法: 1. 在jaxb的setClasstobebounds中,只需要子类的class,无需父类. 2. 父类的前面加如下声明: @XmlAccessorType(XmlAccessType.F ...

随机推荐

  1. 推荐一些python Beautiful Soup学习网址

    前言:这几天忙着写分析报告,实在没精力去研究django,虽然抽时间去看了几遍中文文档,还是等实际实践后写几篇操作文章吧! 正文:以下是本人前段时间学习bs4库找的一些网址,在学习的可以参考下,有点多 ...

  2. 实验楼 linux 学习

    实验楼 linux 学习     一.Linux 用户管理 1.查看用户 who am i // who mom likes whoami   ====--------====== 输入的第一列表示打 ...

  3. maven私服搭建

    一.软件安装 地址:http://www.sonatype.org/nexus/thank-you-for-downloading/?dl=tgz 解压: 启动: >> nexus sta ...

  4. h3c防火墙的设置过程

    公司采购了一款h3c的防火墙,型号为F100-E-G,以前也设置过H3C的防火墙,不过这次还是设置还是有各种问题,所以把设置过程记录下来,方便以后查阅. 一.防火墙一般在0口都设置一个默认的IP地址1 ...

  5. Hibernate 延迟加载和立即加载

    概念 什么是延迟加载:所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作.可以简单理解为,只有在使用的时候,才会发出sql语句进行查询,数据是分N次读取. 什么是立即加载:所谓立即加载既是 ...

  6. IIS短文件名暴力枚举漏洞利用脚本

    import sys import httplib import urlparse import threading import Queue import time class Scanner(): ...

  7. canvas事件处理机制

    可以查看demo:http://sandbox.runjs.cn/show/hjb2hzzx(建议查看console查看点击后的改变) 具体原理是每次点击的时候去判断当前的鼠标坐标是属于哪一个路径下的 ...

  8. 分区表/etc/fstab格式

    $ more /etc/fstabUUID=94e4e384-0ace-437f-bc96-057dd64f42ee / ext4 defaults,barrier=0 1 1tmpfs        ...

  9. codevs 2924 数独挑战

    2924 数独挑战 http://codevs.cn/problem/2924/ 题目描述 Description "芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而 ...

  10. 17-前端开发之jQuery

    什么是 jQuery ? jQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程. jQuery是一个兼容多浏览器的javascript库,核心理念是write l ...