1.准備工作:
概念:SOAP(簡單對象訪問協議)、WSDL(web服務描述語言)、XML(可擴展標記語言)、axis(阿帕奇可擴展交互系統)
(1) 下載axis1.4,將axis1.4中的axis項目中WEB-INF\lib,將lib下的jar文件拷貝到工程如webservice的WEB-INF\lib下
(2) 將axis1.4中的axis項目,拷貝到tomcat的webapps目錄下
(3) 配置Java和Tomcat環境,設置axis環境,類似jdk的配置方法,例如:
| AXIS_HOME= E:\apache-tomcat-6.0.37-windows-x86\apache-tomcat-6.0.37\webapps\axis AXIS_LIB=%AXIS_HOME%\lib AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar (最后兩個可能沒有,不是必須的) |
(4) 配置web.xml添加
| <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Apache-Axis</display-name> <listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <display-name>Axis Admin Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <display-name>SOAPMonitorService</display-name> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <session-config> <session-timeout>5</session-timeout> </session-config> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> <welcome-file-list id="WelcomeFileList"> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jws</welcome-file> </welcome-file-list> </web-app>
|
2.實戰
1.寫一個方法類,以bean的形式作為入參
RequestBean.java
| package com.webservice.request;
public class RequestBean {
private String msg;
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; } } |
2.寫一個方法類,以bean的形式作為回參
ResultResponse.java
| package com.webservice.respone;
public class ResultResponse {
private int code;
private String errorMsg;
public int getCode() { return code; }
public void setCode(int code) { this.code = code; }
public String getErrorMsg() { return errorMsg; }
public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } }
|
3.寫一個方法類service,以上面兩個bean作為入參和回參
BusinessService.java
| package com.webservice.service;
import com.webservice.request.RequestBean; import com.webservice.respone.ResultResponse;
public class BusinessService {
public ResultResponse send(RequestBean requestBean)
{ ResultResponse res = new ResultResponse();
try { String msg = requestBean.getMsg(); System.out.println("收到消息:" + msg);
if (null != msg && !"".equals(msg)) { res.setCode(0); res.setErrorMsg("ok"); } else { res.setCode(-1); res.setErrorMsg("msg is null"); } } catch (Exception e) { res.setCode(-1); res.setErrorMsg("exception:" + e.getMessage()); } return res; } } |
4.在工程的WEB-INF目錄下 編寫deploy.wsdd
主要用來定義service名字,描述service、入參、回參
| <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="businessService" provider="java:RPC"> <parameter name="className" value="com.webservice.service.BusinessService" /> <parameter name="allowedMethods" value="*" /> <beanMapping qname="myNS:RequestBean" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.webservice.request.RequestBean" /> <beanMapping qname="myNS:ResultResponse" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.webservice.respone.ResultResponse" /> </service> </deployment> |
5. 在工程的WEB-INF目錄下編寫undeploy.wsdd
用來卸載webservice服務
| <undeployment xmlns="http://xml.apache.org/axis/wsdd/"> <service name="businessService"/> </undeployment> |
6. 部署項目(啟動tomcat),接下來發布接口(關鍵一步)
進入到tomcat的項目中的WEB-INF目錄下,執行下列命令進行發布。會在此WEB-INF下生成server-config.wsdd文件(以后可以在此目錄配置其他接口)
| java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://192.168.30.143:8080/webservice/servlet/AxisServlet deploy.wsdd |
Ps:下面命令用於取消一個已經發布的服務
| java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://192.168.30.143:8080/webservice/servlet/AxisServlet undeploy.wsdd |
7.獲取wsdl(完成)
(1)重啟tomcat,訪問工程目錄,如:http://192.168.30.143:8080/webservice/servlet/AxisServlet(其中webservice為工程名)
(2)可以看到新的服務方法businessService,點擊一下,跳刀wsdl內容頁面,ctr+A拷貝到文本編輯器,去掉開頭的空格,替換去掉所有開頭的“-”為空(即將- <替換為<);另存為businessService.wsdl,即可提供其他方使用,注意:如果部署在linux上,要訪問linux的網頁獲取wsdl,不然可能會有問題。
-----------------------------------------------至此發布完畢------------------------------------------------
3.測試驗證
1.根據wsdl生成客戶端代碼
(1)首先制作生成代碼工具,方便以后重用;
在D:\webservice,放個axis1.4的包,創建一個批處理文件“wsdl生成java客戶端文件.bat”,內容如下:根據實際情況配置
| set Axis_Lib=D:\webservice\axis1.4\axis\WEB-INF\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=D:\webservice\Testclient set Package=com.my.client %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% D:\webservice\businessService.wsdl @echo -------------OK----------------- @echo ---The code has been created in the folder: Testclient--- @pause |
說明:藍色部分根據實際情況調整
Axis_Lib 是axis1.4的lib位置
Output_Path是生成客戶端代碼存放位置
Package 是生成客戶端代碼所在包
最后是wsdl文件位置
(2)生成客戶端代碼
將wsdl文件,如businessService.wsdl放到D:\webservice下(上一步應該做了),執行文件“wsdl生成java客戶端文件.bat”,即可生成客戶端代碼,在Testclient目錄。
2.測試接口
將生成的客戶端帶拷貝到java或其他web工程的src下
建立測試java類,如Test.java,測試完成
| public class Test { public static void main(String[] args) throws RemoteException, ServiceException, MalformedURLException { // BusinessServiceService為接口;BusinessServiceServiceLocator為接口實現類 BusinessServiceService service = new BusinessServiceServiceLocator(); // 設置要使用的接口服務地址:多用於動態調用不同服務器上的接口 URL portAddress = new URL( "http://192.168.30.143:8080/webservice/services/businessService"); BusinessService client = service.getbusinessService(portAddress); // 傳參數bean RequestBean requestBean = new RequestBean(); requestBean.setMsg("wwww.servyou.com.cn"); // requestBean.setMsg("");
// 發送並接收返回的結果 ResultResponse resp = client.send(requestBean); System.out.println("消息已發送...");
int code = resp.getCode(); String errorMsg = resp.getErrorMsg();
System.out.println("消息已返回,code=" + code + ",errorMsg=" + errorMsg); } }
|
