JAXB--简单应用(一)

来源:互联网 发布:mac webpack 编辑:程序博客网 时间:2024/05/16 02:33

地址:http://suo.iteye.com/blog/1233458


一、简介

1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,即是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。有多种实现。

 

2、JAXB中有什么:包含“xjc”工具和一个“schemagen”工具。 

“xjc”工具可以用来将XML模式或其他类型模式文件(Java 1.6试验性地支持RELAX NG,DTD以及WSDL)转换为Java类。Java类使用javax.xml.bind.annotation包下的Java 标注,例如@XmlRootElement和@XmlElement。XML列表序列表示为java.util.List类型的属性, 通过JAXBContext可以创建Marshallers(将Java对象转换成XML)和Unmarshallers(将XML解析为Java对象)。

另外的“schemagen”工具,能够执行“xjc”的反向操作,通过一组标注的Java类创建一个XML模式。 

 

二、依赖

JDK5以下开发需要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar;

如果是基于JDK6以上版本已经集成JAXB2的JAR,在目录{JDK_HOME}/jre/lib/rt.jar中。

 

三、简单应用

 

  第一步:创建要转化的java对象,该对象需要使用相关注解注释各字段(标注在get方法上)。

Java代码  收藏代码
  1. package step1;  
  2. import javax.xml.bind.annotation.XmlAttribute;  
  3. import javax.xml.bind.annotation.XmlElement;  
  4. import javax.xml.bind.annotation.XmlRootElement;  
  5.   
  6. @XmlRootElement  
  7. public class Customer {  
  8.     String name;  
  9.     int age;  
  10.     int id;  
  11.   
  12.     @XmlElement  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.       
  20.     @XmlElement  
  21.     public int getAge() {  
  22.         return age;  
  23.     }  
  24.     public void setAge(int age) {  
  25.         this.age = age;  
  26.     }  
  27.       
  28.     @XmlAttribute  
  29.     public int getId() {  
  30.         return id;  
  31.     }  
  32.     public void setId(int id) {  
  33.         this.id = id;  
  34.     }  
  35.       
  36.     @Override  
  37.     public String toString() {  
  38.         return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";  
  39.     }  
  40. }  
 

 

第二步:编组(java对象转xml),提供多种编组目的地,以下只介绍两种,一种编组到文件,一种编组到控制台。

 

Java代码  收藏代码
  1. import java.io.File;  
  2. import java.util.HashSet;  
  3. import java.util.Set;  
  4.   
  5. import javax.xml.bind.JAXBContext;  
  6. import javax.xml.bind.JAXBException;  
  7. import javax.xml.bind.Marshaller;  
  8.   
  9. //Marshaller  
  10. public class Object2XmlDemo {  
  11.     public static void main(String[] args) {  
  12.   
  13.         Customer customer = new Customer();  
  14.         customer.setId(100);  
  15.         customer.setName("suo");  
  16.         customer.setAge(29);  
  17.           
  18.         Book book = new Book();  
  19.         book.setId("1");  
  20.         book.setName("哈里波特");  
  21.         book.setPrice(100);  
  22.           
  23.         Book book2 = new Book();  
  24.         book2.setId("2");  
  25.         book2.setName("苹果");  
  26.         book2.setPrice(50);  
  27.           
  28.         Set<Book> bookSet = new HashSet<Book>();  
  29.         bookSet.add(book);  
  30.         bookSet.add(book2);  
  31.           
  32.         customer.setBook(bookSet);  
  33.           
  34.         try {  
  35.             File file = new File("C:\\file1.xml");  
  36.             JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);  
  37.             Marshaller jaxbMarshaller = jaxbContext.createMarshaller();  
  38.             // output pretty printed  
  39.             jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
  40.             jaxbMarshaller.marshal(customer, file);  
  41.             jaxbMarshaller.marshal(customer, System.out);  
  42.         } catch (JAXBException e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.     }  
  46. }  
 

 

生成的xml:

 

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
  2. <customer id="100">  
  3.     <age>29</age>  
  4.     <name>mkyong</name>  
  5. </customer>  
 

 

第三步:解组(xml转java对象),直接从文件解组xml成java对象。

 

 

Java代码  收藏代码
  1. import java.io.File;  
  2. import javax.xml.bind.JAXBContext;  
  3. import javax.xml.bind.JAXBException;  
  4. import javax.xml.bind.Unmarshaller;  
  5.   
  6. //Unmarshaller  
  7. public class Xml2ObjectDemo {  
  8.     public static void main(String[] args) {  
  9.         try {  
  10.             File file = new File("C:\\file.xml");  
  11.             JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);  
  12.             Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  
  13.             Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);  
  14.             System.out.println(customer);  
  15.         } catch (JAXBException e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19. }  
 

注:以上代码在jdk1.6中运行正常,jdk1.5需要其它依赖包。

 

 

参考文档:

http://blog.csdn.net/ruzhefeng/article/details/6560449JAXB2简介及特性使用总结

  http://www.ibm.com/developerworks/cn/xml/x-pracdb1.html实用数据绑定: 涉入现实世界

  http://www.ibm.com/developerworks/cn/xml/x-pracdb3.html实用数据绑定: 深入考察 JAXB,第 2 部分

 

  http://jaxb.java.net/guide/

  http://jaxb.java.net/tutorial/


0 0
原创粉丝点击