6. 使用Axis开发WebService程序

转自:http://www.itkeyword.com/doc/7529577946427268306/Apache-Servlet-WebSOAPWebService

所谓Web Service就是客户端以标准的SOAP消息将服务请求发给服务提供者,不论服务提供者用什么样的技术,Java、EJB、或者.NET执行相应的程序得到结果,然后将结果以SOAP消息返回给服务请求者。以axis为例,创建一个简单的Web Service

首先到http://ws.apache.org/axis/上去下载最新的axis版本。最新版本是axis-src-1_4.zip

NEWS (April 22, 2006): Axis 1.4 Final is now available!

第一步:创建WebService项目,命名为Webservice_Begin

解压axis-src-1_4.zip后,拷贝lib目录下最基本的jar包至项目WEB-INF/lib目录下,如下列表:

axis.jar

commons-discovery-0.2.jar

commons-logging-1.1.jar

jaxrpc.jar

mailapi_1_3_1.jar

wsdl4j-1.5.1.jar

junit-4.9-SNAPSHOT-20100512-0041.jar

第二步:创建WebService服务器端接口和实现类

Java代码  收藏代码
  1. package com.unis.p2p.server;  
  2. /** 
  3.  * WebService服务器端业务逻辑接口 
  4.  *  
  5.  * @author Posey 2010-12-17 
  6.  */  
  7. public interface Hello {  
  8.       
  9.     /** 
  10.      * 接口方法:接收客户端WebService请求 
  11.      *  
  12.      * @author Posey 2010-12-17 
  13.      * @param message 
  14.      * @return 
  15.      */  
  16.     public String executeTaskList(String message);  
  17.   
  18. }  
Java代码  收藏代码
  1. package com.unis.p2p.server;  
  2.   
  3. /** 
  4.  * WebService服务器端业务逻辑实现类 
  5.  * @author Posey 2010-12-17 
  6.  * 
  7.  */  
  8. public class HelloImpl implements Hello {  
  9.   
  10.     /** 
  11.      * 接收客户端WebService请求,具体执行相关操作 
  12.      *  
  13.      * @author Posey 2010-12-17 
  14.      */  
  15.     public String executeTaskList(String message) {  
  16.         return "OK|调用成功! " + message;  
  17.     }  
  18.   
  19. }  

第三步:修改WEB-INF/web.xml配置文件

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.   
  7.     <!-- ********************************************** -->  
  8.       
  9.     <!-- WebService核心处理类 -->  
  10.     <servlet>  
  11.         <servlet-name>AxisServlet</servlet-name>  
  12.         <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>  
  13.     </servlet>  
  14.   
  15.     <servlet-mapping>  
  16.         <servlet-name>AxisServlet</servlet-name>  
  17.         <url-pattern>/services/*</url-pattern>  
  18.     </servlet-mapping>  
  19.       
  20.     <!-- ********************************************** -->  
  21.   
  22.     <welcome-file-list>  
  23.         <welcome-file>index.jsp</welcome-file>  
  24.     </welcome-file-list>  
  25.       
  26. </web-app>  

第四步:创建WebRoot/WEB-INF/server-config.wsdd文件,定义服务的名称,具体的实现类,以及发布的方法和属性等等

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  3.   
  4.     <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper" />  
  5.   
  6.     <service name="executeTask" provider="java:RPC">  
  7.         <parameter name="className" value="com.unis.p2p.server.HelloImpl" />  
  8.         <parameter name="allowedMethods" value="executeTaskList" />  
  9.     </service>  
  10.   
  11.     <transport name="http">  
  12.         <requestFlow>  
  13.             <handler type="URLMapper" />  
  14.         </requestFlow>  
  15.     </transport>  
  16.       
  17. </deployment>  

第五步:启动应用服务器,发布Web Service服务。

地址栏输入:http://127.0.0.1:8080/Webservice_Begin/services回车,如果没有错误提示,则恭喜你,你的Web Service已经发布成功。

点击wsdl,还可以看到具体的wsdl的配置信息如下:

Xml代码  收藏代码
  1.   <?xml version="1.0" encoding="UTF-8" ?>   
  2. <wsdl:definitions targetNamespace="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" xmlns:intf="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  3. - <!--   
  4. WSDL created by Apache Axis version: 1.4  
  5. Built on Apr 22, 2006 (06:55:48 PDT)  
  6.   
  7.   -->   
  8. <wsdl:message name="executeTaskListResponse">  
  9.   <wsdl:part name="executeTaskListReturn" type="soapenc:string" />   
  10.   </wsdl:message>  
  11. <wsdl:message name="executeTaskListRequest">  
  12.   <wsdl:part name="message" type="soapenc:string" />   
  13.   </wsdl:message>  
  14. <wsdl:portType name="HelloImpl">  
  15. <wsdl:operation name="executeTaskList" parameterOrder="message">  
  16.   <wsdl:input message="impl:executeTaskListRequest" name="executeTaskListRequest" />   
  17.   <wsdl:output message="impl:executeTaskListResponse" name="executeTaskListResponse" />   
  18.   </wsdl:operation>  
  19.   </wsdl:portType>  
  20. <wsdl:binding name="executeTaskSoapBinding" type="impl:HelloImpl">  
  21.   <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />   
  22. <wsdl:operation name="executeTaskList">  
  23.   <wsdlsoap:operation soapAction="" />   
  24. <wsdl:input name="executeTaskListRequest">  
  25.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://server.p2p.unis.com" use="encoded" />   
  26.   </wsdl:input>  
  27. <wsdl:output name="executeTaskListResponse">  
  28.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" use="encoded" />   
  29.   </wsdl:output>  
  30.   </wsdl:operation>  
  31.   </wsdl:binding>  
  32. <wsdl:service name="HelloImplService">  
  33. <wsdl:port binding="impl:executeTaskSoapBinding" name="executeTask">  
  34.   <wsdlsoap:address location="http://127.0.0.1:8080/Webservice_Begin/services/executeTask" />   
  35.   </wsdl:port>  
  36.   </wsdl:service>  
  37.   </wsdl:definitions>  

第六步:创建WebService客户端测试类

/Webservice_Begin/test/com/unis/p2p/client/WebServiceTest.java

Java代码  收藏代码
  1. package com.unis.p2p.client;  
  2.   
  3. import java.net.URL;     
  4.   
  5. import org.apache.axis.client.Call;     
  6. import org.apache.axis.client.Service;     
  7. import org.junit.Test;  
  8.   
  9. /** 
  10.  * 类说明:Client端测试类,发出请求 
  11.  * @author Posey 2010-12-17 
  12.  * 
  13.  */  
  14. public class WebServiceTest {  
  15.       
  16.     @Test  
  17.     public void testExecuteTask() throws Exception {  
  18.         String res = "";  
  19.           
  20.         String ss = "ERR|2352|5683|2235|8428";  
  21.         String[] str = ss.split("\|");  
  22.         String tempMsg = "";  
  23.         for (int i = 1; i < str.length; i++) {  
  24.             tempMsg += str[i] + ",";  
  25.         }  
  26.         tempMsg = tempMsg.substring(0, tempMsg.length()-1);  
  27.           
  28.         //调接口  
  29.         res = this.executeTask("http://127.0.0.1:8080/Webservice_Begin/services/executeTask",   
  30.                                 "executeTaskList",   
  31.                                 new Object[]{ tempMsg });  
  32.           
  33.         System.out.println(res);    //输出结果  
  34.     }  
  35.   
  36.     //核心处理方法  
  37.     private synchronized String executeTask(String url, String method, Object[] args) throws Exception {  
  38.           
  39.         // 创建Service实例  
  40.         Service service = new Service();  
  41.           
  42.         // 通过Service实例创建Call实例  
  43.         Call call = (Call) service.createCall();  
  44.           
  45.         // 将WebService的服务路径加入到Call实例中,并为Call设置服务的位置  
  46.         URL webServiceUrl = new URL(url);  
  47.         call.setTargetEndpointAddress(webServiceUrl);  
  48.           
  49.         // 调用WebService方法  
  50.         call.setOperationName(method);  
  51.           
  52.         // 调用WebService传入参数  
  53.         String result = (String) call.invoke(args);  
  54.           
  55.         return result;  
  56.     }  
  57.       
  58. }  

  

第七步:Run As - JUnit Test,执行成功

原文地址:https://www.cnblogs.com/sharpest/p/7852171.html