Axis2配置指南

In Axis2, there are three kinds of configuration files to configure the system. The first one is to configure the whole system (global configuration), the second one is to configure a service (service configuration), and the third one is to configure a module (module configuration). This document explains the above configurations in detail.

在Aixs2中,有三个文件可以用来配置系统。第一个配置整个系统(全局配置),第二个配置一个服务(服务配置),第三个配置一个模块(模块配置)。本文档详细介绍上面的配置。

内容

全局配置

书写axis2.xml

所有在启动axis2时需要的配置信息都从axis2.xml中取得。指明它们的方法非常简单和容易。此部分都是关于如何在axis2中以合适的方式指定配置信息的,在配置文件中可以看到六个顶级元素,如下:

Parameter Transport Receiver Transport Sender Phase Order Module References Listeners (Observers)

Parameter:在Axis2中,parameter(参数)就是一个名-值对,axis2.xml中的每个顶级parameter元素将都被转换成AxisConfiguration中的属性,因此,配置文档中的顶级参数都可以在运行时环境中通过AxisConfiguration得到。下面是定义参数的正确的方法: <parameter name="name of the parameter"></parameter>

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

TransportReceiver:依赖于Axis2可能需要运行于其上的传输协议(Depending on the underlying transport on which Axis2 is going to run,),你需要不同的传输接收端。在系统中加入它们的方式如下:

<transportreceiver class="org.apache.axis2.transport.http.SimpleHTTPServer" name="http"> </transportreceiver>

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

上面的元素说明了如何在axis2.xml中定义传输接收端,这里,transportReceiver标签中的name属性标识指明传输接收端的类型,它可以是http,tcp,smtp,CommonsHTTP等。当系统启动或者你在客户端设置传输器(transport)的时候,你可以使用这些传输名字(transport names)装载合适的传输器。class属性是为了指明为该传输器实现需要的接口的实际的java类。任何的传输都可以有0个或多个参数,任何给定的参数可以通过相应的传输接收端访问。

Transport Sender:正如传输接收者,你可以在系统中注册传输发送者,也可以在运行时进行。发送者可以用来发送消息。例如,假设Axis2运行于Apache Tomcat中。那么Axis2可以使用TCP传输发送器来发送消息,而不是http。指明传输发送者的方法如下:

xml 代码

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

name:传输的名字,可以是http或者http1。

class:相应传输的实现类。

和传输接收者一样,传输发送者可以有0个或多个参数(例如例子中有一个parameter),如果存在,它们可以通过相应的传输发送者得到。

 Phase Order:指明执行链中阶段的顺序必须使用phase order元素。如下:

xml 代码

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

最有趣的是你也可以在这里添加handler。如果你想要添加一个handler到一个阶段中,你可以直接通过在它里面添加一个handler元素来实现。除此之外,Axis2中没有其他的进行handler链硬编码的地方。因此,所有的那些配置也在phase order元素中完成。完整的代码如下:

xml 代码

  1. <phaseOrder type="InFlow">  
  2.           
  3.          <phase name="Transport">  
  4.             <handler name="RequestURIBasedDispatcher"  
  5.                      class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">  
  6.                 <order phase="Transport"/>  
  7.             handler>  
  8.   
  9.             <handler name="SOAPActionBasedDispatcher"  
  10.                      class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">  
  11.                 <order phase="Transport"/>  
  12.             handler>  
  13.         phase>  
  14.         <phase name="Security"/>  
  15.         <phase name="PreDispatch"/>  
  16.         <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">  
  17.             <handler name="AddressingBasedDispatcher"  
  18.                      class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">  
  19.                 <order phase="Dispatch"/>  
  20.             handler>  
  21.   
  22.             <handler name="SOAPMessageBodyBasedDispatcher"  
  23.                      class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher">  
  24.                 <order phase="Dispatch"/>  
  25.             handler>  
  26.   
  27.             <handler name="InstanceDispatcher"  
  28.                      class="org.apache.axis2.engine.InstanceDispatcher">  
  29.                 <order phase="Dispatch"/>  
  30.             handler>  
  31.         phase>  
  32.           
  33.           
  34.         <phase name="OperationInPhase"/>  
  35.     phaseOrder>  
  36.     <phaseOrder type="OutFlow">  
  37.           
  38.         <phase name="OperationOutPhase"/>  
  39.           
  40.           
  41.         <phase name="MessageOut"/>  
  42.         <phase name="PolicyDetermination"/>  
  43.     phaseOrder>  
  44.     <phaseOrder type="InFaultFlow">  
  45.         <phase name="PreDispatch"/>  
  46.         <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">  
  47.             <handler name="RequestURIBasedDispatcher"  
  48.                      class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">  
  49.                 <order phase="Dispatch"/>  
  50.             handler>  
  51.   
  52.             <handler name="SOAPActionBasedDispatcher"  
  53.                      class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">  
  54.                 <order phase="Dispatch"/>  
  55.             handler>  
  56.   
  57.             <handler name="AddressingBasedDispatcher"  
  58.                      class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">  
  59.                 <order phase="Dispatch"/>  
  60.             handler>  
  61.   
  62.             <handler name="SOAPMessageBodyBasedDispatcher"  
  63.                      class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher">  
  64.                 <order phase="Dispatch"/>  
  65.             handler>  
  66.             <handler name="InstanceDispatcher"  
  67.                      class="org.apache.axis2.engine.InstanceDispatcher">  
  68.                 <order phase="Dispatch"/>  
  69.             handler>  
  70.         phase>  
  71.           
  72.         <phase name="OperationInFaultPhase"/>  
  73.     phaseOrder>  
  74.     <phaseOrder type="OutFaultFlow">  
  75.           
  76.         <phase name="OperationOutFaultPhase"/>  
  77.         <phase name="PolicyDetermination"/>  
  78.         <phase name="MessageOut"/>  
  79.     phaseOrder>  

type:代表流的类型的属性,只能是以下几种:

InFlow OutFlow InFaultFlow OutFaultFlow

除此之外,允许在phaseOrder内出现的元素是phase元素。phase元素代表了执行链中可用的phases。在phaseOrder中指明phase的方法如下:

xml 代码

  1. <phase name="Transport"/>  

name:phase的名字。

 改变phaseOrder的时候,必须牢记一些事情:

如果phaseOrder的类型是InFlow和InFaultFlow

1.  所有在"Dispatch"阶段(phase)上的阶段,包括它本身,都是全局阶段(Global Phase)。你可以在这里添加任意数量的新阶段,这些阶段都可以被认为是全局的。

2.在这两个phaseOrder类型中,添加在Dispatch之后的阶段,被认为是操作阶段(Operation Phase)。

如果phaseOrder类型是OutFlow和OutFaultFlow

1.所有在"MessageOut"阶段(phase)下的阶段,包括它本身,都是全局阶段(Global Phase)。你可以根据需求添加任意新的阶段。

2.添加在MessageOut阶段之前的阶段被认为是操作阶段。

注意:如果你认真观者默认的axis2.xml,你讲可以明确得发现这些。

Module References

如果你想要在系统范围内启用一个模块,你可以通过在axis2.xml文件中增加一个顶级模块元素来实现,例如:

xml 代码

  1. <module ref="addressing" />  

ref:将要被启用的模块的名字,系统范围。

Listeners(Observers):在Axis2中,AxisConfiguration是可被监听的,因此你可以把监听器注册进去。当AxisConfiguration发生改变时,监听器会自动得被通知到。就现在的实现而言,监听器会被通知到下述事件:

Deploying a service

Removing a service

Activate/Inactivate Service

Module deploy

Module Remove

注册监听器对附加的功能非常有用,例如RSS种子的生成,它将向订阅者提供服务信息。下面是注册监听器的正确方法:

xml 代码

  1. <listener class="org.apache.axis2.ObserverIMPL">  
  2.     <parameter name="RSS_URL" >http://127.0.0.1/rssparameter>  
  3. listener>  

class:代表监听器的实现类,需要注意该实现类必须实现AxisObserver接口,并且必须在classpath中。

服务配置(Service Configuration)

书写services.xml:服务的描述使用services.xml指明。每个服务.aar文件都需要一个services.xml文件以便成为有效的服务,并且这个文件应该放置在META-INF目录下。一个非常简单的services.xml如下:

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.   
  4.     <transports>    
  5.        <transport>HTTPtransport>  
  6.     transports>  
  7.        
  8.     <schema schemaNamespace="schema namespace"/>    
  9.         
  10.     <messageReceivers>  
  11.             <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"  
  12.                              class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>  
  13.     messageReceivers>  
  14.         
  15.      <parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.sample.echo.EchoImplparameter>  
  16.        
  17.     <operation name="echoString" mep="operation MEP">    
  18.         <actionMapping>Mapping to actionactionMapping>  
  19.         <module ref=" a module name "/>  
  20.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>  
  21.     operation>  
  22.   service>  

 name:服务的名字将会是.aar文件的名字,如果该文件中只包含一个服务。或者,将是此name属性指定的名字。

scope:(可选属性)说明部署的服务的运行时信息在什么时间段是有效的。该范围有几种类型,"Application","SOAPSession","TransportSession","Request",默认值是"Request"。

class:(可选属性)服务生命周期实现类的全名。服务生命周期类可以在系统启动和关闭是做一些任务。

targetNameSpace:(可选属性)服务的命名空间。这个值将在生成WSDL时用到。如果不指定,这个值将会根据服务实现类的包名生成。

description:(可选)如果你想通过Axis2 web-admin模块显示关于service的描述,可以使用该标签。

transports:(可选)服务将被发布成什么传输方式。如果transport标签没有出现,那么服务将会以系统中支持的所有传输协议发布。transport子元素指明传输前缀(也就是axis2.xml指定的传输的名字)。

parameters:services.xml可以包含任意数量的顶级parameters,所有的指定的parameters将会转换成相应的AxisService中的服务属性。services.xml中有一个强制性参数叫做ServiceClass指定java类,该java类执行上面的转换,这个类由MessageReceiver装载。

operations:如果服务实现类是java,该服务中所有的公用方法都会被公开。如果用户想覆盖它,就需要使用"operations"标签。在一个非java环境或者没有服务类的情况下,用户想发布的所有方法都必须在services.xml中指定。例如:

xml 代码

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

name是唯一必须的属性,它代表将被发布的操作的名字。操作可以包含模块指针也可以包括任何数量的参数。最有趣的是你可以为每个操作注册客户消息接收器。从而,注册的消息接收器将成为相应的操作的消息接收器。如果你不指定消息接收器,那么默认的消息接收器将执行操作。

模块配置(Module Configuration)

书写module.xml

模块的描述使用module.xml描述。每个mar文件需要module.xml文件以便成为有效的模块,并且,这个文件需要放在模块的META-INF文件夹下。下面是一个非常简单的module.xml文件。

xml 代码

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

class:(可选参数)说明模块的实现类,一个模块可以包含实现类,也可以不包含实现类,这是因为模块也可以是handler的集合。如果一个模块包含了实现了org.apache.axis2.modules.Module接口的实现类,那么在部署时,它的init()方法将会被调用。

parameter:一个模块可以包含任意数量的参数,所有在module.xml中列出来的参数将被转换成这个module的相应的AxisModule。

flow:在模块中定义handlers必须定义在flows当中。总共有4种flows的类型。

你可以在一个flow当中添加任意数量的handlers。当启动时,那些handlers将会在相应的链中。

(原文:You can add any number of handlers into a flow, and those handlers will be available in the corresponding chains at runtime, when they are engaged.)

InFlow

OutFlow

InFaultFlow

OutFaultFlow

operations:如果一个模块想在它在某个服务中启动时增加一个操作的话,可以通过在module.xml中增加一个operation标签。这里声明操作的方法与在services.xml中声明操作的方法相同。

handler:handler元素由必须的和可选的属性组成。定义一个handler的方法如下:

xml 代码

  1. <handler name="handler1" class="handlerClass ">  
  2.             <order phase="userphase1" />  
  3.  handler>  

必须的属性:

name:handler的名字。

class:handler的实现类。

phase:handler在执行链中应该所处的阶段的名字。

可选的属性:

phaseLast:说明handler是phase中的最后一个。

phaseFirst:说明handler是phase中的第一个。

before:说明当前handler应该在被before标识的handler之前被触发。

after:说明当前handler应该在被after标识的handler之后被触发。

猜你喜欢

转载自blog.csdn.net/a1510841693/article/details/86681805