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

<servlet> 
      <display-name>Apache-Axis Servlet</display-name> 
      <servlet-name>AxisServlet</servlet-name> 
      <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> 
      <load-on-startup>1</load-on-startup> 
 </servlet> 
 <servlet-mapping> 
      <servlet-name>AxisServlet</servlet-name> 
      <url-pattern>/services/ *</url-pattern> 
 </servlet-mapping>

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

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怎么写:

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
 <service name="NBIService">
  <description>This is the service for revoking certificate.</description>
  <parameter name="ServiceClass" locked="false">oma.nbi.NBIServer</parameter>
  <operation name="sayHello">
   <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
   <actionMapping>urn:sayHelloRequest</actionMapping>
  </operation>
 </service>
</serviceGroup>

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

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
 <service name="AddService">
  <description>This is the service for revoking certificate.</description>
  <parameter name="ServiceClass" locked="false">axis2test.AddService</parameter>
  <operation name="add">
   <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
  </operation>
 </service>
</serviceGroup>

好了,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

,结果得到 :

<ns:return>22</ns:return>

你可能感兴趣的:(axis2)