首页 > 其他 > 详细

JABX简单介绍

时间:2014-02-27 20:47:38      阅读:640      评论:0      收藏:0      [点我收藏+]

主要引至http://suo.iteye.com/blog/1233458

一、简介

1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。是一种xml与object映射绑定技术标准,既然是标准就可以有不同实现.
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中。

三、标注相关
注意:

1、注解可在属性定义上,也可在getter()方法上,最好在方法上注解,修饰属性用private,方法是public,属性注解可能会出现问题(如:JAXB “Class has two properties of the same name”)。

2、对象中的属性可以不全部映射到xml中,xml中出现的元素也不一定与映射的实体一一对应,映射的双方可以灵活对应

3、类上注解后,类中元素也默认按默认名称映射,但是对象属性名称与xml节点元素名称不一致时或者不需要显示在xml节点中时,则必须做对应的映射配置。

4、注解实例:映射一般分分:类名与xml根节点的映射、普通属性与xml节点的映射、集合与xml中包含子元素的节点的映射。


示例代码:
step1:

Customer.java

 1bubuko.com,布布扣package step1;
 2bubuko.com,布布扣import javax.xml.bind.annotation.XmlAttribute;
 3bubuko.com,布布扣import javax.xml.bind.annotation.XmlElement;
 4bubuko.com,布布扣import javax.xml.bind.annotation.XmlRootElement;
 5bubuko.com,布布扣
 6bubuko.com,布布扣/*@XmlRootElement 注释可以与以下程序元素一起使用: 
 7bubuko.com,布布扣顶层类 
 8bubuko.com,布布扣枚举类型 
 9bubuko.com,布布扣当使用 @XmlRootElement 注释对顶层类或枚举类型进行注释时,
10bubuko.com,布布扣类型值被表示为 XML 文档中的 XML 元素。
11bubuko.com,布布扣*/

12bubuko.com,布布扣@XmlRootElement
13bubuko.com,布布扣public class Customer {
14bubuko.com,布布扣    String name;
15bubuko.com,布布扣    int age;
16bubuko.com,布布扣    int id;
17bubuko.com,布布扣
18bubuko.com,布布扣    @XmlElement  //该注释用于将JavaBean 属性映射到派生于属性名称的 XML 元素
19bubuko.com,布布扣    public String getName() {
20bubuko.com,布布扣        return name;
21bubuko.com,布布扣    }

22bubuko.com,布布扣    public void setName(String name) {
23bubuko.com,布布扣        this.name = name;
24bubuko.com,布布扣    }

25bubuko.com,布布扣    
26bubuko.com,布布扣    @XmlElement
27bubuko.com,布布扣    public int getAge() {
28bubuko.com,布布扣        return age;
29bubuko.com,布布扣    }

30bubuko.com,布布扣    public void setAge(int age) {
31bubuko.com,布布扣        this.age = age;
32bubuko.com,布布扣    }

33bubuko.com,布布扣    
34bubuko.com,布布扣    @XmlAttribute  //将JavaBean 属性映射到 XML 属性。
35bubuko.com,布布扣    public int getId() {
36bubuko.com,布布扣        return id;
37bubuko.com,布布扣    }

38bubuko.com,布布扣    public void setId(int id) {
39bubuko.com,布布扣        this.id = id;
40bubuko.com,布布扣    }

41bubuko.com,布布扣    
42bubuko.com,布布扣    @Override
43bubuko.com,布布扣    public String toString() {
44bubuko.com,布布扣        return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
45bubuko.com,布布扣    }

46bubuko.com,布布扣
47bubuko.com,布布扣    
48bubuko.com,布布扣    
49bubuko.com,布布扣}

50bubuko.com,布布扣


Object2XmlDemo.java

 1bubuko.com,布布扣package step1;
 2bubuko.com,布布扣
 3bubuko.com,布布扣import java.io.File;
 4bubuko.com,布布扣import javax.xml.bind.JAXBContext;
 5bubuko.com,布布扣import javax.xml.bind.JAXBException;
 6bubuko.com,布布扣import javax.xml.bind.Marshaller;
 7bubuko.com,布布扣
 8bubuko.com,布布扣/**
 9bubuko.com,布布扣 *编组 Marshal(java 2 xml)
10bubuko.com,布布扣 */

11bubuko.com,布布扣public class Object2XmlDemo {
12bubuko.com,布布扣    public static void main(String[] args) {
13bubuko.com,布布扣
14bubuko.com,布布扣        Customer customer = new Customer();
15bubuko.com,布布扣        customer.setId(100);
16bubuko.com,布布扣        customer.setName("mkyong");
17bubuko.com,布布扣        customer.setAge(29);
18bubuko.com,布布扣        try {
19bubuko.com,布布扣            File file = new File("H:\\file3.xml");
20bubuko.com,布布扣            //获得JAXBContext类的新实例
21bubuko.com,布布扣            JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); 
22bubuko.com,布布扣            //创建一个可以用来将 java 内容树转换为 XML 数据的 Marshaller 对象。
23bubuko.com,布布扣            //(Marshaller 类负责管理将 Java 内容树序列化回 XML 数据的过程)
24bubuko.com,布布扣            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
25bubuko.com,布布扣            // output pretty printed
26bubuko.com,布布扣            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //设置XML自动换行
27bubuko.com,布布扣            jaxbMarshaller.marshal(customer, file);//将以customer为根的内容树 编组到输出流中
28bubuko.com,布布扣            jaxbMarshaller.marshal(customer, System.out);
29bubuko.com,布布扣        }
  catch (JAXBException e) {
30bubuko.com,布布扣            e.printStackTrace();
31bubuko.com,布布扣        }

32bubuko.com,布布扣    }

33bubuko.com,布布扣}

34bubuko.com,布布扣

执行后生成对应的xml文件
后台打印

1bubuko.com,布布扣<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2bubuko.com,布布扣<customer id="100">
3bubuko.com,布布扣    <age>29</age>
4bubuko.com,布布扣    <name>mkyong</name>
5bubuko.com,布布扣</customer>
6bubuko.com,布布扣


Xml2ObjectDemo.java

1bubuko.com,布布扣package step1;
2bubuko.com,布布扣
3bubuko.com,布布扣import java.io.File;
4bubuko.com,布布扣import javax.xml.bind.JAXBContext;
5bubuko.com,布布扣import javax.xml.bind.JAXBException;
6bubuko.com,布布扣import javax.xml.bind.Unmarshaller;
7bubuko.com,布布扣
8bubuko.com,布布扣/**
9bubuko.com,布布扣 *解组 Unmarshaller(xml 2 java)
10bubuko.com,布布扣 */

11bubuko.com,布布扣publicclass Xml2ObjectDemo {
12bubuko.com,布布扣 publicstaticvoid main(String[] args) {
13bubuko.com,布布扣 try{
14bubuko.com,布布扣 File file =new File("H:\\file.xml");
15bubuko.com,布布扣 JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
16bubuko.com,布布扣 //创建一个可以用来将 XML 数据转换为 java 内容树的 Unmarshaller 对象。
17bubuko.com,布布扣 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
18bubuko.com,布布扣 //从指定的文件解组 XML 数据并返回得到的内容树。
19bubuko.com,布布扣 Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
20bubuko.com,布布扣 System.out.println(customer);
21bubuko.com,布布扣 }
catch (JAXBException e) {
22bubuko.com,布布扣 e.printStackTrace();
23bubuko.com,布布扣 }

24bubuko.com,布布扣 }

25bubuko.com,布布扣}

26bubuko.com,布布扣


执行后,打印
Customer [id=100,name=mkyong,age=29]

其他应用可结合API及其他范例学习.

JABX简单介绍,布布扣,bubuko.com

JABX简单介绍

原文:http://www.cnblogs.com/redcoatjk/p/3562354.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!