監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

Web服務(wù)內(nèi)幕,第3部分:Apache和Microsoft -- 良好的合作

申請免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

Web服務(wù)內(nèi)幕,第3部分:Apache和Microsoft -- 良好的合作

-- SOAP 互操作性就將來臨


James Snell (
jasnell@us.ibm.com)

軟件工程師,Emerging Technologies,IBM

2001 年 5 月

在“Web 服務(wù)內(nèi)幕”的這個部分中,James Snell 通過演示使用 Microsoft SOAP 工具包 Beta 2 獲得 Apache 基于 SOAP 的 Web 服務(wù)是如此的輕松,表明 Apache 和 Microsoft 可以很好地合作。

Web 服務(wù)的概念終于開始為人們所接受。但當(dāng)您嘗試著去實現(xiàn)它時,重要的是不要忘記,無論是開發(fā)平臺還是編程語言,無縫跨平臺互操作性是這項技術(shù)的推動力。如果您不把互操作性的問題確定下來,各種 SOAP 和 Web 服務(wù)實現(xiàn)都將在進(jìn)行信息傳遞的時候遇到故障。Web 服務(wù)則會成為又一個失敗的試驗。

IBM、Microsoft 和 Apache

許多人可能都知道,去年春天 IBM 和 Microsoft 都發(fā)行了實現(xiàn) SOAP 的第一批版本。(后來 IBM 把它的代碼給了 Apache,啟動了現(xiàn)在的 Apache SOAP 項目計劃。)但是,盡管市場上所有有關(guān) SOAP 的著作都承諾其平臺互操作性,但工具卻并不能提供這一點。在 SOAP 實現(xiàn)方式中有很多錯誤和細(xì)微差別,使得兩種工具間幾乎不能傳遞信息。但情況正開始改變。由于 Apache SOAP 項目和 Microsoft 兩方面成員所作的一致努力,互操作性已成為一個中心議題。很多最初的問題已經(jīng)消失,遺留的少數(shù)不兼容問題也正被快速而順利地解決。

請注意:為了試驗這里的兩個示例,您需要下載最新版 Apache SOAP (2.1 版) 和 Microsoft SOAP 工具包 (Beta 2 或以上)。請參閱參考資料。

互操作性 -- xsi:type 屬性的問題

如果閱讀過 developerWorks 上其他討論 Web 服務(wù)體系結(jié)構(gòu)的文章,那么您一定很熟悉以下的示意圖及其代表的含義。(如您沒有閱讀過這些文章,我強(qiáng)烈建議您上圖書館看一看。)

圖 1: Web 服務(wù)體系結(jié)構(gòu)的基本組件


圖 1 代表 Web 服務(wù)體系結(jié)構(gòu)的三個基本組件所執(zhí)行的三個基本操作:

服務(wù)提供者通過在服務(wù)代理者那里注冊來配置和發(fā)布服務(wù);

服務(wù)請求者通過查找服務(wù)代理者那里的被發(fā)布服務(wù)登記記錄來找到服務(wù);

服務(wù)請求者綁定服務(wù)提供者并使用可用的服務(wù)。

在 Web 服務(wù)的世界里,三個操作都包含三個受到稱贊的、和截然不同的技術(shù):

發(fā)布的服務(wù)使用“通用描述、發(fā)現(xiàn)和集成(UDDI) API”;

查找服務(wù)使用 UDDI 和 Web 服務(wù)描述語言的組合(WSDL);

綁定服務(wù)處理 WSDL 和簡單對象訪問協(xié)議(SOAP)。

從最基礎(chǔ)的層次上來看,綁定操作是三者中最重要的。它包含服務(wù)的實際使用,這也是發(fā)生大多數(shù)互操作性問題的地方。簡單地說,是服務(wù)提供者和服務(wù)請求者對 SOAP 規(guī)范的全力支持解決了這些問題,并實現(xiàn)了無縫互操作性。

不幸的是,這個簡單的解決方案聽起來容易實現(xiàn),但實際上卻難得多。SOAP 的許多可選組件形成的靈活性、及其固有的綜合單一性使得我們在嘗試實現(xiàn)它時會受到挫折。舉個例子,Microsoft 和 Apache SOAP 工具包間產(chǎn)生的 xsi:type 屬性沖突是個惱人的小問題,它可以導(dǎo)致一段時間內(nèi)工具間互操作性的完全中斷。

不要忘記,根據(jù) SOAP 規(guī)范,一個信封中包含的各個元素可能選擇性地使用 xsi:type 屬性來識別其包含的數(shù)據(jù)類型。如果服務(wù)提供者和請求者有一些其它方式來傳遞此信息,則它不必被包含在信封中。 xsi:type 只有當(dāng)無其它方式傳遞這些數(shù)據(jù)類型時,才應(yīng)使用這個屬性。

為了解決這一問題,Microsoft 建立了一個外部服務(wù)描述文檔的相關(guān)性,它描述了數(shù)據(jù)類型,且能被服務(wù)提供者和請求者訪問。Apache 要求任何時候都要包含 xsi:type 屬性。

這兩種方法都是“合法 SOAP”(盡管 Apache 采取的實現(xiàn)方法被認(rèn)為更合法和更固定一些),但是它們彼此不兼容。附帶補(bǔ)充一句,Apache SOAP 沒有而且是依然沒有理解 Microsoft 采用的服務(wù)描述語言。這種語言已有過三次反復(fù)。首先是“服務(wù)描述語言”或 SDL,其次是“服務(wù)合同語言”或 SCL,再次是現(xiàn)在的 “Web 服務(wù)描述語言”或 WSDL。

同時 Microsoft 也沒有包含任何機(jī)制能方便地把 xsi:type 屬性添加到工具生成的 SOAP 信封上。不過好在情況已有所改變。Microsoft 現(xiàn)在有一個新的十分靈活的 SOAP 實現(xiàn)方式,它包含對 SOAP 信封更好的支持和更低級別的控制。而 Apache 也已解除需要存在 xsi:type 屬性的限制。這樣,兩個工具間就能互相自由傳遞信息了。

一個擴(kuò)展的股票行情服務(wù),版本 1

我們這里的示例將為免費(fèi)的 NASDAQ InfoQuotes 服務(wù)創(chuàng)建一個基于 SOAP 的界面,請參閱
http://quotes.nasdaq.com。這個簡單的服務(wù)通過 HTTP-GET 請求,以 HTML 或 XML 格式提供擴(kuò)展的股票行情服務(wù)。所有這個項目的 Java 和 XML 源文件在參考資料部分。圖 2 的屏幕截圖顯示行情服務(wù)返回的 XML 數(shù)據(jù)。

圖 2:Nasdaq 行情的 XML 數(shù)據(jù)的屏幕截圖


在 NasdaqQuotes Web 服務(wù)的版一上,我們將使用一個簡單的 Java 類,它表達(dá)了一個單獨(dú) getQuotes 方法;將 HTTP-GET 請求的 XML 輸出作為一個字符串返回,如清單 1 的代碼片段所示。

配置這個 Web 服務(wù)

要將這個 Java 類配置成一個 Web 服務(wù),應(yīng)該編譯它并確定它在您的 Java Web 服務(wù)器的類的路徑上(假設(shè)您已安裝和配置了 Apache SOAP 2.1)。以下幾步將告訴您如何從 Microsoft SOAP 上配置和調(diào)用服務(wù)。

步驟 1. 創(chuàng)建一個 Apache 配置描述符。Apache SOAP Service Manager 利用配置描述符(一個簡單的 XML 文檔)收集有關(guān)已配置服務(wù)的信息。請參閱清單 2 中的 NasdaqQuotes 服務(wù)版本 1.0 的配置描述符。

清單 2: 一個 XML 配置描述符

id="urn:NasdaqQuotes">
scope="Application"
methods="getQuote">

org.apache.soap.server.DOMFaultListener


xmlns:x="" qname="x:symbol"
xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>

Apache SOAP 文檔中有 XML 配置描述符的詳細(xì)結(jié)構(gòu)說明。但是請注意我們例子中的 部分,它從 Apache SOAP 上去掉了 xsi:type 限制。在此,我們已經(jīng)聲明 XML 元素 symbol 映射到 StringDeserializer 類。這個類把 XML 元素的內(nèi)容轉(zhuǎn)換成一個 java.lang.String 的實例。通過使用這種顯式映射,Apache SOAP 無需為了提供映射信息而去尋找 xsi:type。而且,可以假定所有 XML symbol 元素的實例都可看成 String,并進(jìn)行那樣的串并轉(zhuǎn)換。

步驟 2. 一旦已創(chuàng)建配置描述符,您得用它將 NasdaqQuotes 服務(wù)配置在服務(wù)的注冊記錄中。通過執(zhí)行此命令行可以完成配置。

這里 http://acme.com/soap/servlet/rpcrouter 對應(yīng)您的 SOAP RPC Router Servlet 安裝。NasdaqQuotes 服務(wù)完成配置,并可以使用了。您可以通過調(diào)用本文附帶的 zip 包中所提供的基于 java 的客戶端來測試此服務(wù)。請參閱 readme.txt 的指導(dǎo)。

步驟 3. Microsoft 工具需要使用一個 WSDL 文檔,它描述服務(wù)的界面和位置。既然 Apache SOAP 不包含對 WSDL 的任何支持,您就有兩種選擇:用 IBM 的 alphaWorks 的 WSDL 工具包來為指定的 Java 類生成 WSDL,或者自己編寫 WSDL 文件。我建議您手寫 WSDL (請參閱清單 3 ) -- 把東西寫出來會讓您對 WSDL 的結(jié)構(gòu)和功能有更好的感覺。如果您需要出色的 XML 編輯器,我大力推薦商用的 XML-Spy 產(chǎn)品,但是其他編輯器也能用。

在編輯完 NasdaqQuotes.wsdl 文件后,該使用 Microsoft 工具了。在這篇文章所帶的 zip 包中,您會發(fā)現(xiàn) samp1e 目錄里有兩個名為 nq.vbs 和 vq.bat 的文件。 nq.vbs (請參閱清單 4 )文件包含使用 Microsoft SOAP 工具包調(diào)用 NasdaqQuotes 服務(wù)的代碼,腳本有 43 行代碼,但實際 SOAP 調(diào)用的發(fā)生只有前六行(它們中的四行由初始化基本變量的代碼組成)。您看,Microsoft 下了很大功夫使人們方便地使用他們的工具。

清單 4: 針對 Microsoft SOAP 工具包的 nq.vbs

Set SC = CreateObject("MSSOAP.SoapClient")
SC.mssoapinit "D:ServicesNasdaqQuotesClient.wsdl", "", "", ""
Res = SC.getQuote(WScript.Arguments(0))

通過執(zhí)行 nq.bat 文件,您可調(diào)用 NasdaqQuotes 服務(wù),把您要查詢的代號作為一個命令行參數(shù)來傳入(請參閱圖 3)。

圖 3: 從命令行運(yùn)行 NasdaqQuotes


家庭作業(yè): NasdaqQuotes 版本 2

NasdaqQuotes 服務(wù)版本 1.0 非常簡潔地顯示了 Microsoft 和 Apache 有能力互相進(jìn)行便捷的信息傳遞。但是行情服務(wù)返回的信息是以字符串的形式返回的,這意味著還需更多努力來改善服務(wù)。例如:我們可能要求 SOAP 信封實體以 XML 形式來返回查詢結(jié)果,而不是以返回字符串的形式。在 zip 下載包中的 NasdaqQuotes2 Service 示例能讓您采取正確的步驟。您的家庭作業(yè)是仔細(xì)研究這個例子里的內(nèi)容。和平常一樣,如您有任何問題,請告訴我,看看我是否能幫助您。

參考資料

請點擊文章頂部或底部的討論,參與有關(guān)這篇文章的討論論壇。

針對本文中的項目的 Java 和 XML 源代碼在這個 zip 文件中。

請下載最新版的 Apache SOAP。

請下載最新版的 Microsoft SOAP 工具包。

請查看 SOAP 參考資料的 cetus-links 索引。

如同 Web 服務(wù)資源中心和開發(fā)顧問,Lemur Labs 也有一個附帶參考資料的 SOAP 信息頁面 。

Soaprpc.com專門提供有關(guān) SOAP 信息的參考資料,SoapWare.org 和 SOAPClient.com 同樣如此。

關(guān)于作者

James Snell 是一位撰稿人和開發(fā)人員,他也是 IBM Web 服務(wù)開發(fā)小組最新成員之一。他在進(jìn)入 IBM 之前,已經(jīng)具有關(guān)于定制企業(yè)應(yīng)用開發(fā)和商家對商家這些方面的背景,而且他對 Web 技術(shù)前沿方面有極大的熱情。可以通過 jasnell@us.ibm.com 與他聯(lián)系。


瀏覽:Web服務(wù)內(nèi)幕,第1部分

Web服務(wù)內(nèi)幕,第2部分

Web服務(wù)內(nèi)幕,第4部分

Web服務(wù)內(nèi)幕,第5部分

Web服務(wù)內(nèi)幕,第6部分

Web服務(wù)內(nèi)幕,第7部分

Web服務(wù)內(nèi)幕,第8部分

Web服務(wù)內(nèi)幕,第9部分

Web服務(wù)內(nèi)幕,第10部分

發(fā)布:2007-03-25 13:26    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
石家莊OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢