Axis2(版本1.4.1)与Tomcat(5.5.27)的结合, Axis2在Tomcat的webapps目录下,只要将满足一定目录结构的web服务的相关文件拷贝到 axis2/WEB-INF/services目录下,便可以完成该服务的部署。
  要部署的服务的目录结构必须满足下面的结构
  - MyService
   - META-INF
     - services.xml
   - lib
     - log4j.jar 
   - edu
     - nwpu
       - service
         - test
           - AddService.class
   其中最重要的是META-INF目录下的services.xml文件, axis2通过该文件来获知该服务的名称、服务类型以及服务类。下面是一个简单的services.xml

<service name="AddService" scope="application"> 
 
    <description> 
 
        Addition POJO Service 
 
    </description> 
 
    <messageReceivers> 
 
  <messageReceiver mep=" 
 http://www.w3.org/2004/08/wsdl/in-only" 
 
                         class="org.apache. 
 axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> 
 
        <messageReceiver mep=" 
 http://www.w3.org/2004/08/wsdl/in-out" 
 
       class="org.apache. 
 axis2.rpc.receivers.RPCMessageReceiver"/> 
 
    </messageReceivers> 
 
    <parameter name="ServiceClass"> 
 
        edu.nwpu.hpc.cssp.wsmaker.service.AddService 
 
    </parameter> 
 
 </service>


 
 其首先定义了name,该名称就是 Axis2唯一标识该服务的名字。还定义了服务接口类型,是in-only还是in-out,不同类型对应了不同的class再就是定义了ServiceClass,也就是具体该服务的提供类,要该类的全路径名称来标识。


Axis2部署service的方法,可以知道,部署一个服务只需要将该服务的所有相关Java文件,包括class文件、jar文件按照 axis2所要求的方式组织,然后再就是修改servicex.xml文件,让其与该服务的实际情况相吻合,然后再将这个文件夹拷贝到tomcat的 axis2的相关目录下就可以了。


编写web服务的客户端调用程序


使用RPC的方式来进行客户端程序编写需要导入的包有:

import javax.xml.namespace.QName; 

 
axis2.AxisFault; 
 
 import org.apache. 
 axis2.addressing.EndpointReference; 
 
 import org.apache. 
 axis2.client.Options; 
 
 import org.apache. 
 axis2.rpc.client.RPCServiceClient; 
 
主要功能代码如下: 
 
 RPCServiceClient serviceClient = new RPCServiceClient(); 
 

          Options options = serviceClient.getOptions(); 

 

  //这一步指定了该服务的提供地址 
 
        EndpointReference targetEPR = new EndpointReference( 
 
                " 
 http://localhost:8080/axis2/services/AddService"); 
 
//将option绑定到该服务地址                
 
        options.setTo(targetEPR); 
 

          // 添加具体要调用的方法,这个可以从该服务的wsdl文件中得知 
 
        // 第一个参数是该服务的targetNamespace,第二个为你所要调用 
 
        // 的operation名称 
 
        
 
        QName opAdd = 
 
            new QName(" 
 http://service.wsmaker.cssp.hpc.nwpu.edu", "add"); 
 
        
 
        //设置返回值类型 
 
        Class[] returnTypes = new Class[] {Integer.class}; 
 
        //设置调用的参数 
 
        Object[] opAddArgs = new Object[] {2, 3}; 
 
        //调用服务,获得返回值 
 
        Object[] response = serviceClient.invokeBlocking(opAdd, opAddArgs, returnTypes); 
 
        
 
        
 
        Integer res = (Integer)response[0]; 
 
        if (res == null) { 
 
         System.out.println("wrong"); 
 
         return; 
 
        } 
 
        System.out.println(res);


  注意:应该包含所有axis2_home/lib下的jar文件


 

Axis2的POJO的方式来部署, Axis2的官方网站上提供了多种创建服务的方式(参考 http://ws.apache.org/axis2/1_4_1/quickstartguide.html),POJO方式的局限就是无法支持初始化配置,也就是你部署的服务的初始值无法在部署一开始就设定,必须通过客户端调用的方式来设定,但是在一般情况下,这种方式可以满足大部分需求的。