Axis2分析报告

上传人:一*** 文档编号:243135582 上传时间:2024-09-16 格式:PPT 页数:48 大小:320.44KB
返回 下载 相关 举报
Axis2分析报告_第1页
第1页 / 共48页
Axis2分析报告_第2页
第2页 / 共48页
Axis2分析报告_第3页
第3页 / 共48页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,6/8/2012,#,Axis2,分析报告,第一部分:需求分析,背景,“网络服务”(,Web Services,),是指一些在网络上运行的、面向服务的、基于分布式程序的软件模块,网络服务采用,HTTP,和,XML,等互联网通用标准,使人们可以在不同的地方通过不同的终端设备访问,WEB,上的数据,如网上订票,查看订座情况。网络服务在电子商务、电子政务、公司业务流程电子化等应用领域有广泛的应用,被业内人士奉为互联网的下一个重,点。,随着互联网使用人群越来越多,互联网本身和其相关技术都发展的越来越快,网络服务已经成为现代互联网中信息交流和信息共享中不可缺少的一部分。,Axis2,背景,Axis2,是下一代,Apache Axis。Axis2,虽然由,Axis 1.x,处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。,Axis2,基于新的体系结构进行了全新编写,而且没有采用,Axis 1.x,的常用代码。支持开发,Axis2,的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关,Web,服务标准和协议(如,WS-Security、WS-ReliableMessaging,等)的实现中,。,Apache,Axis2,是,Axis,的后续版本,是新一代的,SOAP,引擎。,目的,我们的编写目的是通过探索,Axis2,的设计架构和开发模式来更好地理解软件体系结构在系统设计中的重要性,尤其在互联网时代,信息交流大、数据通信频繁的特点下,对网络服务框架的研究将有助于我们更好地理解和体验现代互联网应用框架的意义和内部原理。,需求分析,网络服务支持,支持广泛使用的基于,HTTP,的,SOAP,协议,包括,SOAP 1.1,和,SOAP 1.2,。,同时支,持,REST,样式的网络服务模型。,支,持,Spring,框架,需求分析,传输协议支持,在,SOAP,发送方和接收方中支持多种协议比如,SMTP,、,FTP,和消息导向性中间件。,支持,WSDL 2.0,中的,MEP,(,消息交换模式,),需求分析,客户端支持,引言:大多数网络服务框架都支持阻塞的网络服务调用,但是现在越来越多的网络服务框架开始支持非阻塞网络服务调用。其实不仅仅是网络服务,网络应用程序都开始倾向于非阻塞调用,比如,AJAX,。,因此框架客户端调用需支持阻塞和非阻塞态调用。,需求分析,扩展性支持,不管是服务器端还是客户端,整个,SOAP,消息处理流程(也就是消息的接收与处理,和构建与发送)都必须支持可扩展性,所有流程可以改变,并且支持用户自定义的处理模块。,需求分析,性能要求,框架需提供专有的,XML,解析器来最大化得优化,SOAP,中,XML,的处理性能。,对于客户端,API,提供,XML,构造器来快速创建,XML,数,据并封装到,SOAP,中传输。,整,个网络服务调用流程,不管是阻塞还是非阻塞,都必须可适应高频率的并发调用,并始终保持系统的有效有序运行。,扩展,性支持不会对整个处理流程造成过多性能损耗。,第二部分:系统设计分析和管道过滤器模型,系统设计, Axis2,的模块,部署模块,代码生成模块,核心组件,信息处理模块,SOAP,处理模块,XML,处理模块,客户端,API,传输组件,系统设计,-,管道过滤器模式,管道过滤器模式:,Pipeline and Filters pattern,,从名称上可以看出来,它形象得描述了一种消息处理的模式,即以一种类似管道和过滤器的处理方式逐步对数据进行处理。,管道:需要处理的数据。,过滤器:处理的执行。,过滤器,管道,过滤器,管道,过滤器,管道,系统设计,-,管,道过滤器模式,前一个过滤器的输出是后一个过滤器的输入。,执行过程环环相扣,如果一个过滤器没有输出,后续过滤器就没有了输入,因此无法进行。,每一个执行点都可以有反馈机制,这样整个执行过程是可控制的,。,例如一些脚本执行器就是采用类似管道过滤器模式,如下图:,扫描,无语法错误,的记号,解析,中间执行数据,执行,程序输出,系统设,计,管道过滤器处理方式,为了满足需求分析中:分段、高效、支持扩展的处理方式。,Axis2,使用了管道过滤器模式的处理方式。,最外层管道,逻辑处理流:,SOAP,请求和回应,中层管道,引擎执行流:处理单元,底层管道,单元执行流:最基本原子执行单元,系统设计,第一层:逻辑处理流,Axis2,会根据,MEP,(消息交换模式)的不同来决定最外层的逻辑处理流:,SOAP,请求流,SOAP,请求错误流,SOAP,回应流,SOAP,回应错误流,系统设计,第二层:引擎执行单元,Axis2,的执行引擎是在第二层之上的,在第一层逻辑层之下,引擎处理层则把输入流和输出流的各个步骤具体刻画出来。,输入流,传输单元,分派单元,安全策略应用,用户扩展单元,消息验证,输出流,消息初始化,用户扩展单元,安全策略部署,消息输出,系统设计,第三层原子执行,到达第三层,执行的模块就不可再分了。,Axis2,会使用原子执行模块代表管道过滤器中的节点。,过滤器,管道,过滤器,管道,过滤器,管道,系统设计,多层管道过滤器的连接,多层管道过滤器采用类似面对对象编程中对象的继承和多态特性,一层管道过滤器看起来是线性的,但是一个过滤器类型的执行可能会诱发另一个子管道过滤器,这样这个过滤器的执行就是其包含的子管道过滤器先得执行。那么此时逻辑上这个管道过滤器执行就具有多层的意义了。如下图:,Axis,执行引擎概括,第一层,客户端,基于,HTTP,网络服务传输协议,Axis2,执行引擎,服务端,SOAP,请求,InFlow,或者,InFaultFlow,接受方,WebService,执行,SOAP,回应,OutFlow,或者,OutFaultFlow,Axis2,执行引擎,第二层,第三层,下图中的,Phase,代表第二层单元,,Handler,代,表第三层概念。具体代码实现在后面会详解。,第三部分:系统实现分析,Axis2,最底层管道过滤器,-,Handler,和,Context,刚才讲过,,Axis2,中的最底层管道过滤器执行是原子的,不可再分的,因此管道过滤器直接对应,Handler,和,MessageContext,对象:,过滤器,管道,过滤器,管道,过滤器,管道,Handler,MessageContext,Handler,MessageContext,Handler,MessageContext,Axis2,最底层管道过滤器,-,Handler,和,Context,Handler,是一个接口。命,名空间:,org.apache.axis2.engine,Handler,是没有状态存储的:,Stateless,。因此可以理解成是一种静态的支持并发操作的对象,当然实际上它还是非静态的。,管道过滤器的具体执行类型都是可扩展的:,Handler,和,MessageContext,都是可扩展类型,仅定义必要执行和操作接口。,整个过程是可控制的: 通过,InvocationResponse,类型。,Handler,类型,Handler,类型定义如下常用方法:,名称,作用,getName,返回名称,getParameter,根据参数名称返回参数类型(,Parameter,类型),invoke,参数,MessageContext,,返回值,InvocationResponse,。调用,Handler,的执行,flowComplete,参数,MessageContext,,类似事件。当,Handler,执行完毕后,,Axis2,引擎会调用,Handler,的,flowComplete,函数。,Handler,类型,Handler,定义一个,Nested Class:InvocationResponse,,后者定义三个静态字段:,CONTINUE、SUSPEND、ABORT,控制当一个过滤器完成后,是否继续或者暂停还是停止后续的操作。,AbstractContext,类型,介绍完管道过滤器中的过滤器类型:,Handler,,我们来看管道对应的类型:,AbstractContext,。,Axis2,的,AbstractContext,类型在,命名空间:,org.apache.axis2.context,内。,该类型是用,来存储任何过滤器操作中的抽象数据类型核心定义,AbstractContext,类型,类型定义如下字段(全部是派生类可见的,):,定于如,下,函数,:,名称,类型,properties,Map,parent,AbstractContext,lastTouchTime,long,名称,作用,getProperty,setProperty,mergeProperties, getPropertiesNames,对存储属性的操作(添加、删除、合并),getParent,isAncestor,setLastTouchedTime,其他非存储属性相关操作,自定义一个,Handler,类型,了解了上述信息我们可以自定义一个,Handler,类型:,/,定义一个类型继承自,Axis2,中的,AbstractHandler,类型,public class MyHandler extends AbstractHandler,public SimpleHandler(),public InvocationResponse invoke(MessageContext msgContext) ,/,判断,MessageContext,中是否有叫,abc,的属性,如果没有的话,暂停整个管道过滤器处理流程,if(msgContext.getProperty(abc) = null),return InvocationResponse.SUSPEND;,/,如果有的话,返回,CONTINUE,,继续整个流程,return InvocationResponse.CONTINUE;,Axis2,第二层管道过滤器,Phase,这是系统设计中,第二层:引擎执行单,元的具体执行,在,Axis2,中,这层的类型名称是,Phase,类型。,命名空间:,org.apache.axis2.engine,它具备如下特点:,定义一系列有序的,Handler,。是,Axis2,中新加的概念。,Phase,类型执行,Handler,接口,因此,Phase,就是一种,Handler,,只不过是一个特殊的可以包含子,Handler,的,Handler,。,Axis2,第二层管道过滤器,Phase,Phase,类型的函数:,名称,作用,getHandlers, addHandler, removeHandler,对子,Handler,的操作,Invoke,参数是,MessageContext,,执行所有子,Handler,getName, setName,Phase,本身名称操作,Axis2,第二层管道过滤器,Phase,Axis,引擎在运行时是以,Phase,为执行单位的,,,Axis2,引擎只会调用,Phase,的,Invoke,函数,而,Phase,类型的,Invoke,函数会调用背后包含的,Handler,的所有,Invoke,函数。如下图:,Axis2,第三层管道过滤器:,Flow,Flow,和,Phase,的关系就如同,Phase,和,Handler,的关系:,Flow,包含一个或多个,Phase,。,区别:,Flow,在,Axis2,中比较偏向逻辑方面,具体没有直接的对应执行类型,而且,Axis2,引擎直接执行的元素是,Phase,。,Axis2,中包含下面,4,中,Flow,InFlow,输入流。,SOAP,请求。,InFaultFlow,输入错误流。,SOAP,请求发生错误(,HTTP,状态值,500,),OutFlow,输出流。,SOAP,回应。,OutFaultFlow,输出错误流。,Axis2,执行模型,再次回顾一下,Axis2,执行模型:,从最外层将,,Axis2,处理整个,SOAP,消息是在,Phase,层:,客户端,基于,HTTP,网络服务传输协议,Axis2,执行引擎,服务端,SOAP,请求,InFlow,或者,InFaultFlow,接受方,WebService,执行,SOAP,回应,OutFlow,或者,OutFaultFlow,Axis2,执行模型,在往下细分就是,Phase,和,Handler,的管道过滤器执行:,第四部分:非核心部分实现分析,信息处理模型,最下是,StAX,:,Streaming API for XML (StAX),,,XML,解析框架,来自,Java,,相比,SAX,模式的,XML,解析更具动态性,相比,DOM,形式,XML,解析更具性能优势,可以理解为介于,SAX,解析和,DOM,解析之间。,之上是,AXIOM,:,Apache AXIOM,是,XML,信息集模型,可供用来动态创建信息对象数。,然后在原始,XML,解析和,XML,信息模型的基础上,建立了整个核心框架,执行引擎,部署。因为,Axis2,使用,SOAP,传输,用到,WSDL,定义服务描述,而,SOAP,和,WSDL,都是基于,XML,的。,核心框架定义好后,,Axis,还定义一些上层应用运行在核心框架之上。如数据传输模块和数据绑定模块。,信息处,理模型,上,述过程可以用这个图来表示:,上层应用(传输和数据绑定),框架(模块,执行引擎,部署),XML,信息模型,原,始,Java,提供的,XML,解析,客户端,API,分析,Axis2,客户端,API,支持异步核同步的调用方式。,对于同步的调用方式,应用程序的当前执行线程会阻塞,直到收到服务器回应,如下图:,客户端,API,分析,对于异步的调用方式,应用程序的当前执行线程不会阻塞,服务器回应会通过异步事件调用通知应用程序。,如下图:,RN,代表服务器传来的回应通知。,代码测试实现,使,用,Java,创建一个简单的网络服务执行。,来模拟查询商品价格和添加商品价格:,首,先创建一个,HashMap,来存储,string,和,double,。,首,先判断,HashMap,中否包含指定字符串。,如,果有的话,返回字符串对应的,double,值。,如,果没有返回,42,。,代码测试实现,上述功能代码:,public class StockQuoteService ,private HashMap map = new HashMap();,/,获取价格函数,public double getPrice(String symbol) ,Double price = (Double) map.get(symbol);,if(price != null),return price.doubleValue();,return 42.00;,/,添加物品函数,public void update(String symbol, double price) ,map.put(symbol, new Double(price);,代码测试实现,使用,W3C,推荐的标准来定义这个网络服务,是网络服务规格化:,定义,XML,根节点为,service,(代表一个网络服务),然后通过,description,、,operation,和,parameter,三个节点规格化定义网络服务的描述、操作和参数的数据。,代码测试实现,上述功能的代码(保存在,XML,文件中),Stock Quote Service,samples.quickstart.service.axiom.StockQuoteService,代码测试实现,接下来需要重,新改写网络服务类型的执行(按照,Axis2,的模式,)。具体则需要使用,AXIOM,中的,XML,对象数解析的方法规范网络服务的执行。,最后就是用,ServiceClient,客户端,API,来调用网络服务,仍然是采用,AXIOM,的方式,当然,Axis2,提供多种处理方式来读取,SOAP,协议,不仅限于,AXIOM,,同时也不仅限与,ServiceClient,类型。,测试代码实现,下面就是使用,AXIOM,的,OMElement,元素准备发送,SOAP,数据的部分代码:,public static OMElement getPricePayload(String symbol),OMFactory fac = OMAbstractFactory.getOMFactory();,/,读取,XSD,对数据进行验证,OMNamespace omNs = fac.createOMNamespace(http:/axiom.service.quickstart.samples/xsd, tns);,/,创建,AXIOM,准备发送,XML,数据,OMElement method = fac.createOMElement(getPrice, omNs);,OMElement value = fac.createOMElement(symbol, omNs);,value.addChild(fac.createOMText(value, symbol);,method.addChild(value);,/,/,返回生成的,AXIOM,数据,return method;,测试代码实现,然后在主函数中用,ServiceClient,进行调用:,public static void main(String args) ,try ,OMElement getPricePayload = getPricePayload(WSO);,OMElement updatePayload = updatePayload(WSO, 123.42);,Options options = new Options();,ServiceClient sender = new ServiceClient(); sender.setOptions(options);,sender.fireAndForget(updatePayload);,System.err.println(price updated);,OMElement result = sender.sendReceive(getPricePayload);,String response = result.getFirstElement().getText();,System.err.println(Current price of WSO: + response);, catch (Exception e) e.printStackTrace();,测试代码实现,最后运行成功后会输出:,Done,Current price of WSO: 123.42,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!