Axis2中有三种配置文件来配置系统。第一个是配置全局系统(全局配置),第二个是配置一个服务(服务配置),第三个是配置一个模块(模块配置)。
1、全局配置(axis2.xml)
axis2.xml位于AXIS2_HOME/conf目录下面,在此文件中可以看到位于根元素下面有六个顶层元素:
- Parameter
- Transport Receiver
- Transport Sender
- Phase Order
- Module Reference
- Listener(Observers)
Parameter
在Axis2中,一个参数就是一个键值对。axis2.xml中的顶层parameter都会被传送到AxisConfiguration类的属性中。因此,axis2.xml中顶层parameters都可以通过AxisConfiguration访问。parameter定义的格式为:
- <parameter name="name of the parameter" >parameter value </parameter>
Transport Receiver
根据Axis2运行的底层传输协议,你需要不同的接受者(transport receiver).配置方式如下:
- <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
- <parameter name="port" >6060</parameter>
- </transportReceiver>
<transportReceiver/>元素的"name"属性表示传输接收者(Transport Receiver)的类型。可以是HTTP,TCP,SMTP,CommonsHTTP等。当系统启动或者在客户端设置了传输方式(transport)后,可以使用名称(name属性)来加载合适的传输方式。"class"属性指定实现了transport必需的接口的java类。任何传输方式都可以有一个或多个参数,并且对应的传输接收者(Transport Receiver)可以访问这些参数。
Transport Sender
类似传输接收者,同样可以注册传输发送者,并且在运行时可以使用这些发送者来发送消息。例如,假设Axis2运行在tomcat下面,那么Axis2可以使用TCP传输发送者来发送消息,而不是HTTP。配置方式如下:
- <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
- <parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter>
- </transportSender>
name:传输方式名称(可以使用HTTP和HTTP1作为传输名称)
Phase Order
使用流程顺序(Phase Order)来指定执行链中的流程顺序。配置如下:
- <phaseOrder type="InFlow">
- <phase name="TransportIn"/>
- .
- .
- </phaseOrder>
最有趣的是你也可以在此处添加处理器(handlers)。如果你想在那个阶段(流程)添加一个处理器,你可以直接添加一个处理器元素。完整的配置如下(Axis2 1.6.2):
- <!-- ================================================= -->
- <!-- Phases -->
- <!-- ================================================= -->
- <phaseOrder type="InFlow">
- <!-- System predefined phases -->
- <phase name="Transport">
- <handler name="RequestURIBasedDispatcher"
- class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
- <order phase="Transport"/>
- </handler>
- <handler name="SOAPActionBasedDispatcher"
- class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
- <order phase="Transport"/>
- </handler>
- </phase>
- <phase name="Addressing">
- <handler name="AddressingBasedDispatcher"
- class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
- <order phase="Addressing"/>
- </handler>
- </phase>
- <phase name="Security"/>
- <phase name="PreDispatch"/>
- <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
- <handler name="RequestURIBasedDispatcher"
- class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
- <handler name="SOAPActionBasedDispatcher"
- class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
- <handler name="RequestURIOperationDispatcher"
- class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
- <handler name="SOAPMessageBodyBasedDispatcher"
- class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
- <handler name="HTTPLocationBasedDispatcher"
- class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
- <handler name="GenericProviderDispatcher"
- class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
- <handler name="MustUnderstandValidationDispatcher"
- class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
- </phase>
- <phase name="RMPhase"/>
- <!-- System predefined phases -->
- <!-- After Postdispatch phase module author or service author can add any phase he want -->
- <phase name="OperationInPhase">
- <handler name="MustUnderstandChecker"
- class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">
- <order phase="OperationInPhase"/>
- </handler>
- </phase>
- <phase name="soapmonitorPhase"/>
- </phaseOrder>
- <phaseOrder type="OutFlow">
- <!-- user can add his own phases to this area -->
- <phase name="soapmonitorPhase"/>
- <phase name="OperationOutPhase"/>
- <!--system predefined phase-->
- <!--these phase will run irrespective of the service-->
- <phase name="RMPhase"/>
- <phase name="PolicyDetermination"/>
- <phase name="MessageOut"/>
- <phase name="Security"/>
- </phaseOrder>
- <phaseOrder type="InFaultFlow">
- <phase name="Addressing">
- <handler name="AddressingBasedDispatcher"
- class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
- <order phase="Addressing"/>
- </handler>
- </phase>
- <phase name="Security"/>
- <phase name="PreDispatch"/>
- <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
- <handler name="RequestURIBasedDispatcher"
- class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
- <handler name="SOAPActionBasedDispatcher"
- class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
- <handler name="RequestURIOperationDispatcher"
- class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
- <handler name="SOAPMessageBodyBasedDispatcher"
- class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
- <handler name="HTTPLocationBasedDispatcher"
- class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
- <handler name="GenericProviderDispatcher"
- class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
- <handler name="MustUnderstandValidationDispatcher"
- class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
- </phase>
- <phase name="RMPhase"/>
- <!-- user can add his own phases to this area -->
- <phase name="OperationInFaultPhase"/>
- <phase name="soapmonitorPhase"/>
- </phaseOrder>
- <phaseOrder type="OutFaultFlow">
- <!-- user can add his own phases to this area -->
- <phase name="soapmonitorPhase"/>
- <phase name="OperationOutFaultPhase"/>
- <phase name="RMPhase"/>
- <phase name="PolicyDetermination"/>
- <phase name="MessageOut"/>
- <phase name="Security"/>
- </phaseOrder>
type: 表示流(可以理解为数据流)的类型。只能是下面几种:
- InFlow
- OutFlow
- InFaultFlow
- OutFaultFlow
另外,"phaseOrder"下的子元素只能是"phase"。"phase"表示执行链中的可用阶段(phase)。在流程顺序中指定流程的方式:
- <phase name="Transport"/>
name: 阶段(流程)的名称。
修改phaseOrder需要注意一下几点:
For the phaseOrder types "InFlow" and "InFaultFlow"
- "Dispatch"流程上面的所有流程,包括"Dispatch"流程,都是"全局流程"。可以在此处添加任意数量的新流程,他们为被认为是全局的。
- 在这两个phaseOrder类型中,"Dispatch"之后的流程被认为是"操作流程"。
For the phaseOrder types "OutFlow" and "OutFaultFlow"
- All the phases that are below the "MessageOut" phase, including the "MessageOut" phase, are known as "Global phases". You can add new phases according to your requirement.
- The phases added before the "MessageOut" phase are known as "Operation phases".
Module REferences
如果你想激活一个模块,系统级别,有可以在axis2.xml中添加一个顶层的模块元素。类似这样:
- <module ref="addressing"/>
Listener(Observers)Axis2中,AxisConfiguration是可见的,因此你可以注册观察者。当AxisConfiguration发生变化时,会自动通知这些观察者。在当前的实现中,下列事件发生时会通知观察者。
- Deploying a Service
- Removing a service
- Activate/Inactivate Service
- Module deploy
- Module remove
注册观察者有时很有用,例如Rss feed generation,他可以给订阅者提供服务。正确注册观察者的方式如下:
- <listener class="org.apache.axis2.ObserverIMPL">
- <parameter name="RSS_URL" >http://127.0.0.1/rss</parameter>
- </listener>
class: 观察者的实现类,需要实现AxisObserver接口,并且类要位于classpath中。
2、服务配置(services.xml)
services.xml用来描述服务。每个服务归档文件都需要一个services.xml,并且在归档文件(aar)中需要在META-INF目录下面。独立应用时,归档文件需要放在AXIS2_HOME/repository/services下面;war应用时,需要放在servlet容器的axis2/WEB-INF/services下面。services.xml的简单例子如下:
- <service name="name of the service" scope="name of the scope" class="full qualifide name the service lifecycle class" 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文件只包含一个服务,那么服务名称就是这个归档文件名;否则,服务名称将会是这里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中指定。例如:
- <operation name="echoString">
- <module ref=" a module name "/>
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
- </operation>
唯一的必需属性是"name",表示将要暴露的操作名称。任何操作都可以包含模块引用,以及任意数量的参数。最有趣的是,你可以为每个操作注册定制的消息接收者。如果不指定,将使用默认的消息接收者(axis2.xml).3、模块配置(module.xml)
module.xml用来描述模块。每个模块归档文件都需要有一个module.xml,并且要放在归档文件(mar)的META-INF目录下面。独立应用时,模块归档文件需要放置在AXIS2_HOME/repository/modules目录下;在war包部署时,需要放置在servlet容器的axis2/WEB-INF/modules目录下。一个简单的例子:
- <module class="org.apache.module.Module1Impl">
- <InFlow>
- .
- .
- </InFlow>
- <OutFlow>
- .
- .
- </OutFlow>
- <OutFaultFlow>
- .
- .
- </OutFaultFlow>
- <InFaultFlow>
- .
- .
- </InFaultFlow>
- <operation name="creatSeq" mep="MEP_URI_IN_OUT">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
- <parameter name="para1" locked="xsd:true">10</parameter>
- </operation>
- </module>
class: (Optional attribute) 指定模块的实现类。一个模块可能也可能不包含模块实现类,因为模块也可以是一系列的handlers。如果一个模块包含实现了org.apache.axis2.modules.Module的实现类,那么部署时,它的init()方法会被调用。
parameter: 一个模块可以包含任意数量的参数,并且module.xml中列出的所有参数都会传递给对应的AxisModule。
flow: 定义流需要完成的handlers.有四种类型的流
可以添加任意数量的handlers到一个流中,并且在运行时对应的链表中,这些handlers都将可用。
- InFlow
- OutFlow
- InFaultFlow
- OutFaultFlow
operations: 如果一个模块在超服务激活时想添加操作,可以在module.xml中添加一个operation标签。在module.xml中指定一个操作的方法和在services.xml中一样。
handler: handler元素包含必须的和可选的属性。定义一个handler的方法如下:
- <handler name="handler1" class="handlerClass ">
- <order phase="userphase1" />
- </handler>
必需的属性:
name: Name of the handler.
class: Handler implementation class.
phase: Name of the phase that the handler should remain, in the execution chain.
可选的属性:
phaseLast: Indicates that the handler is the last handler of the phase.
phaseFirst: Indicate that the handler is the first handler of the phase.
before : Indicates that the current handler should be invoked before the handler specified by the before handler
after: Indicates that the current handler should be invoked after the handler specified by the after handler
(文/TrendGrucee)
本文来源:http://blog.csdn.net/trendgrucee/article/details/13963615
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。