配置全局信息需要编写axis2.xml文件,在axis2.xml文件中,顶级元素有六个,它们分别为:
Parameter
Transport Receiver
Transport Sender
Phase Order
Module References
Listeners(Observers)
Parameter参数是个name value pair,每一个在AxisConfiguration中都会被转换为properties。因此parameters级别配置的文档可以在运行时通过AxisConfiguration得到。正确的配置方法为
<parameter name=”name of the parameter”> parameter value </parameter>
传输接收器,axis2接收消息可以采用不同的协议,需要对所采用的传输协议进行定义。定义格式:
<transportReceiver name=”http” class=”org.apache.axis2.transport.http.SimpleHTTPServer”>
<parameter name=”port”>6060</parameter>
</transportReceiver>
以上设置传输协议为http ,端口是6060。也可以设置其他的传输协议。
运行时使用sender发送消息,例如axis2运行于tomcat下,axis使用TCP transport senders 来发送消息而不是HTTP,定义的transport sender的格式如:
<transportSender name=”http” class=”org.apache.axis2.transport.http.CommonsHTTPTransportSender”>
<parameter name=”PROTOCOL”locked=”xsd:false”>HTTP/1.0</parameter>
</transportSender>
规范phases在执行链中的顺序,使用phase order元素来设置。
<phaseOrder type=”inflow”>
<phase name=”TransportIn”/>
</phaseOrder>
如果想在某个phase中添加一个handler,可以直接将handler元素添加到phaseOrder中。
Phaseorder的添加是在系统的预定义的phase 之后。
如果在顶层元素添加 module的 ref ,则整个模块对全局有用。
<module ref=”addressing”/>
在Axis2中,AxisConfiguration是可监测的,可以注册进观察者,在当一个AxisConfiguration发生改变时它们将会被自动通知。当前观察者的实现如下事件:
部署一个服务时
删除一个服务
激活一个服务或是将服务变成非激活
部署模块
删除模块
注册对于那业附加特性的服务注册观察者是很有用的,如RSS feed生成器将为用户提供服务信息。注册观察者格式:
<listener class=”org.apache.axis2.ObserverIMPL”>
<parameter name=”RSS_URL”>http://127.0.0.1/rss</parameter>
</listener>
其中的class代表 observer类的实现,并且需要说明的是类的实现要实现AxisObserver 接口,类要能在classpath中获得。
services.xml文件放于META-INF目录下,它的简单结构如下表所示 :
<service name="name of the service" scope="name of the scope" targetNamespace="target namespase for the service"> <description> The description of the service? </description>?
<transports> transport>HTTP</transport> </transports>
<schema schemaNamespace="schema namespace"/> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.sample.echo.EchoImpl</parameter> <operation name="echoString" mep="operation MEP"> <actionMapping>Mapping to action</actionMapping> <module ref=" a module name "/> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </operation> </service> |
其中涉及到的相关元素的说明:
name: 服务的名称,和aar文件名相同。
scope: 需要部署的服务的scope, scope可以是四种的一种:Application,SOAPSessioin,TransportSession,Request。
targetNamespace; 服务的目标名称空间,当产生wsdl文件时要用到这个元素。
description:可选的元素。只是进行描述。
transports: 可选元素。Transport服务将被暴露(exposed)。
parameter: 必须有的元素。规范工作的服务类和被MessageReceiver装载。
Operations:暴露的操作
<operation name=”echoString”>
<module ref=” a module name”/>
<messageReceiver class=”org.apache.axis2.receivers.RawXMLINOutMessageReceiver”/>
</operation>
此处必须有的属性是name,它代表了哪个操作名将暴露。操作也可以有module reference 和多个参数。
module.xml文件也是存于归档文档的META-INF目录下,简单如下:
<module class=”org.apache.module.ModuleImpl”>
<inflow>
...
</inflow>
<outflow>
…
</outflow>
<Outfaultflow>
…
</Outfaultflow>
<INfaultflow>
…
</INfaultflow>
<operation name=”createSeq” mep=”MEP_URI_IN_OUT”>
<messageReceiver class=”org.apache.axis2.receivers.RawXMLINOutMessageReceiver”/>
<parameter name=”para1” locked=”xsd:true”>10</parameter>
</operation>
在模块中有四种流flow:
Inflow;Outflow;INOutfaultflow;Outfaultflow
元素operations:如果一个模块在它被用到service中时想要向其中添加操作,则可以在module.xml文件中添加operation标记,这个operation的添加和services.xml文件中的方法一样。
Handler:handler元素包含有强制性的属性和可选的属性,定义handler的方法:
<handler name=”handler1” class=”handlerClass”>
<order phase=”userphase1”/>
</handler>
在handler中必须有的属性有:
name(handler的名称);
class(handler的实现类);
phase(handler所在的执行链中的阶段phase)
在handler中的可选属性:
phaseLast: 说明handler是这个phase的最后一个handler
phaseFirse: 说明handler是这个phase的头一个handler
before:handler应该在规定的handler之前调用
after: 在规定的handler之后调用