Axis2(一):配置指导

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定义的格式为:

  1. <parameter name="name of the parameter" >parameter value </parameter>

Transport Receiver

根据Axis2运行的底层传输协议,你需要不同的接受者(transport receiver).配置方式如下:

  1. <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
  2.     <parameter name="port" >6060</parameter>
  3. </transportReceiver>

<transportReceiver/>元素的"name"属性表示传输接收者(Transport Receiver)的类型。可以是HTTP,TCP,SMTP,CommonsHTTP等。当系统启动或者在客户端设置了传输方式(transport)后,可以使用名称(name属性)来加载合适的传输方式。"class"属性指定实现了transport必需的接口的java类。任何传输方式都可以有一个或多个参数,并且对应的传输接收者(Transport Receiver)可以访问这些参数。

Transport Sender
类似传输接收者,同样可以注册传输发送者,并且在运行时可以使用这些发送者来发送消息。例如,假设Axis2运行在tomcat下面,那么Axis2可以使用TCP传输发送者来发送消息,而不是HTTP。配置方式如下:

  1. <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
  2.         <parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter>
  3.  </transportSender>

name:传输方式名称(可以使用HTTP和HTTP1作为传输名称)

class:对应传输方式的实现类。

Phase Order
使用流程顺序(Phase Order)来指定执行链中的流程顺序。配置如下:

  1. <phaseOrder type="InFlow">
  2.          <phase name="TransportIn"/>
  3.          .
  4.          .
  5. </phaseOrder>

最有趣的是你也可以在此处添加处理器(handlers)。如果你想在那个阶段(流程)添加一个处理器,你可以直接添加一个处理器元素。完整的配置如下(Axis2 1.6.2):

  1. <!-- ================================================= -->
  2.     <!-- Phases  -->
  3.     <!-- ================================================= -->
  4.     <phaseOrder type="InFlow">
  5.         <!--  System predefined phases       -->
  6.         <phase name="Transport">
  7.             <handler name="RequestURIBasedDispatcher"
  8.                      class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
  9.                 <order phase="Transport"/>
  10.             </handler>
  11.             <handler name="SOAPActionBasedDispatcher"
  12.                      class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
  13.                 <order phase="Transport"/>
  14.             </handler>
  15.         </phase>
  16.         <phase name="Addressing">
  17.             <handler name="AddressingBasedDispatcher"
  18.                      class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
  19.                 <order phase="Addressing"/>
  20.             </handler>
  21.         </phase>
  22.         <phase name="Security"/>
  23.         <phase name="PreDispatch"/>
  24.         <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
  25.             <handler name="RequestURIBasedDispatcher"
  26.                      class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
  27.             <handler name="SOAPActionBasedDispatcher"
  28.                      class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
  29.             <handler name="RequestURIOperationDispatcher"
  30.                      class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
  31.             <handler name="SOAPMessageBodyBasedDispatcher"
  32.                      class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
  33.             <handler name="HTTPLocationBasedDispatcher"
  34.                      class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
  35.             <handler name="GenericProviderDispatcher"
  36.                      class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
  37.             <handler name="MustUnderstandValidationDispatcher"
  38.                      class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
  39.         </phase>
  40.         <phase name="RMPhase"/>
  41.         <!--  System predefined phases       -->
  42.         <!--   After Postdispatch phase module author or service author can add any phase he want      -->
  43.         <phase name="OperationInPhase">
  44.             <handler name="MustUnderstandChecker"
  45.                      class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">
  46.                 <order phase="OperationInPhase"/>
  47.             </handler>
  48.         </phase>
  49.         <phase name="soapmonitorPhase"/>
  50.     </phaseOrder>
  51.     <phaseOrder type="OutFlow">
  52.         <!--      user can add his own phases to this area  -->
  53.         <phase name="soapmonitorPhase"/>
  54.         <phase name="OperationOutPhase"/>
  55.         <!--system predefined phase-->
  56.         <!--these phase will run irrespective of the service-->
  57.         <phase name="RMPhase"/>
  58.         <phase name="PolicyDetermination"/>
  59.         <phase name="MessageOut"/>
  60.         <phase name="Security"/>
  61.     </phaseOrder>
  62.     <phaseOrder type="InFaultFlow">
  63.         <phase name="Addressing">
  64.             <handler name="AddressingBasedDispatcher"
  65.                      class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
  66.                 <order phase="Addressing"/>
  67.             </handler>
  68.         </phase>
  69.         <phase name="Security"/>
  70.         <phase name="PreDispatch"/>
  71.         <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
  72.             <handler name="RequestURIBasedDispatcher"
  73.                      class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
  74.             <handler name="SOAPActionBasedDispatcher"
  75.                      class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
  76.             <handler name="RequestURIOperationDispatcher"
  77.                      class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
  78.             <handler name="SOAPMessageBodyBasedDispatcher"
  79.                      class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
  80.             <handler name="HTTPLocationBasedDispatcher"
  81.                      class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
  82.             <handler name="GenericProviderDispatcher"
  83.                      class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
  84.             <handler name="MustUnderstandValidationDispatcher"
  85.                      class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
  86.         </phase>
  87.         <phase name="RMPhase"/>
  88.         <!--      user can add his own phases to this area  -->
  89.         <phase name="OperationInFaultPhase"/>
  90.         <phase name="soapmonitorPhase"/>
  91.     </phaseOrder>
  92.     <phaseOrder type="OutFaultFlow">
  93.         <!--      user can add his own phases to this area  -->
  94.         <phase name="soapmonitorPhase"/>
  95.         <phase name="OperationOutFaultPhase"/>
  96.         <phase name="RMPhase"/>
  97.         <phase name="PolicyDetermination"/>
  98.         <phase name="MessageOut"/>
  99.         <phase name="Security"/>
  100.     </phaseOrder>

type: 表示流(可以理解为数据流)的类型。只能是下面几种:

  • InFlow
  • OutFlow
  • InFaultFlow
  • OutFaultFlow

另外,"phaseOrder"下的子元素只能是"phase"。"phase"表示执行链中的可用阶段(phase)。在流程顺序中指定流程的方式:

  1. <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中添加一个顶层的模块元素。类似这样:

  1. <module ref="addressing"/>

Listener(Observers)Axis2中,AxisConfiguration是可见的,因此你可以注册观察者。当AxisConfiguration发生变化时,会自动通知这些观察者。在当前的实现中,下列事件发生时会通知观察者。

  • Deploying a Service
  • Removing a service
  • Activate/Inactivate Service
  • Module deploy
  • Module remove

注册观察者有时很有用,例如Rss feed generation,他可以给订阅者提供服务。正确注册观察者的方式如下:

  1. <listener class="org.apache.axis2.ObserverIMPL">
  2.     <parameter name="RSS_URL" >http://127.0.0.1/rss</parameter>
  3. </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的简单例子如下:

  1. <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">
  2.     <Description> The description of the service  </Description>
  3.     <transports>
  4.         <transport>HTTP</transport>
  5.     </transports>
  6.     <schema schemaNamespace="schema namespace"/>
  7.     <messageReceivers>
  8.             <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
  9.                              class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  10.     </messageReceivers>
  11.     <parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.sample.echo.EchoImpl</parameter>
  12.     <operation name="echoString" mep="operation MEP">
  13.         <actionMapping>Mapping to action</actionMapping>
  14.         <module ref=" a module name "/>
  15.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
  16.     </operation>
  17. </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中指定。例如:

  1. <operation name="echoString">
  2.         <module ref=" a module name "/>
  3.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
  4.     </operation>

唯一的必需属性是"name",表示将要暴露的操作名称。任何操作都可以包含模块引用,以及任意数量的参数。最有趣的是,你可以为每个操作注册定制的消息接收者。如果不指定,将使用默认的消息接收者(axis2.xml).3、模块配置(module.xml)
module.xml用来描述模块。每个模块归档文件都需要有一个module.xml,并且要放在归档文件(mar)的META-INF目录下面。独立应用时,模块归档文件需要放置在AXIS2_HOME/repository/modules目录下;在war包部署时,需要放置在servlet容器的axis2/WEB-INF/modules目录下。一个简单的例子:

  1. <module class="org.apache.module.Module1Impl">
  2.     <InFlow>
  3.         .
  4.         .
  5.     </InFlow>
  6.     <OutFlow>
  7.         .
  8.         .
  9.     </OutFlow>
  10.     <OutFaultFlow>
  11.         .
  12.         .
  13.     </OutFaultFlow>
  14.     <InFaultFlow>
  15.         .
  16.         .
  17.     </InFaultFlow>
  18.     <operation name="creatSeq" mep="MEP_URI_IN_OUT">
  19.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
  20.         <parameter name="para1" locked="xsd:true">10</parameter>
  21.     </operation>
  22. </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的方法如下:

  1. <handler name="handler1" class="handlerClass ">
  2.             <order phase="userphase1" />
  3. </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


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。