上一篇文章中写了关于axis2服务器的安装及启动以及axis2管理工具的简单介绍,现在我们已经对axis2有了简单的认识。下面我会一步步揭开axis2的面纱,并开始构建一个自己的axis2服务。
为了更好的理解axis2,我们首先看web services的消息生命周期的概念。通常,消息的生命周期如下图:
消息发送者应用创建原始的SOAP消息——由相应的消息头和消息体组成的xml文件,一旦消息准备完毕,就会把这些消息通过HTTP、JMS等方式发送出去。如果axis2加载了其他的WS-*模块,那么在发送之前会使用这些模块对消息做相应的处理。消息达到接收者一方,会被接收者的监听端口所接收,并对消息做一定的处理,然后转化到消息处理逻辑。
那么axis2是如何处理消息的呢?
Axis2的消息发送端或者接收端可以以事务的方式来处理,从Axis2的角度看,其结构如下:
在任一端,都有一个应用用来处理(发送或者接收)消息,而消息在由发送者真正发出之前或者由接收者初始接收之后,都可以配置一系统handlers对消息进行处理。Web services的价值就是对于发送者或者接收者来说,他们不必在同一平台,更不需要在一个应用系统中。假设Axis2已经运行在发送者或接收者两端,那么处理过程如下:
- 发送者创建SOAP消息
- Axis对消息处理一些必要的操作(由handler部分完成),例如加密等
- Transport sender发送消息
- 在另一端,Transport listener检测消息
- Transport listener把检测到的消息传递给handlers
- 一旦消息进入 "pre-dispatch"阶段,被处理过的消息就会被发送到具体的应用处理者那里进行业务的处理。
在axis2中,上面这些操作被分隔成不同的phases,例如"pre-dispatch", "dispatch", "message processing"等。每个phase都是一系列handler的集合。你可以控制哪些handler出现在哪里phase里,以及这里handler的执行顺序,开发者也可以定义自己的handler及phase并加入到上面的过程中。
Axis2中内置的一些module里的handlers也可以加入到上面的处理流程中。