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

parameter value 
Transport Receiver

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


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

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


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

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

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


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


    
    
    
        
        
            
                
            
            
                
            
        
        
            
                
            
        
        
        
        
            
            
            
            
            
            
            
        
        
        
        
        
            
                
            
        
        
    
    
        
        
        
        
        
        
        
        
        
    
    
        
            
                
            
        
        
        
        
            
            
            
            
            
            
            
        
        
        
        
        
    
    
        
        
        
        
        
        
        
    

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

  • InFlow
  • OutFlow
  • InFaultFlow
  • OutFaultFlow

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

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

Listener(Observers)

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

  • Deploying a Service
  • Removing a service
  • Activate/Inactivate Service
  • Module deploy
  • Module remove
注册观察者有时很有用,例如Rss feed generation,他可以给订阅者提供服务。正确注册观察者的方式如下:


    http://127.0.0.1/rss
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的简单例子如下:


     The description of the service    

     
        HTTP
    
    
     
     
    
            
    
     
    org.apache.axis2.sample.echo.EchoImpl
    
     
        Mapping to action
        
        
    

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中指定。例如:


        
        
    
唯一的必需属性是"name",表示将要暴露的操作名称。任何操作都可以包含模块引用,以及任意数量的参数。最有趣的是,你可以为每个操作注册定制的消息接收者。如果不指定,将使用默认的消息接收者(axis2.xml).

3、模块配置(module.xml)
module.xml用来描述模块。每个模块归档文件都需要有一个module.xml,并且要放在归档文件(mar)的META-INF目录下面。独立应用时,模块归档文件需要放置在AXIS2_HOME/repository/modules目录下;在war包部署时,需要放置在servlet容器的axis2/WEB-INF/modules目录下。 一个简单的例子:


    
        .
        .
    
    
        .
        .
    

    
        .   
        .
    

    
        .         
        .
    

    
        
        10
    

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的方法如下:


            
必需的属性:
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

你可能感兴趣的:(Java)