快速业务通道

Java SE 6新特性: XML API与Web服务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ParserFactory.newInstance(); System.out.println(factory.getClass()); // Parse the input SAXParser saxParser = factory.newSAXParser(); System.out.println(saxParser.getClass()); Output: class org.apache.xerces.jaxp.SAXParserFactoryImpl Output: class org.apache.xerces.jaxp.SAXParserImpl

本例中 saxParser 的类型被声明为 SAXParser,但实际类型如 清单 1 中显示,为 org.apache.xerces.jaxp.SAXParserImpl。实际类型是由 SAXParserFactory 的静态方法 newInstance 查找配置文件,并实例化得到的。图 2 展示了 Java SE 6 中 XML 包的 Service Provider 的交互细节。请参考 Apache Harmony 项目的具体代码(参见 参考资源)。

图 2. XML 包的 Service Provider 结构

Java SE 6新特性: XML API与Web服务 - 编程入门网

提供了扩展性,更多的服务可以加入开发平台;为了便于不同的开发商开发各自的产品,Java SE 平台同时为服务提供商设计了统一的接口。只要提供者满足这些接口定义(比如继承某个接口,或者扩展抽象类),服务提供者就能被添加到 Java SE 平台中来。以 图 2 给出的结构为例,服务提供者需要继承 SAXParserFactory、SAXParser 等抽象类,同时将类 VendorSaxParserFactoryImpl 的名字注册到 jaxp.properties 文件中,就可以被使用了。

兼顾了灵活性和效率。通过这种方式,一方面组件提供者和应用开发者开发时绑定到一个约定的接口上,另一方面载入具体哪个组件则是在运行时动态决定的。不同于 Web 服务等技术的完全动态绑定(通过运行时解析 WSDL 文件来决定调用的类型),也不是完全的编码时绑定,这种折衷的方式提供了松耦合、高扩展性,同时也保证了可接受的效率。

XML 框架介绍

Java SE 6 平台提供的 XML 处理主要包括两个功能:XML 处理(JAXP,Java Architecture XML Processing)和 XML 绑定(JAXB,Java Architecture XML Binding)。JAXP 包括 SAX 框架 —— 遍历元素,做出处理;DOM 框架 —— 构造 XML 文件的树形表示;StAX 框架 —— 拖拽方式的解析;XSLT 框架 —— 将 XML 数据转换成其他格式。JAXB 则是负责将 XML 文件和 Java 对象绑定,在新版 JDK 中,被大量的使用在 Web 服务技术中。

SAX 框架(Simple API for XML)

SAX 全称 Simple API for XML,该框架使用了事件处理机制来处理 XML 文件,图 3 展示了这个过程。

图 3. SAX 框架处理 XML 文件的流程

Java SE 6新特性: XML API与Web服务 - 编程入门网

Java SE 6新特性: XML API与Web服务(3)

时间:2011-02-15 IBM 沈羽

SAXParser 将 XML 文件当作流读入。当 parser 遇到 Element_A,就会产生一个事件,然后将该事件发送给处理类。SAX 框架的一大特点是对于节点的处理是上下文无关的。比如 图 3 中 SAXParser,允许注册一个处理类,这个处理类对于所有节点并不加以区分,对他们的处理过程都是一致的。一般包括 startElement 和 endElement 等动作。清单 2 给出了处理类的 startElement 动作的伪代码。

清单 2. 处理类的 startElement 动作的伪代码

1  CLASS Listener < DefaultListener 2    PROCEDURE StartElement(…) 3      IF ( node->Obj.name == ‘Node’ ) 4        // Do some calculation 5      FI 6    END 7  END 8 SAXParser->SetListener(new Listener)

使用 SAX 框架,对于 Node 节点的处理并不会根据其前驱或者后缀节点的不同而有所区别。伪代码 3-5 行说明了这一点。一旦发现节点名称是 Node,则进行预定的处理。这个框架本身并不支持对节点进行上下文相关的处理,除非开发者另外维护一些数据结构来记录上下文状态。正是由于 SAX 框架不需要记录的状态信息,所以运行时,SAX 框架占用的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号