快速业务通道

数据绑定之JAXB - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

数据绑定之JAXB

时间:2011-06-11 BlogJava Chris.Cui

JAXB(Java Architecture for XML Binding)提供了一个快速而方便的方式 绑定XML Schemas和java,使java程序员能够很方便的在java应用程序中处理XML 数据。JAXB提供了将XML文档解组为java内容树的方法,以及将java内容树重新 编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方 式。

这里有几个重要的定义:

编组(Marshalling)是把内存中的数据转化到存储媒介上的过程。因此在 Java 和 XML 环境中,编组就是把一些 Java 对象转化成一个(或多个) XML 文档。在数据库环境中,则是把 Java 表示的数据存入数据库。显然,编组的秘 密在于把 Java 实例中的面向对象结构转化成适用于 XML 的 扁平结构,或者 RDBMS 中的关系结构(使用 Java 技术转换到 OODBMS 实际上很简单)。

解组(Unmarshalling) 是把数据从存储媒介转换到内存中的过程--正好与 编组相反。因此需要把 XML 文档解组到 Java VM 中。这里的复杂性不是在扁平 数据中,因为这不是必需的,而在于从正确的数据到正确的 Java 代码变量的映 射。如果映射是错误的,就不可能正确地访问数据。当然,如果再尝试重新编组 还会造成更大的问题,并且问题传播得很快。

往返(Round-tripping)可能是最重要也最容易误解的数据绑定术语。往返 用于描述从存储媒介到内存然后回到存储媒介的完整循 环。在 XML 和 Java 技 术环境中,这就意味着从 XML 文档到 Java 实例变量,然后再回到 XML 文档。 正确的往返要求,如果中间没有修改数据,XML 输入和 XML 输出应该是等同的 。

生成Java文件:

1.可以通过JAXB的bin中的xjc执行生成操作,命令如下:

xjc –p com.chris.jaxb test.xsd –d gen-src

-p <pkg>:指定生成java文件的package

-d <dir>:指定生成java文件的目录

其中-d所指定的目录必须是已经存在的,否则会报:“cowardly refuses to write to a non-existent directory "gen- src"”。

2.使用ant生成

在ant文件中定义一个xjc的task,通过执行该task生成java文件,ant文件的 定义:

<property name="jaxb.home" value="./lib" />   <path id="classpath">   <pathelement path="src" />   <fileset dir="${jaxb.home}" includes="*.jar" /> </path> <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">   <classpath refid="classpath" /> </taskdef> <target name="generate" description="generate Java source files">   <echo message="generate java from schema..." />   <mkdir dir="gen-src" />   <xjc schema="test.xsd" package="com.chris.jaxb" destdir="gen-src">     <produces dir="gen-src/com.chris.jaxb " includes="**/*.java" />   </xjc> </target>

数据绑定之JAXB(2)

时间:2011-06-11 BlogJava Chris.Cui

编组操作:

利用上面生成的java文件执行编组操作。

JAXBContext context = JAXBContext.newInstance ("com.chris.jaxb"); //create java content tree PurchaseOrderType po = new PurchaseOrderType(); ……….. // create an element for marshalling JAXBElement<PurchaseOrderType> poElement =(new ObjectFacory ()).createPurchaseOrder(po); // create a Marshaller and marshal to System.out Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); m.marshal(poElement, System.out);

解组操作:

通过xml文件执行解组操作。

JAXBContext context = JAXBContext.newInstance ("com.chris.jaxb"); Unmarshaller um = context.createUnmarshaller(); SchemaFactory sf = SchemaFactory.newInstance (XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema sc = sf.newSchema(Main.class.getResource ("test.xsd")); um.setSchema(sc); JAXBElement<?> poEle = (JAXBElement<?>) um.unmarshal(new FileInputStream("po.xml")); PurchaseOrderType pot = (PurchaseOrderType) poElement.getValue ();

JAXB常用操作基本就这些,经过绑定xml和java对象可以很方便的执行一些 xml操作,现在的一些webservice框架也都采用了JAXB作为绑定方式,所以JAXB 的基本原理还是很有必要了解下的。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号