axis2集成到自己的项目中demo

axis2集成到自己的项目中demo   

2009-06-10 11:50:33 |  分类: java | 字号   订阅

axis2之前只用过jws方式的即时部 署,最近一个项目要搞web service,一搜搜出一堆,发现自己已经太落后了,axis2怎么怎么好,XFire怎么性能高,绑定的方式有adb,xmlbeans,jibx等 等好几种,简直眼花缭乱,废话少说了,折腾了一个星期,总结了一点小经验,给大家少走弯路。一般网上的教程都是下载axis2的war包放到 webapps下,很少有说把axis2集成到自己的web项目中的。经过测试,按以下几步即可:

第一步:下载axis2的war, 放到tomcat下的webapps目录下,启动tomcat,自动解包出 axis2目录。

第 二步:将axis2目录下的关键文件和目录拷贝到自己的项目中。拷贝axis2/web-inf下的所有目录到你自己的web目录的web-inf下面, 除了modules目录(这个没用)。lib下的jar包还是单独拷吧,别覆盖了你的jar包。另外关键的是要修改conf目录下的axis2.xml, 注释掉关于module方面的代码就是addressing的那一行一定要注释掉。

第三步:修改你的web.xml,增加axis2的servelet

 
      Apache-Axis Servlet 
      AxisServlet 
      org.apache.axis2.transport.http.AxisServlet 
      1 
 
 
  
      AxisServlet 
      /services/ * 
 

第四步:写服务端代码并编译:

package axis2test;

public class AddService {
    public int add(int a,int b)
    {
        return a+b;
    }
}

第 五步:进入web-inf/services目录下,可以看见原来axis2自带的一个version.*.aar, aar其实就是一个jar,改名了而已,用winrar打开他,清空里面的东西,然后把你的class带着目录拷贝进来,再建立一个META-INF目 录,里面放一个services.xml, 这样tomcat启动时候就可以自动部署它了。下面看看services.xml怎么写:



 
  This is the service for revoking certificate.
  oma.nbi.NBIServer
 
  
   urn:sayHelloRequest
 

 

这是一种RawXMLINOutMessageReceiver模式的,适用于axiom绑定的架构,我们不用它,用RPC方式:



 
  This is the service for revoking certificate.
  axis2test.AddService
 
     
 

 

好了,server端就部署好了,现在启动tomcat,用ie查看wsdl,顺利的话,应该可以看到

http://localhost:8080/你web项目的名字/services/AddService?wsdl 来查看

第六步:

下面写客户端代码:

import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;


public class TestClient {

    public static void main(String[] args) throws AxisFault {
        EndpointReference targetEPR = new EndpointReference(
                "http://localhost/ext2/services/AddService.AddServiceHttpSoap11Endpoint/ ");
        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();
        options.setTo(targetEPR);
        String ns = "http://axis2test";// 这里axis2test应该是你的package路径,否则会报错找不到
        QName opAdd = new QName(ns, "add");
        Class[] returnTypes = new Class[]{Integer.class};
        Object[] opAddArgs = new Object[]{"199", "6"};
        Object[] response = serviceClient.invokeBlocking(opAdd,opAddArgs, returnTypes);
        Integer result = (Integer) response[0];
        if (result == null) {
            System.out.println("hello didn't initialize!");
            return;
        }
        System.out.println(result);
       
    }
}

http://localhost:8080/你web项目名字/services/AddService/add?a=5&b=17

,结果得到 :

22

你可能感兴趣的:(Axis2)