读书人

Axis源码分析-服务端处置请求并响应(

发布时间: 2012-10-08 19:54:56 作者: rapoo

Axis源码分析-服务端处理请求并响应(三)
在Axis源码分析-Web服务部署(二)中
http://dead-knight.iteye.com/blog/732961
已经将两种web部署方式进行了分析
其中涉及了服务端AxisServlet初始化。以及对get、post请求的监听。
服务端处理请求实际上就是AxisServlet中doPost所做的事情。
AxisServlet中doPost源码:


doPost主要任务为:
1.构造MessageContext并进行初始化
通过createMessageContext方法完成MessageContext构造,通过setProperty完成属性设置;
2.构造请求消息体
通过Message requestMsg =new Message(req.getInputStream(),false,
req.getHeader(HTTPConstants.HEADER_CONTENT_TYPE),
req.getHeader(HTTPConstants.HEADER_CONTENT_LOCATION));
完成;其构造方法依赖SOAPPart实例,并将请求输入流req.getInputStream()即:org.apache.catalina.connector.CoyoteInputStream(Tomcat环境)设置为SOAPPart的currentMessage;
3.AxisServer引擎调用
通过invoke方法完成对各Handler链的一次调用;后面详细分析。
4.将处理完成的响应消息体发送至客户端。

AxisServer引擎invoke调用分析


通过以上代码可见、整个Axis引擎处理是通过一系列的handler chain进行invoke。其处理顺序为http requestFlow(URLMapper、HTTPAuthHandler)----global requestFlow(JWSHandler)----service requestFlow responseFlow(接口服务)
----global responseFlow----http responseFlow

那么依次分析各Handler处理过程。
一、transport配置Handler
1.org.apache.axis.handlers.http.URLMapper:

AxisEngine:

至此,整个URLMapper的Handler已经处理完成。其重要任务就是将缓存中的service信息构造成SOAPService Handler,并设置到Messagecontext中。SOAPService实际上是个Handler Chain即:SimpleTargetedChain,该链中包含了service中配置的requestFlow、provider、responseFlow。当执行SOAPService的invoke方法时,通过配置依次执行handler。

2.org.apache.axis.handlers.http.HTTPAuthHandler:


RPCProvider:

由于时间问题,后面部分分析的比较粗糙
希望以后看到这个,还能记得。 1 楼 flyoversky 2011-10-11 不错,正在找这方面的资料

读书人网 >软件架构设计

热点推荐