http://www.cnblogs.com/yongfeng/archive/2013/01/30/2883146.html
用soapUI試了下wsdl的測試,但還是不知道webService和WSDL的具體對應意義,找了篇文檔了解下,原url見上。
一 WebService
WebService是使應用程序以與平台和編程語言無關的方式進行相互通信技術,比如:站點提供訪問的數據接口:新浪微博,淘寶等。
官方定義:它是一種構建應用程序的普遍模型,可以在任何支持網絡通信的操作系統中實施運行;它是一種新的web應用程序分支,是自包含、自描述、模塊化的應用,可以發布、定位、通過web調用。WebService是一個應用組件,它邏輯性的為其他應用程序提供數據與服務.各應用程序通過網絡協議和規定的一些標准數據格式(Http,XML,Soap)來訪問WebService,通過WebService內部執行得到所需結果.Web Service可以執行從簡單的請求到復雜商務處理的任何功能。一旦部署以后,其他WebService應用程序可以發現並調用它部署的服務。
它使用Web(HTTP)方式,接收和響應外部系統的某種請求。從而實現遠程調用.
1:從WebService的工作模式上理解的話,它跟普通的Web程序(比如ASP、JSP等)並沒有本質的區別,都是基於HTTP傳輸協議的程序。
2:WebService所使用的數據均是基於XML格式的。目前標准的WebService在數據格式上主要采用SOAP協議。
SOAP(Simple Object Access Protocol):簡單對象訪問協議是在分散或分布式的環境中交換信息並執行遠程過程調用的輕量級協議,是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議),可以允許任何類型的對象或代碼,在任何平台上,以任何一種語言相互通信。
WSDL:Web Services Description Language的縮寫,是一個用來描述Web服務和說明如何與Web服務通信的XML語言。為用戶提供詳細的接口說明書。即外部對於WebService的調用方式。
Webservice和WebProject的區別:
1 web service 是可以做接口訪問其他web service的。打個比方你打開360上面會有天氣預報,那就是webservce,360網站調用中國氣象網站的數據接口獲得數據的,是兩個不同系統之間的相互調用。http://www.webxml.com.cn/WebServices/WeatherWebService.asmx。webService需要發布后才能被其他工程或者web服務調用。
2 web project,就是一個web應用,你自己做的網站就是一個web project,如果你想在你的網站里加入一些其他內容(例如天氣預報,郵編查詢,手機號碼歸屬地查詢等等),那就要調用其他網站的接口了,那就是web service。
二 WSDL元素
wsdl元素是基於XML語法描述了與服務進行交互的基本元素
Type(消息類型):數據類型定義的容器,它使用某種類型系統
Message(消息):通信數據的抽象類型化定義,它由一個或者多個part組成
Part:消息參數
Opretation(操作):對服務所支持的操作進行抽象描述,WSDL定義了四種操作:
- 單向(one-way):端點接受信息;
- 請求-響應(request-response):端點接受消息,然后發送相關消息;
- 要求-響應(solicit-response):端點發送消息,然后接受相關消息;
- 通知(notification):端點發送消息。
Port Type (端口類型):特定端口類型的具體協議和數據格式規范。
Binding:特定端口類型的具體協議和數據格式規范
Port :定義為綁定和網絡地址組合的單個端點。
Service:相關端口的集合,包括其關聯的接口、操作、消息等。
三 如何寫一個WebService,生成WSDL地址
1 建立一個普通的web項目,如:Trans
前面的話:當兩個人碰面,產生了好感,如果需要得到雙方的信息,雙方交流必不可少,應用程序也是如此。各個應用程序之間的交流就需要WebService來作為相互交流的橋梁。
項目目的:程序A調用程序B中的方法C
1> 建立一個項目名為Trans
① 建立一個方法,e.g. com.shu.function.Function類:
1 @WebService 2 public class Function { 3 //該方法就是要暴露給其他應用程序調用的方法 4 public String transWords(String words) { 5 String res = ""; 6 for(char ch :words.toCharArray()){ 7 res+="\t"+ch+"\t"; 8 } 9 return res; 10 } 11 public static void main(String[] args) { 12 Endpoint.publish("http://localhost:9001/Service/Function", new Function()); 13 System.out.println("Publish Success"); 14 }
② 執行程序,控制台打印出"Publish Success",說明消息發布成功。需確認點:a 需要jdk1.6+,b 端口未被占用。在瀏覽器輸入:
http://localhost:9001/Service/Function?wsdl即可看到詳細信息
③此時即可使用soapUI進行測試,界面如下
2 建立另外一個項目:GiveMeWords
①打開cmd,執行命令:wsimport -s src的路徑 -p 完整包名 -keep webservice的發布地址,回車即可。如
wsimport -s D:\\opt\\GiveMeWords\\src -p com.shu.function -keep http://localhost:9001/Service/Function
如果失敗,在發布地址后面加上 ?wsdl
如果wsimport命令執行失敗,檢查是否把jdk配置入環境變量
成功標志:parsing WSDL... generating code... compiling code...如下圖
② 刷新GiveMeWords,項目在com.shu.service包下出現對應的WebService生成的文件
寫main函數,調用即可~
public static void main(String[] args) { Function function = new FunctionService().getFunctionPort(); String string = function.transWords("Let's Get Heck Out Of Here!"); System.out.println(string); }