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