主要引至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
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
顶层类
8
枚举类型
9
当使用 @XmlRootElement 注释对顶层类或枚举类型进行注释时,
10
类型值被表示为 XML 文档中的 XML 元素。
11
*/
12
@XmlRootElement
13
public class Customer
{
14
String name;
15
int age;
16
int id;
17
18
@XmlElement //该注释用于将JavaBean 属性映射到派生于属性名称的 XML 元素
19
public String getName()
{
20
return name;
21
}
22
public void setName(String name)
{
23
this.name = name;
24
}
25
26
@XmlElement
27
public int getAge()
{
28
return age;
29
}
30
public void setAge(int age)
{
31
this.age = age;
32
}
33
34
@XmlAttribute //将JavaBean 属性映射到 XML 属性。
35
public int getId()
{
36
return id;
37
}
38
public void setId(int id)
{
39
this.id = id;
40
}
41
42
@Override
43
public String toString()
{
44
return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
45
}
46
47
48
49
}
50
Object2XmlDemo.java
1
package step1;
2
3
import java.io.File;
4
import javax.xml.bind.JAXBContext;
5
import javax.xml.bind.JAXBException;
6
import javax.xml.bind.Marshaller;
7
8
/** *//**
9
*编组 Marshal(java 2 xml)
10
*/
11
public class Object2XmlDemo
{
12
public static void main(String[] args)
{
13
14
Customer customer = new Customer();
15
customer.setId(100);
16
customer.setName("mkyong");
17
customer.setAge(29);
18
try
{
19
File file = new File("H:\\file3.xml");
20
//获得JAXBContext类的新实例
21
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
22
//创建一个可以用来将 java 内容树转换为 XML 数据的 Marshaller 对象。
23
//(Marshaller 类负责管理将 Java 内容树序列化回 XML 数据的过程)
24
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
25
// output pretty printed
26
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //设置XML自动换行
27
jaxbMarshaller.marshal(customer, file);//将以customer为根的内容树 编组到输出流中
28
jaxbMarshaller.marshal(customer, System.out);
29
} catch (JAXBException e)
{
30
e.printStackTrace();
31
}
32
}
33
}
34
执行后生成对应的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>
6
Xml2ObjectDemo.java
1
package
step1;
2
3
import
java.io.File;
4
import
javax.xml.bind.JAXBContext;
5
import
javax.xml.bind.JAXBException;
6
import
javax.xml.bind.Unmarshaller;
7
8
/** *//**
9
*解组 Unmarshaller(xml 2 java)
10
*/
11
publicclass Xml2ObjectDemo
{
12
publicstaticvoid
main(String[] args)
{
13
try
{
14
File file =new File("H:\\file.xml");
15
JAXBContext jaxbContext =
JAXBContext.newInstance(Customer.class);
16
//创建一个可以用来将
XML 数据转换为 java 内容树的 Unmarshaller 对象。
17
Unmarshaller jaxbUnmarshaller =
jaxbContext.createUnmarshaller();
18
//从指定的文件解组
XML 数据并返回得到的内容树。
19
Customer customer = (Customer)
jaxbUnmarshaller.unmarshal(file);
20
System.out.println(customer);
21
}catch (JAXBException e)
{
22
e.printStackTrace();
23
}
24
}
25
}
26
执行后,打印
Customer
[id=100,name=mkyong,age=29]
其他应用可结合API及其他范例学习.
JABX简单介绍,布布扣,bubuko.com
JABX简单介绍
原文:http://www.cnblogs.com/redcoatjk/p/3562354.html