Axis2中有三种配置文件来配置系统。第一个是配置全局系统(全局配置),第二个是配置一个服务(服务配置),第三个是配置一个模块(模块配置)。
axis2.xml位于AXIS2_HOME/conf目录下面,在此文件中可以看到位于根元素下面有六个顶层元素:
Parameter
在Axis2中,一个参数就是一个键值对。axis2.xml中的顶层parameter都会被传送到AxisConfiguration类的属性中。因此,axis2.xml中顶层parameters都可以通过AxisConfiguration访问。parameter定义的格式为:
parameter value
Transport Receiver
根据Axis2运行的底层传输协议,你需要不同的接受者(transport receiver).配置方式如下:
6060
Transport Sender
类似传输接收者,同样可以注册传输发送者,并且在运行时可以使用这些发送者来发送消息。例如,假设Axis2运行在tomcat下面,那么Axis2可以使用TCP传输发送者来发送消息,而不是HTTP。配置方式如下:
HTTP/1.0
name:传输方式名称(可以使用HTTP和HTTP1作为传输名称)
Phase Order
使用流程顺序(Phase Order)来指定执行链中的流程顺序。配置如下:
.
.
最有趣的是你也可以在此处添加处理器(handlers)。如果你想在那个阶段(流程)添加一个处理器,你可以直接添加一个处理器元素。完整的配置如下(Axis2 1.6.2):
type: 表示流(可以理解为数据流)的类型。只能是下面几种:
另外,"phaseOrder"下的子元素只能是"phase"。"phase"表示执行链中的可用阶段(phase)。在流程顺序中指定流程的方式:
name: 阶段(流程)的名称。
修改phaseOrder需要注意一下几点:
For the phaseOrder types "InFlow" and "InFaultFlow"
For the phaseOrder types "OutFlow" and "OutFaultFlow"
Module REferences
如果你想激活一个模块,系统级别,有可以在axis2.xml中添加一个顶层的模块元素。类似这样:
Listener(Observers)
Axis2中,AxisConfiguration是可见的,因此你可以注册观察者。当AxisConfiguration发生变化时,会自动通知这些观察者。在当前的实现中,下列事件发生时会通知观察者。
http://127.0.0.1/rss
class:
观察者的实现类,需要实现AxisObserver接口,并且类要位于classpath中。
services.xml用来描述服务。每个服务归档文件都需要一个services.xml,并且在归档文件(aar)中需要在META-INF目录下面。独立应用时,归档文件需要放在AXIS2_HOME/repository/services下面;war应用时,需要放在servlet容器的axis2/WEB-INF/services下面。services.xml的简单例子如下:
The description of the service
HTTP
org.apache.axis2.sample.echo.EchoImpl
Mapping to action
name: 如果.aar文件只包含一个服务,那么服务名称就是这个归档文件名;否则,服务名称将会是这里name属性指定的名称。
scope: (Optional Attribute) 已部署服务的运行信息可用的周期。有下面几种"application", "soapsession", "transportsession", "request". 默认值(不设置的话) 是 "request"
class: (Optional attribute) 服务生命周期实现类的完全限定名。ServiceLifeCycle类在你想要在系统启动、关闭时做一些事情的时候。
targetNamespace: (Optional Attribute) 服务的目标namespace.这个值在生成WSDL文件的时候使用。如果不指定,将使用服务实现类的包名。
Description: (Optional) 如果你想通过Axis2 web-admin模块展示服务的描述信息,可以在此处指定。
transports : (Optional)服务暴露的传输方式。如果此处没有指定,服务将暴露在系统所有可用的传输方式中。transport子元素指定传输前缀(axis2.xml中指定的transports名称).
parameters: services.xml可以有任意数目的顶层参数,并且所有指定的参数都会被传递到对应的AxisService的服务属性中。services.xml中的一个必需的属性是ServiceClass,它是一个java类,用来执行上面的传输;这个类被MessageReceiver加载。
operations : 如果服务的实现类是Java,那么服务中的所有共有类都会暴露。如果用户想重写,需要添加一个"operation"标签并且重写它。在非java的场景下,或者没有服务类的情况下,用户想暴露的所有服务都需要在services.xml中指定。例如:
唯一的必需属性是"name",表示将要暴露的操作名称。任何操作都可以包含模块引用,以及任意数量的参数。最有趣的是,你可以为每个操作注册定制的消息接收者。如果不指定,将使用默认的消息接收者(axis2.xml).
3、模块配置(module.xml)
.
.
.
.
.
.
.
.
10
class: (Optional attribute) 指定模块的实现类。一个模块可能也可能不包含模块实现类,因为模块也可以是一系列的handlers。如果一个模块包含实现了org.apache.axis2.modules.Module的实现类,那么部署时,它的init()方法会被调用。
parameter: 一个模块可以包含任意数量的参数,并且module.xml中列出的所有参数都会传递给对应的AxisModule。
flow: 定义流需要完成的handlers.有四种类型的流
可以添加任意数量的handlers到一个流中,并且在运行时对应的链表中,这些handlers都将可用。
operations: 如果一个模块在超服务激活时想添加操作,可以在module.xml中添加一个operation标签。在module.xml中指定一个操作的方法和在services.xml中一样。
handler: handler元素包含必须的和可选的属性。定义一个handler的方法如下:
必需的属性: