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>
<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>
<transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer"> <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 代码
<phaseOrder type="InFlow"> <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="Security"/> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="Dispatch"/> handler> phase> <phase name="OperationInPhase"/> phaseOrder> <phaseOrder type="OutFlow"> <phase name="OperationOutPhase"/> <phase name="MessageOut"/> <phase name="PolicyDetermination"/> phaseOrder> <phaseOrder type="InFaultFlow"> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="RequestURIBasedDispatcher" class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="SOAPActionBasedDispatcher" class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="Dispatch"/> handler> phase> <phase name="OperationInFaultPhase"/> phaseOrder> <phaseOrder type="OutFaultFlow"> <phase name="OperationOutFaultPhase"/> <phase name="PolicyDetermination"/> <phase name="MessageOut"/> phaseOrder>type:代表流的类型的属性,只能是以下几种:
InFlow OutFlow InFaultFlow OutFaultFlow
除此之外,允许在phaseOrder内出现的元素是phase元素。phase元素代表了执行链中可用的phases。在phaseOrder中指明phase的方法如下:
xml 代码
<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 代码
<module ref="addressing" />ref:将要被启用的模块的名字,系统范围。
Listeners(Observers):在Axis2中,AxisConfiguration是可被监听的,因此你可以把监听器注册进去。当AxisConfiguration发生改变时,监听器会自动得被通知到。就现在的实现而言,监听器会被通知到下述事件:
Deploying a service
Removing a service
Activate/Inactivate Service
Module deploy
Module Remove
注册监听器对附加的功能非常有用,例如RSS种子的生成,它将向订阅者提供服务信息。下面是注册监听器的正确方法:
xml 代码
<listener class="org.apache.axis2.ObserverIMPL"> <parameter name="RSS_URL" >http://127.0.0.1/rssparameter> listener>class:代表监听器的实现类,需要注意该实现类必须实现AxisObserver接口,并且必须在classpath中。
服务配置(Service Configuration)
书写services.xml:服务的描述使用services.xml指明。每个服务.aar文件都需要一个services.xml文件以便成为有效的服务,并且这个文件应该放置在META-INF目录下。一个非常简单的services.xml如下:
xml 代码
<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>HTTPtransport> 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.EchoImplparameter> <operation name="echoString" mep="operation MEP"> <actionMapping>Mapping to actionactionMapping> <module ref=" a module name "/> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> operation> 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 代码
<operation name="echoString"> <module ref=" a module name "/> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> operation>name是唯一必须的属性,它代表将被发布的操作的名字。操作可以包含模块指针也可以包括任何数量的参数。最有趣的是你可以为每个操作注册客户消息接收器。从而,注册的消息接收器将成为相应的操作的消息接收器。如果你不指定消息接收器,那么默认的消息接收器将执行操作。
模块配置(Module Configuration)
书写module.xml
模块的描述使用module.xml描述。每个mar文件需要module.xml文件以便成为有效的模块,并且,这个文件需要放在模块的META-INF文件夹下。下面是一个非常简单的module.xml文件。
xml 代码
<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">10parameter> operation> 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 代码
<handler name="handler1" class="handlerClass "> <order phase="userphase1" /> handler>必须的属性:
name:handler的名字。
class:handler的实现类。
phase:handler在执行链中应该所处的阶段的名字。
可选的属性:
phaseLast:说明handler是phase中的最后一个。
phaseFirst:说明handler是phase中的第一个。
before:说明当前handler应该在被before标识的handler之前被触发。
after:说明当前handler应该在被after标识的handler之后被触发。
相关知识
别墅花园自动化智能灌溉系统配置及可行性方案
庭院灯光设计详解
杂交详解
黄瓜种植技术详解
植物免疫系统详解
水培植物墙,自动灌溉系统是什么?
花园婚礼攻略详解
太阳花夏天怎么浇水 详解太阳花详解浇水方法
荷花的剪纸教程图文详解
大型土壤动物群落对短花针茅草原荒漠化过程的响应
网址: Axis2系统配置详解 https://m.huajiangbk.com/newsview1462253.html
上一篇: 爱普生清零软件使用教程,轻松清零 |
下一篇: 正新鸡排30周年跨年夜指南来啦! |