< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />
一、前言。
最近正在做一个项目,根据需求计划需要一种 Object <--> XML的工具,而JAXB就非常符合需求,于是以下是近天来的研究心得。
二、JAXB技术介绍
1. 什么是JAXB?
Java Architecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB 隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。
2. JAXB的体系结构
JAXB的体系结构和应用过程如图所示,一般来说包含以下几个步骤:
1) 根据你的应用程序所要操作的XML数据格式,撰写相应的XML Schema,有关XML Schema的知识,请参阅“参考资料”
2) 使用JAXB 所带的编译工具(Binding Compiler),将这个XML Schema文件作为输入,产生一系列相关的Java Class和Interface
3) 在使用JAXB编译工具的时候,可以有选择性的提供一个配置文件(图的虚线部分),来控制JAXB编译工具的一些高级属性。
4) 这些Java Class和Interface是你的应用程序操纵XML数据的主要接口和方法。
5) 通过JAXB对XML文档进行的操作主要包括:将符合XML Schema规定的XML文档解析生成一组相应的Java对象;对这些对象进行操作(修改、增加和删除对象的属性等等);然后将这些对象的内容保存到这个XML文档中。
三、安装介绍
1. 开发环境准备
1) Java 1.5 JDK/JRE
(*) 你必须安装java运行环境
2) Eclipse SDK 3.2.x
Eclipse推荐下载的版本是< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />3.2.1 。
3) My Eclipse 5.x (推荐使用)
能为你的XML编写提供帮助,与Eclipse SDK 3.2.x配套使用。
2. 开始安装:
1) 需要下载的软件
A. 下载开发工具包:Java Web Services Developer Pack 2.0
JAXB2.0的正式版本的一个实现(大家一定要记住,JAXB只是一个标准,Sun公司提供的此工具包只能说是这个标准的一个实现)已经发布了。由于XML在Web Services中的大量应用,所以,JAXB2.0作为Web Services 开发包的一部分,可以从SUN的官方网站下载。其中jaxb包含在jaxb子目录下。
B. XML文档解析:xerces-2_9_0
Xerces是由Apache组织所推动的一项XML文档解析开源项目,jwsdp提供的xerces似乎有Bug,建议下载最新版本,下载请到Apache的官方网站下载。
2) 环境变量配置
要使用JAXB,在下载JAXB开发包以后,还要设置一些环境变量,主要是设置classpath的路径,以提供JAXB包所带的库文件的位置。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />
JAVA_HOME=D:\java\jdk1.5.0 JWSDP_HOME=D:\Sun\jwsdp-2.0 JAXB_HOME=%JWSDP_HOME%\jaxb JAXB_LIBS=%JAXB_HOME%\lib JAXP_LIBS=%JWSDP_HOME%\jaxp\lib JWSDP_LIBS=%JWSDP_HOME%\jwsdp-shared\lib PATH=%JAXB_HOME%\bin;%JWSDP_HOME%\jwsdp-shared\bin;%PATH% CLASSPATH= %JWSDP_HOME%\jaxb\lib\jaxb-api.jar; %JWSDP_HOME%\jaxb\lib\jaxb-impl.jar; %JWSDP_HOME%\jaxb\lib\jaxb-xjc.jar; %JWSDP_HOME%\jwsdp-shared\lib\activation.jar; %JWSDP_HOME%\sjsxp\lib\jsr173_api.jar; %JWSDP_HOME%\sjsxp\lib\sjsxp.jar; |
< xmlnamespace prefix ="w" ns ="urn:schemas-microsoft-com:office:word" />
注:注意自己原来的CLASSPATH设置,不要覆盖了。
3) Eclipse 工程构建路径配置:
注:如图所示的JAR都添加到工程的构建路径中。
四、实例分析
1. 确定XML Schema
要确定XML Schema意味着你要确定一个规则,来约束你的XML文档,使所有符合这个规则的XML文档看上去都很类似。例如,在这个例子中,我们希望XML文档的格式如下:
<?xml version="1.0" encoding="UTF-8"?> <users> <user> <name>小李</name> <sex>男</sex> <age>24</age> </user> <user> <name>小丽</name> <sex>女</sex> <age>18</age> </user> <user> <name>小王</name> <sex>男</sex> <age>22</age> </user> </users> |
XML文档所包含的意思:一个用户组 <users> 里面有多个 <user>,而每个 <user> 又包括<name><sex><age>这些信息,而要在应用程序中想要操纵此XML文档,还要根据这个XML文档,产生一个Schema文档。
<?xml version="1.0" encoding="UTF-8"?> <schema targetNamespace="us" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="us">
<simpleType name="Sex"> <restriction base="string"> <enumeration value="男"></enumeration> <enumeration value="女"></enumeration> </restriction> </simpleType>
<complexType name="User"> <sequence> <element name="name" type="string"></element> <element name="age" type="int"></element> <element name="sex" type="tns:Sex"></element> </sequence> </complexType>
<element name="user" type="tns:User"></element>
<complexType name="Users"> <sequence> <element ref="tns:user" minOccurs="1" maxOccurs="unbounded"> </element> </sequence> </complexType>
<element name="users" type="tns:Users"></element> </schema>
|
Schema和XML文档之间的关系,就好像Java中类与实例的关系。每个符合 schema的XML文档,都是这个Schema的一个实例;而Schema本身是一个模板,它规定了XML文档应该是什么样的。这个Schema描述了对xml文档的约束:
1) 它规定了<users>这个节点内可以包含一个或多个<user>的节点。
2) 每个<user>节点包括名字、年龄、性别这几个信息
3) 规定了<sex>属性由“男”和“女”组成
2. 使用编译工具生成相应的Java类
有了Schema文件以后,我们就可以利用JAXB工具包,让它来替我们生成操纵符合这个Schema规定的所有XML实例文档的所有Java源代码。
如果已经设置好了环境变量的话(请参考“设置环境变量”),那么只需要运行JAXB包所带的“xjc”运行程序,例如
%JAXB_HOME%\bin\xjc.bat userSchema.xsd -d src –p primer.userinfo
其中:
A. %JAXB_HOME%是你安装JAXB工具包的位置,通常在jwsdp工具包的子目录下。
B. userSchema.xsd 是Schema的文件名,一般以xsd作为文件名的后缀。
C. -d 的选项,是指定系统生成的Java源代码所放置的目录,示例中为:src
D. -p 的选项,是指定系统生成的Java源代码所在的Java Package的名称,示例中为:primer.userinfo
E. 还有更多的选项,请参考JAXB的相关文档。
如果运行成功的话,就会在你"-d"选项指定的目录下产生一些java代码文件:
3. 在应用程序中使用这些代码
下面我们分析一下如何在我们的应用程序中使用JAXB工具包替我们生成的代码。
1) JAXBContext 提供了一个入口,通过这个入口可以管理必要的XML/Java绑定信息。客户端应用程序通过newInstance(contextPath)方法得到该类的新实例。contextPath 参数包含一个或多个Java包名,这些Java包就是了JAXB编译器所产生的接口代码所在的Java包。该参数值初始化JAXBContext 对象,使得它能够管理JAXB编译器产生的接口。
JAXBContext jc = JAXBContext.newInstance("primer.userinfo");
|
2) 而通过ObjectFactory,可以直接生成根节点java对象Users 和子对象User。
User userA = objFactory.createUser(); |
Users users = objFactory.createUsers(); |
3) 对于Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口(Marshaller负责从Java对象到XML文档的转换,Unmarshaller负责从XML文档到Java对象的转换)。
JAXBElement usersE = objFactory.createUsers(users); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal( usersE,new FileOutputStream("src/test.xml")); |
Marshaller能把Users 对象转换成XML文件
JAXBElement usersE = (JAXBElement)jc.createUnmarshaller().unmarshal(new File("src/test.xml")); Users users = (Users)usersE.getValue(); |
Unmarshaller能把 XML文件转换成Users对象
4. 实例代码
public void javaToXml() { try { JAXBContext jc = JAXBContext.newInstance("primer.userinfo"); //参数为JAXB生成的java文件所在包名 ObjectFactory objFactory = new ObjectFactory(); //生成对象工厂
User userA = objFactory.createUser(); userA.setName("西瓜"); userA.setAge(26); userA.setSex(Sex.男);
User userB = objFactory.createUser(); userB.setName("冬瓜"); userB.setAge(19); userB.setSex(Sex.女);
User userC = objFactory.createUser(); userC.setName("南瓜"); userC.setAge(22); userC.setSex(Sex.男);
Users users = objFactory.createUsers(); List<User> list = users.getUser(); list.add(userA); list.add(userB); list.add(userC);
JAXBElement usersE = objFactory.createUsers(users); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal( usersE,new FileOutputStream("src/test.xml")); } catch (Exception e) { e.printStackTrace(); } } |
相关推荐
JAXB2,全称为Java Architecture for XML Binding 2,是Java平台上的一个标准技术,用于在XML和Java对象之间进行绑定。它允许开发者通过简单的API将XML文档转换为Java对象,反之亦然,大大简化了XML数据处理。JAXB2...
JAXB(Java Architecture for XML Binding)是Java平台上的一个标准,它提供了一种在Java对象和XML文档之间进行映射的机制。Eclipse作为一款强大的Java集成开发环境,为开发者提供了丰富的插件支持,其中包括JAXB的...
标题中的"jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0"是JAXB的不同组件版本号,它们在处理XML到Java对象之间的转换时起到关键作用。在描述中提到的“Maven项目中缺少jaxb-api的异常报错”,通常指的是在运行...
`jaxb-api-2.1.jar` 和 `jaxb-impl-2.1.8.jar` 是Java应用程序中用于XML绑定(Java Architecture for XML Binding,简称JAXB)的重要库文件。JAXB是Java SE和Java EE平台的标准部分,它提供了一种将XML文档与Java...
标题提到的"jaxb-api.jar.jaxws-api.zip_ jaxb-api.jar_cxf_jax-ws.jar_jaxb-api",是针对这个问题提供的一组支持包。 **JAXB(Java Architecture for XML Binding)** 是Java平台的一个标准,它允许开发者将XML文...
**JAXB(Java Architecture for XML Binding)** 是Java平台中用于XML到Java对象绑定的API,它是Java EE和Java SE标准的一部分,允许开发者在Java应用程序中方便地将XML数据转换为Java对象,反之亦然。这个过程极大...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML数据绑定的标准库,它使得Java对象和XML文档之间可以进行无缝转换。在给定的压缩包文件中,包含了一些核心的JAXB组件以及相关的依赖库,如`jaxb-impl....
JAXB (Java Architecture for XML Binding) 是 Java 中用于对象到XML以及XML到对象转换的API。它使得开发者能够轻松地将Java对象模型映射到XML文档,并反之亦然。在给定的例子中,我们将深入理解如何使用JAXB注解来...
在Android平台上进行开发时,有时候我们需要处理XML数据,这时候JAXB(Java Architecture for XML Binding)就显得非常有用。JAXB是Java SDK中的一个标准API,它允许开发者将XML文档与Java对象之间进行自动的双向...
当我们需要处理XML文件,比如从XML中提取数据时,JAXB(Java Architecture for XML Binding)是一个强大的工具。本教程将详细解释如何在Idea中利用JAXB来读取XML文件中的数据。 JAXB是Java标准API,它提供了将Java...
Java Architecture for XML Binding (JAXB) 是Java平台中用于XML到Java对象绑定的标准技术,它允许开发者在Java程序中直接操作XML数据,而无需编写大量的XML解析和序列化代码。JAXB 2.3.0是该技术的一个版本,包含了...
**jaxb-impl.jar包详解** `jaxb-impl.jar`是Java Architecture for XML Binding (JAXB)的一个实现包,它是Java平台标准版(Java SE)和企业版(Java EE)的一部分,主要用于XML到Java对象的绑定以及反之,使得...
这些文件是Java编程环境中常用的库文件,主要用于XML绑定(Java Architecture for XML Binding,JAXB)和JavaBeans Activation Framework(JAF)。在Java应用程序开发中,尤其是处理XML数据时,这些库扮演着至关重要...
在Java开发中,JAXB(Java Architecture for XML Binding)是一个用于将XML文档和Java对象之间进行绑定的技术。在处理XML文件时,特别是涉及到序列化和反序列化时,可能会遇到字符编码问题,即所谓的“乱码”。这个...
赠送jar包:jackson-module-jaxb-annotations-2.7.8.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.7.8-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.7.8-sources.jar; 赠送Maven依赖...
JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,用于将XML文档与Java对象之间进行绑定,实现XML数据的解析和序列化。在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) ...
赠送jar包:jaxb-runtime-2.3.5.jar; 赠送原API文档:jaxb-runtime-2.3.5-javadoc.jar; 赠送源代码:jaxb-runtime-2.3.5-sources.jar; 赠送Maven依赖信息文件:jaxb-runtime-2.3.5.pom; 包含翻译后的API文档:...
`jaxb-api`和`jaxb-impl`是JAXB框架的核心组成部分。这两个JAR文件在处理XML到Java对象的绑定过程中扮演着关键角色。 1. **jaxb-api.jar**: 这个库包含了JAXB API,即Java接口和抽象类,定义了JAXB的工作方式。它...
**Java Architecture for XML Binding (JAXB)** 是Java平台上的一个标准技术,用于在XML文档和Java对象之间进行数据绑定。它允许开发者将XML文档转换为Java对象,反之亦然,从而简化了XML处理。JAXB是Java SE和Java ...
赠送jar包:jaxb-runtime-2.3.5.jar; 赠送原API文档:jaxb-runtime-2.3.5-javadoc.jar; 赠送源代码:jaxb-runtime-2.3.5-sources.jar; 赠送Maven依赖信息文件:jaxb-runtime-2.3.5.pom; 包含翻译后的API文档:...