zoukankan      html  css  js  c++  java
  • Axis2学习笔记 (Axiom 篇 )

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

  • 相关阅读:
    [转载]解析.Net框架下的XML编程技术
    Intercept and Manage Windows Originated by Thirdparty Components Hosted in C# Application
    [创业]<高效能人士的七个习惯>有感
    [关于DES程序]对前DES1.0源码bug的修正
    The secret benefit of search engine optimisation: Increased usability
    效率不高的7个原因
    [PDF]Intrusion Detection Techniques and Approaches
    [转载]基于数据挖掘的入侵检测系统
    [转载]在 C# 中加载自己编写的动态链接库
    [转载]在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
  • 原文地址:https://www.cnblogs.com/chinacloud/p/1863130.html
Copyright © 2011-2022 走看看