您的位置:首页 > 其它

Axis2(一):配置指导

2016-06-04 14:08 351 查看
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定义的格式为:

[html] view
plain copy

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

Transport Receiver

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

[html] view
plain copy

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

<parameter name="port" >6060</parameter>

</transportReceiver>

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

Transport Sender

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

[html] view
plain copy

<transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">

<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter>

</transportSender>

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

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

Phase Order

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

[html] view
plain copy

<phaseOrder type="InFlow">

<phase name="TransportIn"/>

.

.

</phaseOrder>

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

[html] view
plain copy

<!-- ================================================= -->

<!-- Phases -->

<!-- ================================================= -->

<phaseOrder type="InFlow">

<!-- System predefined phases -->

<phase name="Transport">

<handler name="RequestURIBasedDispatcher"

class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">

<order phase="Transport"/>

</handler>

<handler name="SOAPActionBasedDispatcher"

class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">

<order phase="Transport"/>

</handler>

</phase>

<phase name="Addressing">

<handler name="AddressingBasedDispatcher"

class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">

<order phase="Addressing"/>

</handler>

</phase>

<phase name="Security"/>

<phase name="PreDispatch"/>

<phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">

<handler name="RequestURIBasedDispatcher"

class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>

<handler name="SOAPActionBasedDispatcher"

class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>

<handler name="RequestURIOperationDispatcher"

class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>

<handler name="SOAPMessageBodyBasedDispatcher"

class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>

<handler name="HTTPLocationBasedDispatcher"

class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>

<handler name="GenericProviderDispatcher"

class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>

<handler name="MustUnderstandValidationDispatcher"

class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>

</phase>

<phase name="RMPhase"/>

<!-- System predefined phases -->

<!-- After Postdispatch phase module author or service author can add any phase he want -->

<phase name="OperationInPhase">

<handler name="MustUnderstandChecker"

class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">

<order phase="OperationInPhase"/>

</handler>

</phase>

<phase name="soapmonitorPhase"/>

</phaseOrder>

<phaseOrder type="OutFlow">

<!-- user can add his own phases to this area -->

<phase name="soapmonitorPhase"/>

<phase name="OperationOutPhase"/>

<!--system predefined phase-->

<!--these phase will run irrespective of the service-->

<phase name="RMPhase"/>

<phase name="PolicyDetermination"/>

<phase name="MessageOut"/>

<phase name="Security"/>

</phaseOrder>

<phaseOrder type="InFaultFlow">

<phase name="Addressing">

<handler name="AddressingBasedDispatcher"

class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">

<order phase="Addressing"/>

</handler>

</phase>

<phase name="Security"/>

<phase name="PreDispatch"/>

<phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">

<handler name="RequestURIBasedDispatcher"

class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>

<handler name="SOAPActionBasedDispatcher"

class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>

<handler name="RequestURIOperationDispatcher"

class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>

<handler name="SOAPMessageBodyBasedDispatcher"

class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>

<handler name="HTTPLocationBasedDispatcher"

class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>

<handler name="GenericProviderDispatcher"

class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>

<handler name="MustUnderstandValidationDispatcher"

class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>

</phase>

<phase name="RMPhase"/>

<!-- user can add his own phases to this area -->

<phase name="OperationInFaultPhase"/>

<phase name="soapmonitorPhase"/>

</phaseOrder>

<phaseOrder type="OutFaultFlow">

<!-- user can add his own phases to this area -->

<phase name="soapmonitorPhase"/>

<phase name="OperationOutFaultPhase"/>

<phase name="RMPhase"/>

<phase name="PolicyDetermination"/>

<phase name="MessageOut"/>

<phase name="Security"/>

</phaseOrder>

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

InFlow
OutFlow
InFaultFlow
OutFaultFlow

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

[html] view
plain copy

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

[html] view
plain copy

<module ref="addressing"/>

Listener(Observers)

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

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

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

[html] view
plain copy

<listener class="org.apache.axis2.ObserverIMPL">

<parameter name="RSS_URL" >http://127.0.0.1/rss</parameter>

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

[html] view
plain copy

<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">

<Description> The description of the service </Description>

<transports>

<transport>HTTP</transport>

</transports>

<schema schemaNamespace="schema namespace"/>

<messageReceivers>

<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"

class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

</messageReceivers>

<parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.sample.echo.EchoImpl</parameter>

<operation name="echoString" mep="operation MEP">

<actionMapping>Mapping to action</actionMapping>

<module ref=" a module name "/>

<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>

</operation>

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

[html] view
plain copy

<operation name="echoString">

<module ref=" a module name "/>

<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>

</operation>

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

3、模块配置(module.xml)

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

[html] view
plain copy

<module class="org.apache.module.Module1Impl">

<InFlow>

.

.

</InFlow>

<OutFlow>

.

.

</OutFlow>

<OutFaultFlow>

.

.

</OutFaultFlow>

<InFaultFlow>

.

.

</InFaultFlow>

<operation name="creatSeq" mep="MEP_URI_IN_OUT">

<messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>

<parameter name="para1" locked="xsd:true">10</parameter>

</operation>

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

[html] view
plain copy

<handler name="handler1" class="handlerClass ">

<order phase="userphase1" />

</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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: