随笔:93 文章:11 评论:22 引用:0
My Rhythm
万物皆对象 万事归节奏
首页
发新随笔
发新文章
联系
聚合
管理
JABX简单介绍
主要引至
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
public
class
Xml2ObjectDemo
{
12
public
static
void
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及其他范例学习.
发表于 2013-04-11 12:30
redcoatjk
阅读(5538)
评论(0)
编辑
收藏
所属分类:
J2se
CALENDER
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(22)
balabala(2)
(rss)
Database(9)
(rss)
Hibernate(1)
(rss)
J2se(5)
(rss)
Others_4Data Persistence(2)
(rss)
Spring(1)
(rss)
View_lever(2)
(rss)
随笔档案
(76)
2014年3月 (1)
2013年11月 (1)
2013年4月 (1)
2012年9月 (1)
2012年7月 (3)
2012年6月 (1)
2012年2月 (2)
2011年11月 (2)
2011年10月 (1)
2011年8月 (5)
2011年6月 (1)
2011年5月 (3)
2011年2月 (1)
2010年8月 (2)
2010年7月 (2)
2010年6月 (2)
2010年5月 (3)
2010年3月 (3)
2009年11月 (2)
2009年10月 (2)
2009年9月 (1)
2009年7月 (2)
2009年5月 (12)
2009年4月 (2)
2009年3月 (3)
2009年2月 (6)
2008年12月 (8)
2008年11月 (3)
文章分类
(12)
J2se(3)
(rss)
Spring(8)
(rss)
Stu-notes(1)
(rss)
文章档案
(17)
2013年4月 (2)
2010年8月 (1)
2009年2月 (12)
2008年10月 (2)
搜索
积分与排名
积分 - 249910
排名 - 227
最新评论
1. re: Hibernate session 获取方式浅谈[未登录]
总结的到位,很值得学习!
--111
2. re: [转]java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
ddd
--lukes
3. 将字符串-uadmin-padmin1208@192.168.0.222:/home/admin/zrl/java/rmi/activation分割成admin,admin1208,192.168.0.222,/home/admin/zrl/java/rmi/activation[未登录]
请帮忙
--美美
4. re: [转]Statement和PreparedStatement批量更新
对我的帮助真是太大了
--请问
5. re: [转]JDBC中Statement与PreparedStatement的区别
非常好的总结!顶
--naomi
评论排行榜
1. Hibernate session 获取方式浅谈(3)
2. [转]JDBC中Statement与PreparedStatement的区别(2)
3. [转]java截取字符串,截串,substring和split,分割字母和数字,正则缝隙(2)
4. [转]程序员职业规划(2)
5. [转]JDK5新特性汇总(与1.4对照)(2)
Powered By:
博客园
模板提供
:
沪江博客