[Java] Webservice之定製發佈WSDD教程 (二)

介紹:

          WebService是一種跨編程語言和跨操作系統平臺的遠程調用技術。
          所謂跨編程語言和跨操作平臺,就是說服務端程序採用java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。

         所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬調用的轉賬方法的代碼其實是跑在銀行服務器上。

AXIS提供Webservice的兩種發佈方式:

1. 即時發佈 (InstantDeployment);

    詳情請見: [Java] Webservice之即時發佈JWS教程 (一)

2. 定製發佈 (CustomDeployment);

      定製發佈方式:  wsdd方式

             1> 即時發佈是一項令人激動的技術,它使Web服務的開發變得如此簡單;然而即時發佈並不總是最好的選擇,比如有些應用系統是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應用系統的一些功能對外發布成Web服務,使其能夠在更大範圍內產生作用,這個時候即時發佈技術就無能爲力了。此外,即時發佈技術並不靈活,無法進行更多的服務配置,這使得它並不能滿足一些特定系統的需求。

             2> 將java源代碼編譯成.class文件,放置到“%Tomcat_HOME%/webapps/axis/”目錄下,即可着手進行發佈。定製發佈不需要構建.jws文件,但必須在” %Tomcat_HOME%/webapps/axis/WEB-INF/”目錄下創建服務發佈描述文件deploy.wsdd(Web Service Deployment Descriptor的縮寫),這個文件負責描述服務的名稱、入口等信息!

開發準備:

axis服務下載:http://apache.fayea.com/axis/axis/java/1.4/

1. axis-src-1_4.zip 下載完成後,解壓壓縮包;

2. 進入到axis-src-1_4\axis-1_4\webapps目錄,複製axis整個文件夾;

3. 粘貼到tomcat\webapps目錄下,如tomcat\webapps\axis

4. 啓動Tomcat,地址欄輸入http://localhost:8080/axis回車,如果出現Apache-Axis等內容就證明服務部署成功;

5. 開始進入案例編寫,在Eclipse\MyEclipstc創建一個Java Project,創建Package(eg: com.webservice.wsdd),然後寫一個HelloWSDD.java,最後編譯這個類;

    5.1 目錄結構如下:

         

    5.2 編寫的Java類:

/**
 * @功能: Web Service 定製發佈的類  --> 方法
 * @author: 吥 悔
 * @Q Q: 379839355
 * @2015年6月2日 下午11:54:47
 */
package com.webservice.wsdd;

public class HelloWSDD {
	private int count = 0;
	public String hello(String name){
		count++;
		System.out.println("hello 調用次數:" + count);
		return "歡迎你:" + name;
	}
	
	public Float sum(Float a, Float b){
		count++;
		System.out.println("sum 調用次數:" + count);
		return a + b;
	}
}
/**
 * @功能: 編譯HelloWSDD
 * @author: 吥 悔
 * @Q Q: 379839355
 * @2015年6月3日 上午12:03:09
 */
package com.webservice.wsdd;

public class JavacHelloWSDD {
	public static void main(String[] args){
		new HelloWSDD();
	}
}
6. 編譯完成後找到項目的工程路徑,並找到編譯後的HelloWSDD.class文件,然後後退至com目錄,複製com文件夾,最後粘貼到tomcat\webapps\axis\WEB-INF\classes目下,如圖所示;

7. 接下來需要定製我們的wsdd xml文件,這裏命名爲deploy.wsdd,創建在當前web工程的WEB-INF目錄下;

<span style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
<deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <!-- provider=”java:RPC”是服務類型,除了RPC方式以外,還有Document、Wrapped和Message方式 -->  
  <service name="HelloWSDD" provider="java:RPC">
	<!-- 告訴服務應該調用的類 -->  
    <parameter name="className" value="com.webservice.wsdd.HelloWSDD" />
	<!-- * 代表所有的方法都暴露 -->
    <parameter name="allowedMethods" value="*" />
	<!-- 當前WebService的作用域,分別是:request、session、application -->
	<parameter name="scope" value="application" />
  </service>
</deployment>
</span>

8. 寫完配置後,就需要用axis提供的AdminClient工具類幫我們發佈WebService,直到生成server-config.wsdd,
    步驟如下:
    8.1 進入tomcat\webapps\axis\WEB-INF\目錄
    8.2 在當前目錄按住shift按鍵
    8.3 然後右鍵出現在此打開命令窗口
    8.4 出現DOS窗口,且路徑爲D:\tomcat6\webapps\axis\WEB-INF>
    8.5 輸入編譯命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
    8.6 如果報連接失敗的錯誤,啓動tomcat重新編譯一次即可

      Exception: AxisFault
         faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
         faultSubcode:
         faultString: java.net.ConnectException: Connection refused: connect
         faultActor:
         faultNode:
         faultDetail: {http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Conne
        ction refused: connect
    8.7 編譯成功,當前目錄D:\tomcat6\webapps\axis\WEB-INF>生成server-config.wsdd配置文件!

9. 訪問http://localhost:8080/axis/,並進入List目錄查看是否出現自定義的服務方法;

10. 編寫一個訪問Web Service服務並調用其服務的方法類ClientWSDD.java

/**
 * @功能: Web Service WSDD
 * @author: 吥 悔
 * @Q Q: 379839355
 * @2015年6月3日 上午1:23:26
 */
package com.client;

import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
/**
 * @介紹:
 * WebService是一種跨編程語言和跨操作系統平臺的遠程調用技術。<br/>
 *    所謂跨編程語言和跨操作平臺,就是說服務端程序採用java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!
 * 跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。<br/>
 *    所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法,
 * 譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬調用的轉賬方法的代碼其實是跑在銀行服務器上。<br/>
 * @步驟:<br/>
 * 2.定製發佈
 *    1> 編寫Java定製服務代碼,HelloWSDD.class帶工程結構目錄,並放置到tomcat\webapps\axis\WEB-INF\目錄;<br/>
 *    2> 需要定製我們的wsdd xml文件,這裏命名爲deploy.wsdd,創建在當前web工程的WEB-INF目錄下;<br/>
 *    3> 寫完配置後,就需要用axis提供的AdminClient工具類幫我們發佈WebService,直到生成server-config.wsdd;<br/>
 *    4> 編寫客戶端,並調用Web Service中的遠程接口及其方法;<br/>
 */
public class ClientWSDD {
	public static void main(String[] args) {
		try {
			//定義字符串,描述要訪問的服務器地址 [改爲自己需要訪問的Web Service服務路徑]
			String url = "http://192.168.8.111:8080/axis/services/HelloWSDD";
			//創建一個 Web Service的服務
			Service sv = new Service();
			//創建一個調用
			Call call = (Call) sv.createCall();
			//指定服務的來源
			call.setTargetEndpointAddress(url);
			//指明調用的具體方法名
			call.setOperationName(new QName(url, "Hello"));
			//執行遠端的調用
			String result = (String) call.invoke(new Object[]{"吥_悔"});
			System.out.println(result);
			//指明調用的具體方法名
			call.setOperationName(new QName(url, "sum"));
			//執行遠端的調用
			Float resultSum = (Float) call.invoke(new Object[]{new Float(1.2), new Float(1.3)});
			System.out.println("a + b = " + resultSum);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
11. 執行測試,控制檯打印出方法的輸出語句,webservice訪問調用成功!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章