首页 > 代码库 > WebServices学习笔记(四)使用services.xml文件发布WebService

WebServices学习笔记(四)使用services.xml文件发布WebService

四、使用services.xml文件发布WebService

前面发布webservices所建立的java类都不能有包名,这里用配置文件services.xml搭建能有包名的webservice

首先创建MyService类,在service包下

package service;

import javax.jws.WebParam;

public class MyService {
	public String getGreeting(@WebParam(name="name")String name){
		return "Hello " + name;
	}
	public void update(@WebParam(name="data")String data)
    {
        System.out.println("<" + data + ">已经更新");
    }
}
然后建立services.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 一个service元素只能发布一个webservice,name表示这个webservice的名称, 比如用下面的URL可以获得这个
WebService的WSDL内容:http://localhost:8080/axis2/services/MyService?wsdl,name属性指的就是?wsdl前面的那个名称。
建议设置与类名同样的名字
-->
<service name = "MyService">
	<!-- 对当前webservice的描述 -->
	<description>
		WebService example
	</description>
	
	<!-- 设置webservice对应的类名,每个parameter有一个强制的属性(name)和一个可选的属性(locked),locked属性表示是否允许parameter的值被层次中的另一个子结点覆盖 -->
	<parameter name = "ServiceClass">
		service.MyService
	</parameter>
	<messageReceivers>
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
            class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
	</messageReceivers>
</service>


一些简单的东西看上面的注释,这里先说一下MEP——Message Exchange Pattern,消息交换模式,它定义了webservices提供方与请求方之间SOAP1.2消息的交换模式。

目前Axis2支持三种模式:In-Only、Robust In-Only和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答; Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。

SOAP支持的模式还有:In-Optional-Out、Out-Only、Robust Out-Only、Out-In、Out-Optional-In等

每个人也可以定义自己的MEP,但SOAP1.2规范要求分配给每个MEP一个唯一的URI以识别它。

像上面的In-Out MEP的URI是http://www.w3.org/2004/08/wsdl/in-out

In-Only MEP的URI是http://www.w3.org/2004/08/wsdl/in-only


使用这种方式发布WebService,必须打包成.aar文件,.aar文件实际上就是改变了扩展名的.jar文件。在现在建立了两个文件:MyService.java和services.xml。将MyService.java编译,生成MyService.class。

services.xml和MyService.class文件的位置如下:

D:\xampp\tomcat\webapps\ws\META-INF\services.xml

D:\xampp\tomcat\webapps\ws\service\MyService.class


在windows控制台中进入ws目录,并输入如下的命令生成.aar文件(实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice):

jar cvf ws.aar .(注意最后还有个".",表示将当前目录打包)

最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,启动Tomcat后,就可以调用这个WebService了。


如果想发布多个WebService,可以使用<serviceGroup>元素,如再建立一个MyService1类

package service
public class MyService1
{
    public String getName()  
    { 
        return "bill";
    }
}

services.xml如下:

<serviceGroup>
    <service name="myService">
        <description>
            Web Service例子
        </description>
        <parameter name="ServiceClass">
            service.MyService  
        </parameter>
        <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        </messageReceivers>
    </service>
    <service name="myService1">
        <description>
            Web Service例子
       </description>
        <parameter name="ServiceClass">
            service.MyService1  
        </parameter>
         <messageReceivers>
           <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
           <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        </messageReceivers>
    </service>
</serviceGroup>