Axis2 Web服务配置文件services.xml详解

博客Markdown编辑器上线啦那些年我们追过的Wrox精品红皮计算机图书PMBOK第五版精讲视频教程火星人敏捷开发1001问

Axis2 Web服务配置文件services.xml详解

分类:实验性分类

Axis2 Webservices.xml

在Axis1中部署服务时,我们使用service.wsdd文件来配置服务。在Axis2中,不再使用service.wsdd文件来配置服务,改用services.xml了。这两个配置文件的语法是截然不同的。

本文涵盖了services.xml文件的语法和使用说明。在Apache Axis2/Java中,同一个服务包文件既可以用于部署单个服务,也可以部署多个服务。不论以何种方式部署服务,一个有效的服务包文件必须包含services.xml文件。随着我们部署服务的方式不同,services.xml文件的语法也不同。Services.xml文件主要有两种:一种用于部署单个服务,一种用于部署服务组。

编写用于部署单个服务的services.xml文件

用于部署单个服务的services.xml文件的根节点是 service,整个文件看起来就像这样:

1

2

3

<service>

……………

</service>

服务名

我们用服务包部署单个服务时,如果我们没有给service节点指定name属性,那么服务包文件名称就是服务名称。例如假设服务包文件名是foo.aar,那么服务名就是foo。我们也可以给service节点添加name属性来指定不同的服务名称。如下所述:

1

2

3

<servicename="foo">

……………

</service>

服务描述

服务编写者可以使用description元素来描述该服务。在Axis2 Web管理控制台中查看服务时,我们只能看到服务名和服务描述。如果我们不给services.xml文件添加description元素,则服务描述栏会显示服务名称。对于那些访问该服务的用户来说,服务描述是非常有用的。添加服务描述信息非常简单,给services.xml文件添加一个可选的description节点就可以了。该节点的值既可以是纯文本,也可以是HTML代码片段。

1

2

3

4

<service>

<description>计算矩形面积</description>

……

</service>

也可以写成这样:

1

2

3

4

<service>

<description><b>计算矩形面积</b></description>

……

</service>

注:description节点是可选节点

服务级参数

在services.xml文件中,我们可以直接在service节点下定义参数,这些参数供消息上下文(在运行时)、AxisService或者AxisOperation访问。参数有一个必选参数和可选参数:参数名称是必选参数,locked 属性是可选参数。

locked属性指明了是否允许参数值被子节点覆盖。举例来说,如果我们在axis2.xml文件中添加了一个locked属性值为true的参数,那么如果服务试图在services.xml文件中定义同名参数,是会抛出异常的。

举例来说,假设axis2.xml文件中定义了一个名叫foo的参数,该参数locked属性为true,而services.xml文件也有一个同名参数,那么部署时会抛出异常。如果参数的locked属性为true,则不能在子节点中覆盖父节点中定义的参数。

参数值可以是任何东西,它既可以是纯文本也可以是XML片段。要添加服务级参数,请参考下文:

1

2

3

4

5

<service>

…..

<parametername=location>Colombo , Sri Lanka</parameter>

…..

</service>

服务类

在Axis2中,Web服务并不强制要求指定服务实现类!Axis2架构允许编写没有服务实现类的Web服务,这是因为消息接收器允许这样做。Axis2中,一旦请求交予消息接收器处理,Axis2引擎就认为自己的事情做完了,剩余工作都是消息接收器的了。因此,services.xml并不强制要求提供服务实现类。但是绝大多数情况下,我们还是需要服务类的,我们可以在services.xml文件中添加ServiceClass参数来指定服务类。该参数的值是服务类的全路径名。示例如下:

1

<parametername="ServiceClass"locked="false">org.apache.Foo</parameter>

服务级消息接收器

Axis2中消息接收器是特殊的处理器,是In路径(请求路径)中的最后一个处理器。Web服务中的每个操作都有他自己的消息接收器,而且不同的操作可以有不同的消息接收器。消息接收器是依赖于消息交换模式的,所以我们必须为不同的消息交换模式指定不同的消息接收器。

怎样才能给所有的操作指定相同的消息接收器呢?只要添加服务级消息接收器即可。如此我们就不必在操作级别指定消息接收器了。我们要做的是指定服务级消息接收器。而在部署时,Axis2会自动给操作选择正确的消息接收器。

1

2

3

4

<messageReceivers>

<messageReceivermep=""class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

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

</messageReceivers>

使用模块

在一些情况下,如果不使用WS-Security模块,我们就不应该运行该服务。这时我们只需往services.xml文件中添加module标签,就能使用该模块了。需要注意的是,如果模块不可用会导致服务变成有错误的服务而无法使用。

1

2

3

<service>

<moduleref=foo/>

</service>

服务会话范围

Axis2中Web服务有四种会话范围。如果不指定,则默认为 request 会话范围。我们可以通过给 service 节点添加一个可选的 scope参数来指定会话范围,会话范围共有如下四种:

1

2

3

<servicescope="application">

……

</service>

Service目标名字空间旁观者的姓名永远爬不到比赛的计分板上。

Axis2 Web服务配置文件services.xml详解

相关文章:

你感兴趣的文章:

标签云: