當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
Web服務(wù)的(革)創(chuàng)新,第4部分
Web服務(wù)的(革)創(chuàng)新,第4部分
--Web服務(wù)描述語言 (WSDL)
Graham Glass
CEO/首席設(shè)計師,The Mind Electric
2001 年 2
月
這篇文章描述的是 Web 服務(wù)描述語言 (WSDL),WSDL是采用 XML語言來描述 Web 服務(wù)的屬性,例如它做什么,它位于哪里和怎樣調(diào)用它。本文還介紹了 IBM 的 WSDL 工具包,此工具包能夠從 WSDL 中生成存根,并簡化 Web 服務(wù)應(yīng)用的創(chuàng)建過程。
歡迎進(jìn)入本專欄的第 4 部分,本專欄重點講述 Web 服務(wù)技術(shù)正在革新和創(chuàng)新的方面。在第 3 部分(請參閱參考資料)中,我展示了簡單對象存取協(xié)議 (SOAP) 如何在后臺工作。在這一部分中,我會解釋 WSDL,這個描述 Web 服務(wù)的核心屬性的標(biāo)準(zhǔn)方法,和一些能支持 WSDL 來加速開發(fā)過程的工具。
工具和安裝
我們將在這個部分使用兩個新的工具:
IBM WSTK 2.1:IBM Web 服務(wù)工具包 2.1 (請參閱參考資料)包含 Apache SOAP、WSDL
生成器和通用描述、發(fā)現(xiàn)和集成 (UDDI) 客戶端。由于在這一系列中我們一直都在使用 Apache SOAP 2.0,所以我們繼續(xù)使用它作為我們的 SOAP
服務(wù)器,但是這一部分我們將使用 WSTK 的 WSDL 生成器。
IBM WSDL 1.1 工具包:IBM Web
服務(wù)描述語言工具包(請參閱參考資料)生成來自于 WSDL 的客戶端和服務(wù)器的存根。它的代碼被封裝為 wsdl.jar,它使用 WSTK 的 bsf.jar
(Bean 腳本框架)和 xalan.jar (XML 樣式表單處理器)文件。
一旦您下載并安裝了這些工具,請確保 wsdl.jar、bsf.jar 和 xalan.jar 在您的類路徑 (CLASSPATH) 下,這樣您就可以準(zhǔn)備構(gòu)造你的第一個帶有 WSDL 的程序了。
介紹 WSDL
Web
服務(wù)的一個主要思想,就是未來的應(yīng)用將由一組應(yīng)用了網(wǎng)絡(luò)的服務(wù)組合而成。只要兩個等同的服務(wù)使用統(tǒng)一標(biāo)準(zhǔn)和中性的方法在網(wǎng)絡(luò)上宣傳自己,那么從理論上說,一個應(yīng)用程序就可以根據(jù)價格或者性能的標(biāo)準(zhǔn),從兩個彼此競爭的服務(wù)之中選出一個。除此之外,一些服務(wù)允許在機器之間復(fù)制,因而可以通過把有用的服務(wù)復(fù)制到本地儲存庫,來提高允許運行在特定的計算機(群)上的應(yīng)用程序的性能。
如果您想一想,會發(fā)現(xiàn)這很類似于人力勞務(wù)市場的運作。提供工作的網(wǎng)站和雇傭公司為工人和老板提供中介服務(wù),利用簡歷和工作描述來加快匹配過程。如果找到了一個好的匹配,感興趣的雙方就會嘗試磋商可接受的條件。如果達(dá)成了協(xié)議,工人或者去老板那里開工,或者利用因特網(wǎng)和遠(yuǎn)程通信來作為代替的工作途徑。
Web 服務(wù)描述語言是 XML 中相當(dāng)于簡歷的等同物 -- 描述 Web 服務(wù)做什么,它在哪里及如何調(diào)用它。想知道它是什么樣的,先看看 Xmethods 網(wǎng)站上運行的貨幣交換服務(wù)的 WSDL(請參閱參考資料)。如果訪問過 http://www.xmethods.net/sd_ibm/CurrencyExchangeService.wsdl,您會看到服務(wù)的頂級描述。單擊這個 WSDL 的 URL 地址,您就會看到在清單 1 中的 WSDL 代碼。
請注意,如果訪問 XMethods 網(wǎng)站,對于每個 WSDL,您會看到兩個版本,其中一個是特別用于 IBM WSDL。這是因為當(dāng)前 IBM 的 WSDL 工具包中有一個錯誤,就是不讓它處理來自于其他工具包的 WSDL。這個問題不久就會被修復(fù);同時,我使用 XMethods 為創(chuàng)建了一個特為本文服務(wù)的版本。
讓我們來查看一下 WSDL 文檔中的每一部分,從
name:這個屬性是可選的,用來說明服務(wù)的主要目的。
targetNamespace:這個屬性定義了關(guān)于服務(wù)信息的邏輯命名空間,并且各服務(wù)的屬性值通常是不同的。這個屬性在稍后會作更進(jìn)一步的討論。
xmlns:tns:在許多的 WSDL 文件中,這個命名空間并不出現(xiàn)(包括我們的示例),但是很快就會流行起來的。如果出現(xiàn),則被設(shè)置成
targetNamespace 的值。這個屬性在稍后會作更進(jìn)一步的討論。
xmlns:soap 和
xmlns:xsd:它們是標(biāo)準(zhǔn)命名空間的定義,在以后的 WSDL 文檔中被用作指定特定的 SOAP 的信息和數(shù)據(jù)類型。
xmlns:缺省的
WSDL 文檔的命名空間,被設(shè)置到 http://schemas.xmlsoap.org/wsdl/ 。所有的 WSDL 標(biāo)記,像
在
除此之外,服務(wù)所使用的任何復(fù)雜數(shù)據(jù)類型必須在一個可選的
讓我們詳細(xì)的看看每一個部分。
一個
一個
在這個示例中,getRate 操作接受了一個 getRateRequest 消息作為它的輸入,并返回一個 getRateResponse 消息作為它的輸出。
在示例中,
一個
在示例中,通過 Xmethods 網(wǎng)站的 CurrentExchangeBinding 綁定可訪問
任何 WSDL 元素可以聲明一個可選的
使用 WSDL 來生成客戶端存根
因為 WSDL
包含了對服務(wù)接口的完整描述,所以可以使用它來創(chuàng)建能簡化服務(wù)訪問的存根。
IBM WSDL 工具包允許您為 Apache SOAP 創(chuàng)建存根。為了說明這個問題,讓我們創(chuàng)建一個客戶端存根,它允許我們調(diào)用在 Xmethods 上建立的貨幣交換服務(wù)。首先,建立一個 demo3 目錄來存放這部分的所有軟件。然后通過使用瀏覽器的 File, Save as 選項,把示例CurrentExchange的 WSDL 文件保存到這個目錄下。
然后通過鍵入下面的命令來建立客戶端存根:
demo3> java com.ibm.wsdl.Main -in CurrencyExchangeService.wsdl
這產(chǎn)生了一個叫做 CurrencyExchangePortTypeProxy.java 的客戶端存根類(如清單 2 所示)。如果得到了 "unable to load JDK compiler" 的消息,您可以忽略掉,因為我們將手動編譯客戶端存根了。
就象您能看到的,客戶端的存根看上去就像我們在前面部分里使用過的代碼??蛻舳顺绦颥F(xiàn)在能夠像常規(guī)的 Java 對象那樣,使用代理服務(wù)類來訪問 Web 服務(wù)(請參閱清單 3)。
清單 3:一個代理服務(wù)的客戶端類
public class Client1
{
public static void
main( String[] args ) throws
Exception
{
CurrencyExchangePortTypeProxy exchange = new
CurrencyExchangePortTypeProxy();
float rate = exchange.getRate( "USA",
"japan" );
System.out.println( "rate = " + rate
);
}
}
如果您編譯并運行這些文件,您應(yīng)該能夠看到在圖 1 里的輸出。
圖 1:來自于 CurrencyExchangePortTypeProxy.java 的輸出
生成 WSDL
大多數(shù)廠商的工具包包括某些從一個組件中自動生成 WSDL
的方法,其中包括 IBM WSTK 和 Microsoft .NET studio。為了說明 WSTK 如何允許從一個服務(wù)生成 WSDL,我將使用在清單 4
中的天氣服務(wù)。
清單 4:從一個組件中生成 WSDL
public class Weather
{
public float getTemp(
String zipcode )
{
System.out.println( "getTemp( " + zipcode +
" )" );
return 56;
}
public void setTemp( String zipcode, float temp
)
{
System.out.println( "setTemp( " + zipcode + ", " + temp +
" )" );
}
}
為了給這個類創(chuàng)建 WSDL,首先要編譯它,然后在 demo3 目錄里啟動 WSTK 的 serviceWizard。在嘗試調(diào)用下面這條命令之前,要確保 wstk-2.1bin 在您的PATH路徑設(shè)置之中:
demo3> serviceWizard
您應(yīng)該看到如圖 2 中的輸出窗口。
圖 2:Web 服務(wù)生成工具
單擊 Next,就會提示您輸入類的名字和它的類路徑。對于這個示例,其它的地方設(shè)置成默認(rèn)值就可以了。圖 3
顯示了您如何填寫各個字段。
圖 3:Web 服務(wù)生成工具中的 WSDL 信息
當(dāng)您單擊 Next,會要求您選擇希望通過 WSDL 來暴露什么方法。如圖 4 所示,按住 Shift
鍵選擇所有的方法。
圖 4:通過 WSDL 取出的所選方法
最后,您得到了一個摘要(在圖 5 中),并且要按 Finish 來結(jié)束這個過程。
圖 5: Web 服務(wù)創(chuàng)建工具摘要
恭喜您,您已經(jīng)創(chuàng)建了您的第一個 WSDL 文件!事實上,您實際創(chuàng)建了兩個文件:
Weather_Service-interface.wsdl:這個文件包括一個 WSDL 描述的
Weather_Service-impl.wsdl:這個文件定義了 WSDL 描述的
這是很好的一個拆分,因為它減少了實現(xiàn)規(guī)范中的接口規(guī)范部分的重復(fù)。從理論上來說,您可以有很多的 *impl.wsdl 文件對應(yīng)一個 *interface.wsdl 文件,并且搜索像 UDDI(下一個部分將會討論)這樣的注冊表,來尋找與一個特定接口描述對應(yīng)的一個或多個實現(xiàn)。
一個有趣的問題是:
清單 5:Weather_Service-interface.wsdl
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.weatherservice.com/Weather"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
message="IngetTempRequest"/>
message="InsetTempRequest"/>
type="Weather_Service">
namespace="urn:weather-service"
use="encoded"/>
http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:weather-service"
use="encoded"/>
namespace="urn:weather-service"
use="encoded"/>
清單 6:Weather_Service-impl.wsdl
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.weatherservice.com/Weather"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
name="Weather_ServicePort">
< BR>
namespace="http://www.weatherservice.com/Weather-interface">
從 WSTK WSDL 文件中生成存根
從 WSTK WSDL
文件來創(chuàng)建存根顯得有一點復(fù)雜,由于 Weather_Service.impl 之中的導(dǎo)入說明,使得 WSDL 存根產(chǎn)生器需到接口文件的位置執(zhí)行HTTP
Get。在這個示例中,它是 http://localhost:8080/wsdl/Weather_Service-interface.wsdl。確保 Tomcat 能夠為這個文件提供服務(wù),在 Tomcat 的根文件夾 $TOMCAT_HOMEwebappsROOT 中創(chuàng)建一個目錄
wsdl,并把所有的 .wsdl 文件復(fù)制到這個目錄中。然后,假定 tomcat 正運行在 demo3 目錄下,在 demo3
目錄下鍵入以下命令:
demo3> java com.ibm.wsdl.Main -in Weather_Service-impl.wsdl
Tomcat 將會從自己的 wsdl 目錄下提供 Weather_Service-interface.wsdl 文件,而您應(yīng)該會在 demo3 目錄下得到一個名叫 Weather_ServiceProxy.java 的存根類。清單 7 是一個測試客戶端程序,它可以訪問在您本地的 Tomcat 服務(wù)器上運行的天氣服務(wù):
清單 7:天氣 Web 服務(wù)的測試代碼
public class Client2
{
public static void
main( String[] args ) throws Exception
{
Weather_ServiceProxy
weather = new Weather_ServiceProxy();
float temp = weather.getTemp(
"75248" );
System.out.println( "temp = " + temp
);
weather.setTemp( "75248", 84 );
}
}
想要運行這個程序,編譯 demo3 目錄下的所有 Java 文件,然后使用 Apache 配置屏,用 URN urn:weather-service 來部署天氣服務(wù),然后執(zhí)行客戶端程序。圖 6 顯示了當(dāng)您填完所有的字段后,配置屏看上去的樣子:
圖 6:運行 Web 服務(wù)
當(dāng)您運行程序時,客戶端應(yīng)該顯示 getTemp() 的調(diào)用返回,而 Tomcat 窗口將會顯示出收到的
setTemp() 調(diào)用。
目標(biāo)命名空間
由于 WSDL 文件能夠?qū)肫渌?WSDL
文件,因此總有可能發(fā)生名字沖突的時候。所以,最晚拿到的 WSDL 文件需要在它們的
很可能所有的 WSDL 工具包很快都會采用這種方法。
下一部分
在下一部分中,我們會了解 Web 服務(wù)怎樣使用 UDDI
(通用描述,發(fā)現(xiàn)和集成)來宣傳自己,以便讓別的 Web 服務(wù)使用。我們將用新發(fā)布的 IBM UDDI4J 工具包在 UDDI 庫里發(fā)布和綁定 Web
服務(wù)。
參考資料
- 在第 1
部分中,Graham 詳細(xì)介紹了構(gòu)建 Web 服務(wù)應(yīng)用以實現(xiàn)對等分布式網(wǎng)絡(luò)的優(yōu)勢及其面臨的挑戰(zhàn)。
- 在第 2
部分中,Graham 提供了如何開發(fā) Web 服務(wù)的循序漸進(jìn)的解釋,其中包括您需要什么工具,如何安裝它們,如何編寫代碼以及如何配置服務(wù)。
- 在這個專欄的第 3
部分中,Graham 詳細(xì)介紹了 SOAP 在線上交換信息的行為并解釋了它是怎樣工作的。
- 請回顧第一個版本的 WSDL
1.0 規(guī)范。
- 請從 alphaWorks 下載 IBM 的 WSDL
工具包。
- 請從 alphaWorks 下載 IBM 的 Web
服務(wù)工具包。
- Xmethods.net 有一個提供公共的 Web 服務(wù)的目錄,這篇文章用到了其中的一個服務(wù)。
關(guān)于作者
Graham Glass (graham-glass@mindspring.com) 是 The Mind Electric 的創(chuàng)始人、CEO
和首席設(shè)計師。該公司設(shè)計、構(gòu)建和頒發(fā)許可證給前瞻性的分步式計算基礎(chǔ)設(shè)施。他相信,因特網(wǎng)的演變將反映出生物思維的演變,而協(xié)助人們和企業(yè)有效聯(lián)網(wǎng)的體系結(jié)構(gòu)能幫助人們理解將人腦聯(lián)結(jié)在一起的體系結(jié)構(gòu)。
在創(chuàng)建 The Mind Electric 之前,Graham 是 ObjectSpace 的主席、CTO 和聯(lián)合發(fā)起人之一。該公司總部位于達(dá)拉斯,專門從事商家到商家的集成。Graham 還是 ObjectLesson(一家提供前沿技術(shù)培訓(xùn)的公司)的創(chuàng)辦人。他為 Prentice Hall 撰寫了兩本有關(guān) UNIX 和 STL 的書籍,并以他對新興技術(shù)的熱情和清晰闡述而成為受歡迎的演說家。可通過 graham-glass@mindspring.com 和他聯(lián)系。
瀏覽:Web服務(wù)的(革)創(chuàng)新,第1部分
Web服務(wù)的(革)創(chuàng)新,第2部分
Web服務(wù)的(革)創(chuàng)新,第3部分
- 1架構(gòu)Web Service:為什么需要Web服務(wù)?
- 2XML Web Services Security
- 3創(chuàng)造性的Intranet:Factors for Corporate Knowledge Creation
- 4使用Visual Studio.Net建立web service
- 5企業(yè)核心能力的經(jīng)濟(jì)學(xué)含義
- 6Providing Content Through Web Services
- 7OA網(wǎng)絡(luò)辦公系統(tǒng)信息傳遞的安全解決方案
- 8知識地圖在項目型組織中的應(yīng)用
- 9Web服務(wù)的(革)創(chuàng)新,第2部分
- 10Web服務(wù)內(nèi)幕,第5部分:進(jìn)入流--用WSFL建模的商業(yè)流程
- 11石家莊OA信息化調(diào)研問卷
- 12微軟、IBM和BEA聯(lián)合發(fā)表Web服務(wù)新標(biāo)準(zhǔn)
- 13當(dāng)軟件變成服務(wù)時
- 14借助RDF增強WSDL--管理結(jié)構(gòu)化的Web服務(wù)元數(shù)據(jù)
- 15端到端的挑戰(zhàn)者
- 16Web Service初探
- 17關(guān)于模型的簡單介紹!
- 18由知識螺旋看知識創(chuàng)新(BY AMT 夏敬華 編譯)
- 19Web Services Description Language (WSDL) 1.1
- 20Web服務(wù)內(nèi)幕,第4部分:介紹Web服務(wù)流語言
- 21Consuming a Web Service from a Win Form Application
- 22絕對妙語:重塑企業(yè)流程、組織和文化
- 23Web Services 及其技術(shù)(上)
- 24Borland加快Web服務(wù)的分發(fā)速度
- 25將應(yīng)用程序的功能封裝成為Web Services
- 26面向21世紀(jì)的知識發(fā)展戰(zhàn)略
- 27即插即用portlet
- 28微軟展示新版互聯(lián)網(wǎng)服務(wù)MSN 8.0
- 29實用工具:IT員工的培訓(xùn)補償政策示例
- 30[原創(chuàng)]OA選擇首先要清晰概念
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114