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)
  • 服务配置(services.xml)
  • 模块配置 (module.xml)

全局配置

书写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之后被触发。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值