1.Abstract

     
 

Axis2 是继 Axis1 之后 Apache 软件组织推出的下一代 Webservice 的实现品 , 和 1.0 比较有如下较大的改进 :

 

1.不是在 Axis1 的基础上扩展,而是重新开发,重新实现。

 

2.支持 SOAP1.1 和 SOAP1.2. 及 REST 风格。

 

3.新的 XML 处理对象模型 Axiom, 更快更有效率。

 

4.客户端支持同步、异步、单通道、双通道。

 

5.支持 HTTP SMTP JMS TCP 多种协议。

 

6.支持可插拔模块功能以强对数据的处理。

       

2.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 对象 , 还有在这里我们可以体会到 , 数据真正需要时才会从数据流取出。

转载于:https://www.cnblogs.com/chinacloud/archive/2010/10/28/1863130.html

Axis2学习笔记 (Axiom 篇 )相关推荐

  1. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

  2. [mmu/cache]-ARM cache的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...

  3. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  4. PHP学习笔记 - 进阶篇(7)

    PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...

  5. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  6. WPF学习笔记(数据绑定篇3)

    接上回的<WPF学习笔记(数据绑定篇2)>,继续 BindValidation 此示例演示了: 如何使用错误模板: 使用样式显示错误信息: 如何在校验发生异常时执行回调: 首先,你可以看见 ...

  7. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

  8. PhalAPI学习笔记拓展篇 ———ADM模式中NotORM实现简单CURD

    PhalAPI学习笔记拓展篇 ---ADM模式中NotORM实现简单CURD 前言 内容 ADM模式 ADM简单介绍 准备工作 PhalAPI提供的CURD操作方法 业务实现 结束语 前言 公司业务需 ...

  9. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

最新文章

  1. 运算放大器在超高频信号作用下的偏移量的变化
  2. C++11 类型后置语法
  3. 【转载】使用Nexus搭建Maven服务器详细配置
  4. Tomcat部署时没有项目
  5. 第三次学JAVA再学不好就吃翔(part4)--基础语法之变量
  6. sersync+rsync实现实时同步
  7. 关于std:auto_ptr
  8. 暂停 CSS @keyframes 动画
  9. 数学建模案例【人口模型 】(马尔萨斯人口模型,Logistic模型)
  10. JS通过WebSocket实现双屏信息同步显示
  11. Windows Azure Virtual Network (12) 虚拟网络之间点对点连接VNet Peering
  12. 数学基础 —— 旋转(2D 正旋转)
  13. 血淋淋的BUG:波音在软件开发上错在哪里?
  14. slam十四讲,ch5joinmap报错,已解决
  15. win10正式版新功能介绍
  16. PHP输出中文乱码的解决方法(适合初学者)
  17. 弱口令审计-工具用法大全
  18. C-Free5.0注册码
  19. linux连接mssql数据库,在Centos7下为PHP安装mssql扩展
  20. 【前端库】favico.js 浏览器消息提示 【待更新】

热门文章

  1. android button 图片 大小设置,android 中怎么控制ImageButton 上的图片与按钮大小的匹配...
  2. github + jsdeliver + picgo 搭建免费cdn
  3. ES6构造函数class语法与ES5构造函数语法
  4. 学习偏态分布的相关知识和原理的4篇论文推荐
  5. 机器学习中级课程 3.分类变量
  6. 22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束
  7. HTTP应知应会知识点复习手册(上)
  8. CSS3---选择器分类,最全版
  9. 水质评价---2综合水质标识指数法
  10. [Python与图像处理]利用Python与Kmeans聚类分析图像主色彩