Axis2学习笔记一 (Axiom 篇 )
|
|
一. 简介
|
|
|
|
|
Axis2 是继 Axis1 之后 Apache 软件组织推出的下一代 Webservice 的实现品 , 和 1.0 比较有如下较大的改进 :
|
|
1.不是在 Axis1 的基础上扩展,而是重新开发,重新实现。
|
|
2.支持 SOAP1.1 和 SOAP1.2. 及 REST 风格。
|
|
3.新的 XML 处理对象模型 Axiom, 更快更有效率。
|
|
4.客户端支持同步、异步、单通道、双通道。
|
|
5.支持 HTTP SMTP JMS TCP 多种协议。
|
|
6.支持可插拔模块功能以强对数据的处理。
|
|
|
|
|
二 . Axiom
|
|
|
|
|
SOAP 协议是基于 xml 做为数据交换的格式,所以 了解 axis2 工作原理 前 我们得了解一下AXIOM , Axis2 的映射 xml 数据的对象模型,其主要类图如下 : |
|
|
|
|
< 图一 >
|
|
|
Axiom 采用最新拉式 (pull)xml 处理方式 :StAX ,拉式处理是最近 xml 解析方法的趁势,相较以前推式 (push) 处理如 dom 和 sax ,拉式将 xml 解析的控制权交给了客户端程序 , 只有当客户端程序需要数据时解析类才会真正从数据流中读取数据,所以这种方式当解析稍大一点 xml 数据时更加有效率。
|
|
|
|
|
|
如图一 , 从最高抽象级别 Axiom 共分三大块 : OMXMLParserWrapper,OMFactory, OMNode 和 OMContainer, OMXMLParserWrapper 主要用来包装拉式 xml 数据流 , 这一点类似装饰模式,对处理数据功能进一步加强 ,OMFactory 是 OMNode 和 OMContainer 的工厂类,用于产生其实现类的对象 , OMXMLParserWrapper 的实现类具有 OMFactory 的实例引用 , 可以说 OMXMLParserWrapper 像装配车间 , 将原料 ( 从拉式 xml 数据流获取数据 ) 用机器 (OMFactory) 生产成产品 (OMNode 或 OMContainer 的实现类 ), 最后 OMNode 和 OMContainer 不用说就是映射 xml 文档数据中节点的对象了 , OMNode 代表 xml 文档树最末端的节点, OMContainer 可以包含其它节点的节点,比如图中的 OMElement 扩展了这两个接口 , 这样它既可以有父接点,也可以有子节点。
|
|
|
|
|
|
通过 Axiom 一个典型的 xml 文档解析过程如下 :
|
|
|
|
|
|
|
|
|
|
|
< 图二 >
|
|
|
如图二展示了一个客户端程序获取一个 xml 文档的根节点的过程 , 其中 StAXOMBuilder 是 OMXMLParserWrapper 的实现类 , OMLinkedListImplFactory 是 OMFactory 的实现类 , OMDocumentImpl 是 OMDocument(OMDocument 扩展了 OMContainer) 实现类,我们可以先看一下一段典型的实现代码,有助于理解 :
|
|
1. BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(“MyFilePath”)));
2.XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(reader);
3. StAXOMBuilder builder = new StAXOMBuilder(OMAbstractFactory.getOMFactory(),parser);
4. OMElement root = builder.getDocumentElement();
|
|
|
|
|
|
第一步 : 产生一个原始的 xml 数据流
|
|
第二步 : 产生拉式 (pull)xml 数据流
|
|
第三步 : 产生 StAXOMBuilder 对象
|
|
第四步:获取根节点对象 , 获取这个节点的过程如图调用了 StAXOMBuilder 的 next() 方法 , 这个 next() 方法首先调用了 XMLStreamReader 的 next() 方法 ( 真正从数据流中取出数据 ) ,然后调用 OMLinkedListImplFactory 的 createOMElement 方法产生一个 OMElementImpl 对象 , 这个对象构造过程中又调用最初实例化 StAXOMBuilder 对象时产生的 OMDocumentImpl 对象的 addChild() 方法将本身赋给 OMDocumentImpl 对象的一个 documentElement 属性,等于最终返回的值就是这个对象 , 从这里面我们可以看出, OMDocument 及其实现类 OMDocumentImpl 并不直接提供给外界使用 ,最终返回给客户端的是另外一个 OMElementImpl 对象 , 还有在这里我们可以体会到 , 数据真正需要时才会从数据流取出。
转载自http://blog.csdn.net/eastbear2008/archive/2006/08/18/1095069.aspx
|
分享到:
相关推荐
Axis2版本学习笔记Axis2版本学习笔记Axis2版本学习笔记Axis2版本学习笔记Axis2版本学习笔记Axis2版本学习笔记
Axis2版本学习笔记,CXF版学习笔记,WebServices学习笔记
axis2学习资料
AXIS学习笔记
Axis和Axis2的API!Axis和Axis2的查询文档!
Axis2学习文档
它有着明确的设计目标:大幅提升 Apache 下一代 SOAP 协议栈 Axis 2 的性能。结果造就了不同于其他对象模型的 AXIOM(也称为 OM),因为它突出了构造的轻型,并且 仅当需要的时候才建立. 这里是它的api 文档
AXIS学习笔记
axisAxis2学习教程-全面学习AXISAxis2学习教程-全面学习AXIS
axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-...
axis2 webservice 服务端jar包: -->axis2-kernel-1.6.1.jar -->axis2-spring-1.6.1.jar -->axis2-transport-http-1.6.1.jar -->XmlSchema-1.4.7.jar -->wsdl4j-1.6.2.jar -->axiom-api-1.2.12.jar -->axiom...
MyEclipse下Axis2插件安装笔记
1、axis2相关jar包如下: axiom-api-1.2.10.jar axiom-dom-1.2.10.jar axiom-impl-1.2.10.jar axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-...
wsdl2java -uri http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl -p com.xing.tif.axis2.cient -o H:\axis
众所周知,axis2需要加入大量的jar包,非常不便。笔者经过测试,剔除了大部分不需要的jar
Chapter 3, Axis2 XML Model (AXIOM) - Learn about the heart of a web service framework and learning more about XML processing in Axis2. Chapter 4, Execution Chain - Learn how to extend the core ...
axis2学习,自己整理的axis2学习,自己整理的axis2学习,自己整理的
包含webservice客户端开发所需要所有jar包, axiom-api-1.2.13.jar,axis2-adb-1.4..jar,axis2-adb-1.6.2.jar,axiom-dom-1.2.13.jar,axis2-kernel-1.6.2.jar,axis2-transport-http-1.6.2.jar,axis2-transport-...