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

来源:互联网 发布:战舰世界数据 编辑:程序博客网 时间:2024/05/19 23:55

四、使用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 servicepublic 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>



0 0