《Axis2分析报告.pptx》由会员分享,可在线阅读,更多相关《Axis2分析报告.pptx(48页珍藏版)》请在第壹文秘上搜索。
1、AXIS2分析报告第一部分:需求分析背景“网络服务”(Web Services),是指一些在网络上运行的、面向服务的、基于分布式程序的软件模块,网络服务采用HTTP和XML等互联网通用标准,使人们可以在不同的地方通过不同的终端设备访问WEB上的数据,如网上订票,查看订座情况。网络服务在电子商务、电子政务、公司业务流程电子化等应用领域有广泛的应用,被业内人士奉为互联网的下一个重点。随着互联网使用人群越来越多,互联网本身和其相关技术都发展的越来越快,网络服务已经成为现代互联网中信息交流和信息共享中不可缺少的一部分。Axis2背景Axis2是下一代 Apache Axis。Axis2 虽然由 Axi
2、s 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。Apache Axis2 是Axis的后续版本,是新一代的SOAP引擎。目的目的我们的编写目的是通过探索Axis2的设计架构和开发模式来更好地理解软件体系结构在系统设计中的重要性,尤其在互联网时代,信息交流大、
3、数据通信频繁的特点下,对网络服务框架的研究将有助于我们更好地理解和体验现代互联网应用框架的意义和内部原理。需求分析 网络服务支持支持广泛使用的基于HTTP的SOAP协议,包括SOAP 1.1和SOAP 1.2。同时支持REST样式的网络服务模型。支持Spring框架需求分析 传输协议支持在SOAP发送方和接收方中支持多种协议比如SMTP、FTP和消息导向性中间件。支持WSDL 2.0中的MEP(消息交换模式)需求分析 客户端支持引言:大多数网络服务框架都支持阻塞的网络服务调用,但是现在越来越多的网络服务框架开始支持非阻塞网络服务调用。其实不仅仅是网络服务,网络应用程序都开始倾向于非阻塞调用,比
4、如AJAX。因此框架客户端调用需支持阻塞和非阻塞态调用。需求分析 扩展性支持不管是服务器端还是客户端,整个SOAP消息处理流程(也就是消息的接收与处理,和构建与发送)都必须支持可扩展性,所有流程可以改变,并且支持用户自定义的处理模块。需求分析 性能要求框架需提供专有的XML解析器来最大化得优化SOAP中XML的处理性能。对于客户端API提供XML构造器来快速创建XML数据并封装到SOAP中传输。整个网络服务调用流程,不管是阻塞还是非阻塞,都必须可适应高频率的并发调用,并始终保持系统的有效有序运行。扩展性支持不会对整个处理流程造成过多性能损耗。第二部分:系统设计分析和管道过滤器模型系统设计 Ax
5、is2的模块部署模块代码生成模块核心组件信息处理模块SOAP处理模块XML处理模块客户端API传输组件系统设计 - 管道过滤器模式管道过滤器模式:Pipeline and Filters pattern,从名称上可以看出来,它形象得描述了一种消息处理的模式,即以一种类似管道和过滤器的处理方式逐步对数据进行处理。管道:需要处理的数据。过滤器:处理的执行。管道过滤器管道过滤器管道过滤器系统设计 - 管道过滤器模式前一个过滤器的输出是后一个过滤器的输入。执行过程环环相扣,如果一个过滤器没有输出,后续过滤器就没有了输入,因此无法进行。每一个执行点都可以有反馈机制,这样整个执行过程是可控制的。例如一些脚
6、本执行器就是采用类似管道过滤器模式,如下图:无语法错误的记号扫描中间执行数据解析程序输出执行系统设计 管道过滤器处理方式为了满足需求分析中:分段、高效、支持扩展的处理方式。Axis2使用了管道过滤器模式的处理方式。最外层管道最外层管道逻辑处理流:逻辑处理流:SOAP请求和回应请求和回应中层管道引擎执行流:处理单元底层管道单元执行流:最基本原子执行单元系统设计 第一层:逻辑处理流Axis2会根据MEP(消息交换模式)的不同来决定最外层的逻辑处理流:SOAP请求流SOAP请求错误流SOAP回应流SOAP回应错误流系统设计 第二层:引擎执行单元Axis2的执行引擎是在第二层之上的,在第一层逻辑层之下
7、,引擎处理层则把输入流和输出流的各个步骤具体刻画出来。输入流传输单元分派单元安全策略应用用户扩展单元消息验证输出流消息初始化用户扩展单元安全策略部署消息输出系统设计 第三层原子执行到达第三层,执行的模块就不可再分了。Axis2会使用原子执行模块代表管道过滤器中的节点。管道过滤器管道过滤器管道过滤器系统设计 多层管道过滤器的连接多层管道过滤器采用类似面对对象编程中对象的继承和多态特性,一层管道过滤器看起来是线性的,但是一个过滤器类型的执行可能会诱发另一个子管道过滤器,这样这个过滤器的执行就是其包含的子管道过滤器先得执行。那么此时逻辑上这个管道过滤器执行就具有多层的意义了。如下图:Axis执行引擎
8、概括 第一层客户端客户端基于基于HTTP网络服务网络服务传输协议传输协议Axis2执行引擎执行引擎服务端服务端SOAP请求InFlow或者InFaultFlow接受方WebService执行SOAP回应OutFlow或者OutFaultFlowAxis2执行引擎 第二层,第三层下图中的Phase代表第二层单元,Handler代表第三层概念。具体代码实现在后面会详解。第三部分:系统实现分析Axis2最底层管道过滤器最底层管道过滤器 - Handler和和Context刚才讲过,Axis2中的最底层管道过滤器执行是原子的,不可再分的,因此管道过滤器直接对应Handler和MessageContex
9、t对象:管道过滤器管道过滤器管道过滤器MessageContextHandlerMessageContextHandlerMessageContextHandlerAxis2最底层管道过滤器最底层管道过滤器 - Handler和和ContextHandler是一个接口。命名空间:org.apache.axis2.engineHandler是没有状态存储的:Stateless。因此可以理解成是一种静态的支持并发操作的对象,当然实际上它还是非静态的。管道过滤器的具体执行类型都是可扩展的:Handler和MessageContext都是可扩展类型,仅定义必要执行和操作接口。整个过程是可控制的: 通过
10、InvocationResponse类型。Handler类型Handler类型定义如下常用方法:名称名称作用作用getName返回名称getParameter根据参数名称返回参数类型(Parameter类型)invoke参数MessageContext,返回值InvocationResponse。调用Handler 的执行flowComplete参数MessageContext,类似事件。当Handler执行完毕后,Axis2引擎会调用Handler的flowComplete函数。Handler类型Handler定义一个Nested Class:InvocationResponse,后者定义三
11、个静态字段:CONTINUE、SUSPEND、ABORT控制当一个过滤器完成后,是否继续或者暂停还是停止后续的操作。AbstractContext类型介绍完管道过滤器中的过滤器类型:Handler,我们来看管道对应的类型:AbstractContext。Axis2的AbstractContext类型在命名空间:org.apache.axis2.context内。该类型是用来存储任何过滤器操作中的抽象数据类型核心定义AbstractContext类型类型定义如下字段(全部是派生类可见的):定于如下函数:名称名称类型类型propertiesMapparentAbstractContextlastT
12、ouchTimelong名称名称作用作用getProperty, setProperty, mergeProperties, getPropertiesNames对存储属性的操作(添加、删除、合并)getParent,isAncestor, setLastTouchedTime其他非存储属性相关操作自定义一个Handler类型了解了上述信息我们可以自定义一个Handler类型:/定义一个类型继承自定义一个类型继承自Axis2中的中的AbstractHandler类型类型public class MyHandler extends AbstractHandler public SimpleHan
13、dler() public InvocationResponse invoke(MessageContext msgContext) /判断判断MessageContext中是否有叫中是否有叫abc的属性,如果没有的话,暂停整个管道过的属性,如果没有的话,暂停整个管道过滤器处理流程滤器处理流程 if(msgContext.getProperty(abc) = null) return InvocationResponse.SUSPEND; /如果有的话,返回如果有的话,返回CONTINUE,继续整个流程继续整个流程 return InvocationResponse.CONTINUE; Axi
14、s2第二层管道过滤器 Phase这是系统设计中第二层:引擎执行单元的具体执行,在Axis2中,这层的类型名称是Phase类型。命名空间:org.apache.axis2.engine它具备如下特点:定义一系列有序的Handler。是Axis2中新加的概念。Phase类型执行Handler接口,因此Phase就是一种Handler,只不过是一个特殊的可以包含子Handler的Handler。Axis2第二层管道过滤器 PhasePhase类型的函数:名称名称作用作用getHandlers, addHandler, removeHandler对子Handler的操作Invoke 参数是Messag
15、eContext,执行所有子HandlergetName, setNamePhase本身名称操作Axis2第二层管道过滤器 PhaseAxis引擎在运行时是以Phase为执行单位的,Axis2引擎只会调用Phase的Invoke函数,而Phase类型的Invoke函数会调用背后包含的Handler的所有Invoke函数。如下图:Axis2第三层管道过滤器:FlowFlow和Phase的关系就如同Phase和Handler的关系:Flow包含一个或多个Phase。区别:Flow在Axis2中比较偏向逻辑方面,具体没有直接的对应执行类型,而且Axis2引擎直接执行的元素是Phase。Axis2中包
16、含下面4中FlowInFlow输入流。输入流。SOAP请求。请求。InFaultFlow输入错误流。SOAP请求发生错误(HTTP状态值500)OutFlow输出流。SOAP回应。OutFaultFlow输出错误流。Axis2执行模型再次回顾一下Axis2执行模型:从最外层将,Axis2处理整个SOAP消息是在Phase层:客户端客户端基于基于HTTP网络服务网络服务传输协议传输协议Axis2执行引擎执行引擎服务端服务端SOAP请求InFlow或者InFaultFlow接受方WebService执行SOAP回应OutFlow或者OutFaultFlowAxis2执行模型在往下细分就是Phase和Handler的管道过滤器执行:第四部分:非核心部分实现分析信息处理模型最下是StAX:Streaming API for XML (StAX),XML解析框架,来自Java,相比SAX模式的XML解析更具动态性,相比DOM形式XML解析更具性能优势,可以理解为介于SAX解析和DOM解析之间。 之上是AXIOM:Apache AXIOM是XML信息集模型,可供用来动态创建信息对象数。 然后在原始