jaxb

一、简介

    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{ 2 JAXBContext jaxbContext = JAXBContext.newInstance(Car.class); 3 Marshaller marshaller = jaxbContext.createMarshaller(); 4 5 Wheel wheel = new Wheel(); 6 FuelSystem fuelSystem = new FuelSystem(); 7 fuelSystem.setName("燃油系统"); 8 Engine engine = new Engine(); 9 engine.setFuelSystem(fuelSystem); 10 Car car = new Car(); 11 car.setWheel(wheel); 12 car.setEngine(engine); 13 14 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 15 //marshaller.marshal(car, System.out); 16 marshaller.marshal(car, new FileOutputStream("src/car.xml")); 17 }

生成的xml文件

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

输出的值为car.toString():

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

 1 package com.chen.jaxb;
 2 
 3 import javax.xml.bind.annotation.XmlAccessType;
 4 import javax.xml.bind.annotation.XmlAccessorType;
 5 import javax.xml.bind.annotation.XmlRootElement;
 6 
 7 @XmlRootElement
 8 @XmlAccessorType(XmlAccessType.FIELD)
 9 public class Car {
10     private Wheel wheel;
11     private Engine engine;
12     public Wheel getWheel() {
13         return wheel;
14     }
15     public void setWheel(Wheel wheel) {
16         this.wheel = wheel;
17     }
18     public Engine getEngine() {
19         return engine;
20     }
21     public void setEngine(Engine engine) {
22         this.engine = engine;
23     }
24     @Override
25     public String toString() {
26         return "Car [wheel=" + wheel + ", engine=" + engine + "]";
27     }
28 }
 1 package com.chen.jaxb;
 2 
 3 public class Engine {
 4     private FuelSystem fuelSystem;
 5 
 6     public FuelSystem getFuelSystem() {
 7         return fuelSystem;
 8     }
 9 
10     public void setFuelSystem(FuelSystem fuelSystem) {
11         this.fuelSystem = fuelSystem;
12     }
13     @Override
14     public String toString() {
15         return "Engine [fuelSystem=" + fuelSystem + "]";
16     }
17 }
 1 package com.chen.jaxb;
 2 
 3 public class FuelSystem {
 4     private String name;
 5     
 6     public String getName() {
 7         return name;
 8     }
 9     public void setName(String name) {
10         this.name = name;
11     }
12     @Override
13     public String toString() {
14         return "FuelSystem [name=" + name + "]";
15     }
16 }
 1 package com.chen.jaxb;
 2 
 3 public class Wheel {
 4     int tire = 4;  //轮胎
 5     int hub = 4;   //轮毂
 6     
 7     public int getTire() {
 8         return tire;
 9     }
10     public void setTire(int tire) {
11         this.tire = tire;
12     }
13     public int getHub() {
14         return hub;
15     }
16     public void setHub(int hub) {
17         this.hub = hub;
18     }
19     @Override
20     public String toString() {
21         return "Wheel [tire=" + tire + ", hub=" + hub + "]";
22     }
23 }

 

posted @ 2016-03-08 17:40  掉尾瓶  阅读(212)  评论(0编辑  收藏  举报