OXM(Object XML Mapping)技术——JAXB实现对象与XML之间的相互转换

今天上午接着昨天的内容继续讲解XML相关的技术,重点讲解了JAXB (Java Architecture XML Bind的缩写)
使用JAXB实现XML与java对象的映射,这也是JDK1.6的新特性之一,我们可以把对象和XML之间的映射成为OXM
(Object XML Mapping),JAXB原来为JavaEE的一部分,在JDK1.6中,Sun把JAXB放到了Java SE中,用JDK1.5中
的新特性Annotation来标识要绑定的类和属性等。下面贴一个例子

package com.future;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

public class JAXBTest {

/*
* 1、marshal java object----document
* 2、gegXMLFromObject
* 3、unmarshal document-----java object
*/
public static void main(String[] args) {
try {
JAXBContext context = JAXBContext.newInstance(Person.class);

gegXMLFromObject(context);
} catch (JAXBException e) {

e.printStackTrace();
}

}

public static void gegXMLFromObject(JAXBContext context) {
try {
// 下面代码演示将对象转变为xml Object------XML
Address address = new Address("China", "Beijing", "Haidian",
"北京大学", "100871");
Person p = new Person(Calendar.getInstance(), "zhansan", address,
Gender.MALE, "professor");


//指定对应的xml文件
FileOutputStream fw = new FileOutputStream("person.xml");
Marshaller m = context.createMarshaller();

//将对象转换为对应的XML文件
m.marshal(p, fw);

} catch (JAXBException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

public static void getObjectFromXML(JAXBContext context) {

try {
// 下面代码演示将上面生成的xml转换为对象 XML------Object
FileReader fr = new FileReader("person.xml");
Unmarshaller um = context.createUnmarshaller();

Person p2 = (Person) um.unmarshal(fr);
System.out.println("Country:" + p2.getAddress().getCountry());
} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (JAXBException e) {

e.printStackTrace();
}
}
}

@XmlRootElement
// 表示person是一个根元素
class Person {

@XmlAttribute
String name;

@XmlElement
Calendar birthDay;

@XmlElement
Address address;

@XmlElement
Gender gender;

@XmlElement
String job;

public Address getAddress() {
return address;
}

public Person() {
}

public Person(Calendar birthDay, String name, Address address,
Gender gender, String job) {
this.birthDay = birthDay;
this.name = name;
this.address = address;
this.gender = gender;
this.job = job;
}
}

enum Gender {
MALE("male"),
FEMALE("female") ;

private String name = null;
private Gender(String name){
this.name = name;
}
@Override
public String toString(){
return name;
}
}

class Address {
@XmlAttribute
String country;
@XmlElement
String state;
@XmlElement
String city;
@XmlElement
String street;
String zipcode;

public Address() {
}

public Address(String country, String state, String city, String street,
String zipcode) {
this.country = country;
this.state = state;
this.city = city;
this.street = street;
this.zipcode = zipcode;
}

public String getCountry() {
return country;
}
}

测试成功后 ,在工程根目录下生成的person.xml文件如下

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person name="zhansan">
<birthDay>2011-03-15T00:08:51.437+08:00</birthDay>
<address country="China">
<state>Beijing</state>
<city>Haidian</city>
<street>北京大学</street>
</address>
<gender>MALE</gender>
<job>professor</job>
</person>

你可能感兴趣的:(java,xml,javaee,sun)