分享
 
 
 

API 将 XML 数据绑定到 Java 对象

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

在Web服务、业务流程治理(BPM)、企业应用集成(EAI)及其他众多行动计划中,XML已经成为整个企业的一项要害技术。因此Java开发人员可以预料到XML在开发性项目中将发挥越来越重要的作用。幸好JAX(用于XML的Java APIs)中API的作用域在不断扩大,能够支持XML数据的多种处理方式。

例如,比较成熟的用于XML的Java APIs之一JAXP(用于处理XML的Java API)为开发人员提供了处理XML数据的灵活性,他们可以插入自己喜欢的文档对象模型(DOM)或用于XML的简单API(SAX)解析器。Oracle集团产品经理、XML倡导者Mark Scardina介绍说,"从开发人员的角度看,JAXP的优点之一是它被设计为'与解析器无关'的,这样,处理XML就不依靠于任何特定厂商的解析器了。" 利用JAXP,Java程序员能够选择他们的解析引擎方法(DOM或SAX),而且知道XML文档将被进行适当的解析和处理(请参阅《高效地解析XML》,了解Java应用程序的DOM、SAX和用于XML的流式API[StAX]等解析技术的更多信息)。

不过,通过编写Java来使用JAXP要求应用程序开发人员非常熟悉XML的知识。使用JAXP的开发人员必须编写代码来处理所有解析和处理过程;例如,根据需要创建DOM解析器实例、使用该解析器来分析XML文档、构建DOM树、在DOM树中访问节点和数据并在应用程序代码中处理这些数据。与SAX解析器一起使用JAXP的过程包括编写用于注册内容处理器的代码,编写用于处理解析器处理XML文档时发生的事件的回调代码,等等。简而言之,处理XML数据所需的编程逻辑对Java程序员可能并不直观。

这时候JAX规范中相对较新的成员JAXB(用于XML绑定的Java体系结构)就能发挥作用了。JAXB是与JAXP完全不同的方法,"JAXB通过被看作'代理对象'的东西来处理XML文档--它使开发人员不必直接关注XML结构,便可创建或访问XML数据,"Scardina说。开发人员不用编写代码来处理DOM树,也不用编写回调方法来处理SAX事件,而只需编写处理Java对象的代码。

当用于适当类型的应用程序中时,JAXB可以产生更为巨大的生产力,Java开发人员也更轻易地使用它。"它是一种基础架构,使开发人员能够享受到XML带来的好处,而不必了解具体细节,"Scardina说。 考虑JAXB的另一个原因是其作用不亚于将Java对象映射到数据库结构的与对象-关系型框架的作用。例如,"就像Oracle TopLink产品的‘容器’治理数据库并将数据库显示为对象集一样,JAXB也把XML文档显示为对象集,"Scardina说。

简而言之,JAXB为开发人员提供了一种用于创建XML文档与Java对象之间的双向映射的面向对象的、基于Java的方法。

B代表绑定

从高层次看,JAXB是一个由开发工具和运行时间引擎组成框架。包括Oracle在内的实施者都使用带有Java Web服务开发人员工具包(JWSDP)的JAXB接口和类库来开发自己的JAXB兼容工具,以支持几种核心开发和运行时间活动:

绑定就是从XML模式生成Java接口和类、并在运行时使用这些对象符合逻辑地将XML文档数据"绑"在相应的Java类对象上的过程。(一个称为绑定编译器的JAXB兼容实用程序是一切JAXB实施的核心组件;绑定编译器是用于生成接口和类的工具。)

反编排就是创建(在内存中创建)代表XML文档内容的对象的实例的过程;从XML文档反编排数据的结果就是把这些数据封装为一个Java对象。

编排是反编排相反;也就是说,Java对象中的数据被封装为XML内容,以便将其输出。

使用JAXB的第一步是获得与XML文档类型相关联的XML模式文件,该类型必须是Java应用支持的。XML模式是用于定义XML文档及其数据类型的XML语言,也是XML技术赋予XML数据意义及前后关系的要害。一个XML模式文件基本上就是一个用XML模式语言写成的XML文件,它定义了特定XML文档类型所答应的简单的和复杂的数据类型以及这些数据类型之间的关系(也就是说这些类型是有层次结构的)。一般来说,任何发送或接收XML文档的应用程序都需要具备一个与XML文档相关联的XML模式,以便在XML文档内容中顺利传达(由程序)数据含义。

不过,假如开发人员已经有了相应的XML模式文件,他只需将它与编译器生成程序联合使用,便可创建用于将XML文档数据绑在Java对象上的Java源文件。如何调用或执行绑定编译器要依具体实施过程而定;例如,Oracle的绑定编译器是作为一个Java可执行文件(oracle.xml.jaxb)来调用的,它将XML模式文件名(filename.xsd)作为一个参数来传递,并为输出文件提供一个目录路径名。

生成的类(Java源代码文件声明为接口程序)包含目标文件filename.xsd 中定义的每一个元素的setter和getter方法;生成的类依次执行这些接口程序。"这些Java类提供了一组get方法,它使我能够简单地从XML文档中我所感爱好的那些部分中获取与其类型相绑定的值,"Scardina说。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有