API 将 XML 数据绑定到 Java 对象
2008-01-05 19:22:14 来源:WEB开发网核心提示:在Web服务、业务流程治理(BPM)、企业应用集成(EAI)及其他众多行动计划中,xml已经成为整个企业的一项要害技术,API 将 XML 数据绑定到 Java 对象,因此java开发人员可以预料到XML在开发性项目中将发挥越来越重要的作用,幸好JAX(用于XML的Java APIs)中API的作用域在不断扩大,&qu
在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说。
更多精彩
赞助商链接