Axis2配置指南(翻译)

来源:互联网 发布:oracle sql删除字段 编辑:程序博客网 时间:2024/05/22 10:42

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>


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

     

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

        <parameter name="port" >6060parameter>

    </transportreceiver>

     

     

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


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

    xml 代码
    <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">  
         <parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0parameter>
    </transportSender>

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

    class:相应传输的实现类。

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



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

    xml 代码
    <phaseOrder type="InFlow"> 
       <phase name="TransportIn"/>  
       .
       .
    </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之后被触发。