手把手教你用axis1.4搭建webservice(转)

1、先下载axis jar包:axis-bin-1_4.zip。下载地址: http://ws.Apache.org/axis/。

当然这个包其实是不全面的,像activation.jar之类的,完全的Lib会在附件里提供。

2、解压好后,将webapps目录下的axis拷贝到tomcat_home的webapps下面。

3、在myeclipse中新建一个web项目,取名叫testWebservice.并新建一个包名叫webservice.axis.wsdd,

再新建一个class名叫:HelloWorldWSDD。

HelloWorldWSDD源代码如下:

Java代码  收藏代码
  1. package webservice.axis.wsdd;  
  2. public class CopyOfHelloWorldWSDD {  
  3.   
  4.     private int requestCount=0;  
  5.       
  6.     public String hello(String cardNo){  
  7.         requestCount++;  
  8.         System.out.println("requestCount="+requestCount);  
  9.         System.out.println("Received:"+cardNo);  
  10.         return "Hello"+cardNo;  
  11.     }  
  12.       
  13.       
  14.     public float add(float a,float b){  
  15.         requestCount++;  
  16.         String result="a="+a+",b"+b;  
  17.         System.out.println("requestCount"+requestCount);  
  18.         System.out.println("Received:"+result);  
  19.           
  20.         return a+b;  
  21.     }  
  22.       
  23. }  

4、将tomcat_homewebappsaxisWEB-INFlib下面所有的jar包拷贝到项目中的Lib中。

5、先部署一下web项目,再运行tomcat,运行http://localhost:8080/axis调试下是否安装成功。然后将tomcat_homewebappsaxisWEB-INFlib所有的jar包同时拷贝到tomcat_homelib下面。此时我们的webservice还不会出现在调试列表里,因为还有很多配置工作没有做。

6、下面将tomcat_homewebapps estWebserviceWEB-INFclasses下的webservice文件夹复制到tomcat_homewebappsaxisWEB-INFclasses下面。这步的目的就是以后客户端访问axis时能看见我们的websevice.

7、在tomcat_homewebappsaxisWEB-INF下面文件deploy.wsdd,在里面输入:

Java代码  收藏代码
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  2. <service name="HelloWorldWSDD" provider="java:RPC">  
  3. <parameter name="className" value="webservice.axis.wsdd.HelloWorldWSDD" />  
  4. <parameter name="allowedMethods" value="*" />  
  5. <parameter name="scope" value="request" />  
  6. </service>  
  7. </deployment>  

 8、运行CMD,进入目录到tomcat_homewebappsaxisWEB-INF,输入如下命令:

Java代码  收藏代码
  1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient  deploy.wsdd  

 注意:运行此步时要保证tomcat是运行着的,否则会出现connection refuesed的错误。如果运行成功,会提示done processing.而且会生成一个文件server-config.wsdd。

9、此时已经快完成了。可以在浏览器里输入http://localhost:8080/axis/services。看看有没有新增加一个叫HelloWorldWSDD的webservice.如果有,那么就是成功啦。

其他简单测试方法:

Java代码  收藏代码
  1. 1、在浏览器输入http://localhost:8080/axis/services/HelloWorldWSDD  
  2.   
  3. 2、在浏览器输入http://localhost:8080/axis/servlet/AxisServlet  
  4.   
  5. 2者都可以用来简单测试webservice是否处于可用状态。  

10、编写客户端进行测试。在同样的包下建一个class叫Client

客户端的核心就是引用url。

源代码如下:

Java代码  收藏代码
  1. package webservice.axis.wsdd;  
  2. import javax.xml.namespace.QName;  
  3.   
  4. import org.apache.axis.client.Call;  
  5. import org.apache.axis.client.Service;  
  6.   
  7. public class CopyOfClient {  
  8.       
  9.         public static void main(String args[]){  
  10.             try{  
  11.                 String serviceurl="http://localhost:8080/axis/services/HelloWorldWSDD";  
  12.                 Service service=new Service();  
  13.                 Call call=(Call)service.createCall();  
  14.                 call.setTargetEndpointAddress(serviceurl);  
  15.                 call.setOperationName(new QName(serviceurl,"hello"));  
  16.                 String result=(String)call.invoke(new Object[]{"123456"});  
  17.                   
  18.                 call.setOperationName(new QName(serviceurl,"add"));  
  19.                 Float returnValue=(Float)call.invoke(new Object[]{new Float(3.2),new Float(2.8)});  
  20.                 System.out.println("float return value is:"+returnValue);  
  21.                 if(result!=null){  
  22.                     System.out.println("result="+result);  
  23.                 }else{  
  24.                     System.out.println("result is null");  
  25.                 }  
  26.                   
  27.             }catch(Exception ex){  
  28.                 ex.printStackTrace();  
  29.             }  
  30.                   
  31.   
  32.         }  
  33.           
  34.           
  35.   
  36. }  

运行结果是:float return value is:6

result is Hello123456,

下面对这两句重要的话进行解释:

  1. call.setOperationName(new QName(serviceurl,"hello"));  
  2.                 String result=(String)call.invoke(new Object[]{"123456"});  

1、QName里面接的hello是指方法名。

2、invoke里面接的123456是指方法的参数。

参考资料:

1、百度文库里面的:http://wendang.baidu.com/view/558a8f3143323968011c9279.html?from=rec&pos=3&weight=3&lastweight=2&count=5

2、新浪上的:http://blog.sina.com.cn/s/blog_4b9b442c0100rd87.html

3、ITEYE上的:http://hua04104.iteye.com/blog/850367

4、http://blog.sina.com.cn/s/blog_6307f1940100ohyh.html

原文地址:https://www.cnblogs.com/yelongsan/p/5453880.html