Axis2 的部署描述文件共分三种:
全局部署描述文件 (axis2.xml)
Axis2 Webservice 部署描述文件 (services.xml)
Axis2 功能模块部署描述文件 (module.xml)
全局都放在 axis2.xml 文件中,比如一些全局参数(如是否支持热部署),
支持各种协议的消息发送类等, axis2 启动时会首先找这个文件,
如果在 repository 中找不到,会加载类路径下缺省的 axis2_default.xml 文件。
services.xml用于部署用户定义的webservice ,在 Axis1.x 中,
部署自己的一下service是比较麻烦的,axis2 这方面改进得比较好,
首先写一个自己的业务类,不需要实现任何接口,然后在 services.xml
文件对自己所要提供服务的方法设置就 ok 了.
services.xml
最外边serviceGroup代表一组服务,其间可以容纳多个service ,
service就代表一个用户定义的一个服务,
description 是该服务一个简单描述,没有什么实际意义,
parameter这里定义一个比较重要的参数ServiceClass ,既用户自己写的提供
服务的简单的 javaBean ,
operation 声明这个服务对外提供具体的操作,
name指操作名,注意这个操作名在自己的 ServiceClass 中
必须存在这样一个 public 的方法,
messageReceiver 定义这个操作的消息接收类,
这个class使用的选择与用户自定义的服务运行方式有关,
Axis2提供了两种主要的MEP(消息交换方式):
IN-ONLY(收到请求执行某一操作),
IN-OUT(收到请求执行某一操作后返回一个响应消息纵给客户端),
这里选择RawXMLINOutMessageReceiver表示采用IN-OUT这种方式。
最后还有 module.xml ,这也是 axis2 一个比较有特色的地方,
用户可以自己开发对 soap 消息处理的功能块,可以很方便地加入到 axis2
核心系统中,一个功能模块可以定义为全局的,请求所有服务都能执行到,
也可以定义为服务级别,只有请求某个特定的服务才能执行到,或操作级别的,
请求某个服务某个操作才能执行到。
Axis2可以单独启动提供服务,Axis2 提供了一下
org.apache.axis2.transport.http.SimpleHTTPServer 类来启动整个系统,
但一般实际应用将 Axis2 和 Servlet Container 绑定在一起
(可能是成熟的 Servlet Container 在多线程管理方面更加稳定同时
也便于与 web application 进行交互)。
Axis2 由 Servlet 引导启动的时序,首先当然是 Servlet Container
调用 AxisServlet 的 init(ServletConfig) 方法,总的次序是:
先加载 axis2.xml 全局配置,其次加载 repository 下 modules ,
最后加载 services 。