監(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ù)的(革)創(chuàng)新,第2部分

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

Web服務(wù)的(革)創(chuàng)新,第2部分

--你好世界,Web服務(wù)風(fēng)格

 

Graham Glass

CEO 兼首席設(shè)計師,The Mind Electric

2000 年 12 月

本文循序漸進地解釋如何開發(fā) Web 服務(wù),包括需要什么工具、如何安裝這些工具、如何編寫代碼以及如何部署服務(wù)。它還繼續(xù)解釋如何從因特網(wǎng)調(diào)用其它 Web 服務(wù)。

歡迎閱讀本專欄第二部分,本專欄重點講述 Web 服務(wù)技術(shù)的演變和革新方面。在第一部分中,我給出了 Web 服務(wù)的概述和使該技術(shù)成為主流所必須解決的問題。在本文中,我將為您講解構(gòu)建和部署第一個 Web 服務(wù)所需知道的所有事情。我還將演示如何調(diào)用已部署在因特網(wǎng)上的 Web 服務(wù)。

工具和安裝

構(gòu)建第一個 Web 服務(wù)的第一步是選擇一個工具集。將使用的工具有:

Apache SOAP 2.0 - SOAP 的這個開放源碼 Java 實現(xiàn)包括對 SOAP 1.1 規(guī)范有用的子集的支持,并與現(xiàn)有的 Web 服務(wù)很好地集成。請參閱參考資料一節(jié)以下載該軟件。

Apache Jakarta Tomcat 3.2.1 - 該開放源碼 Java Web 服務(wù)器還實現(xiàn)了主機 Apache SOAP 2.0 所需的 Java servlets 2.2 API 規(guī)范。請參閱參考資料一節(jié)以下載該軟件。

Apache Xerces XML Parser 1.2.3 -該開放源碼 XML 語法分析器實現(xiàn)大多數(shù)最新 XML 規(guī)范,并由 Apache SOAP 2.0 使用。請參閱參考資料一節(jié)以下載該軟件。

希望您的下載鏈路速度足夠快,因為這些下載總量超過 6 兆字節(jié)。我在家里通過 28K 鏈路下載該軟件,下載時間足夠我喝幾杯咖啡和出外跑步了。

如果將每個包解壓縮到根目錄,應(yīng)該得到如清單 1 所示的目錄結(jié)構(gòu)。

清單 1:Apache 包目錄清單


jakarta-tomcat-3.2
lib - contains webserver.jar, servlet.jar, jasper.jar, parser.jar, jaxp.jar
soap-2_0
lib - contains soap.jar
xerces-1_2_3 - contains xerces.jar

接下來要做的是將 Xerces 和 Apache SOAP .jar 文件添加到類路徑,確保 xerces.jar 在前面。如果不這樣做,則 Apache SOAP 可能會發(fā)現(xiàn)錯誤的 XML .jar 文件,從而無法正確工作。我在自己的系統(tǒng)上將以下兩項添加到類路徑中:

C:xerces-1_2_3xerces.jar
C:soap-2_0libsoap.jar

然后將 tomcat bin 子目錄添加到 PATH 設(shè)置,并將環(huán)境變量 TOMCAT_HOME 設(shè)置成 tomcat 主目錄。如果將 tomcat 安裝到根目錄,則要把 C:jakarta-tomcat-3.2bin 添加到 PATH,并將 TOMCAT_HOME 設(shè)置成 C:jakarta-tomcat-3.2。

下一部分有點麻煩。很明顯,主 Tomcat 腳本錯誤地將自己的類插入到現(xiàn)有類路徑之前,從而導(dǎo)致前面提到的順序錯誤的 xerces.jar 問題,因此,必須編輯 jakarta-tomcat-3.2bintomcat.bat (如果正在使用 UNIX,則編輯 .sh),并將下行:

set CP=%CP%;%CLASSPATH%

替換成:

set CP=%CLASSPATH%;%CP%

或其 UNIX 等價行。通過交換順序,xerces.jar 文件現(xiàn)在又處于正確的搜索位置。

最后,必須通過編輯 jakarta-tomcat-3.2confserver.xml 并在文件中現(xiàn)有項之后附加清單 2 中的 項來配置 Tomcat,以便它自動檢測 Apache SOAP 子系統(tǒng)。

清單 2:插入到 server.xml 的

path="/soap"
docBase="C:/soap-2_0/webapps/soap"
reloadable="true">

將 docBase 屬性設(shè)置成指向 Apache SOAP webapps/soap 子目錄的完整路徑。如果正在使用 Windows,則必須包括驅(qū)動器字母,否則將不會正確工作(我好不容易才得知這一點)。

現(xiàn)在您已準(zhǔn)備好開始構(gòu)建第一個 Web 服務(wù)應(yīng)用。

啟動 Web 服務(wù)器

在為您演示如何編寫自己的 Web 服務(wù)之前,讓我們啟動 Tomcat 并激活 SOAP 歡迎頁面。創(chuàng)建一個名為 demo1 的目錄來放置示例應(yīng)用,轉(zhuǎn)至該目錄,然后輸入:

tomcat run

這將啟動在本地主機端口 8080 上運行的 Tomcat Web 服務(wù)器。應(yīng)該看到如圖 1 的屏幕。

圖 1:引導(dǎo) Tomcat Web 服務(wù)器


然后啟動 Web 瀏覽器并輸入 URL http://localhost:8080/soap。這將激活在編輯 Tomcat server.xml 文件時安裝到 /soap 的 Apache SOAP。如果這些都正確,您將看到如圖 2 中打開的頁面。

圖 2:Apache SOAP 系統(tǒng)的歡迎頁面


這時,關(guān)閉瀏覽器并停止 Tomcat。將在編寫了 Web 服務(wù)并準(zhǔn)備部署之后再次重新啟動它們。

編寫 Web 服務(wù)

編寫 Web 服務(wù)比較簡單。我將編寫一個簡單的 Web 服務(wù)來計算兩個國家之間的匯率。該服務(wù)的 Java 界面如清單 3 所示。

清單 3:簡單 Web 服務(wù)的 Java 界面

public interface IExchange
{
float getRate( String country1, String country2 );
}

Apache SOAP 不要求實際聲明接口,可以直接從實現(xiàn)類發(fā)布方法,但是我更喜歡用這種方法作為良好編程習(xí)慣的一部分。清單 4 顯示了將用到的簡單接口實現(xiàn)。

清單 4:示例的 Java 接口

public class Exchange implements IExchange
{
public float getRate( String country1, String country2 )
{
System.out.println( "getRate( " + country1 + ", " + country2 + " )" );
return 144.52F; // always return the same value for now
}
}

將 demo1 添加到類路徑,然后編譯代碼以創(chuàng)建 demo1Exchange.class。一旦完成后,可以將該 Java 類作為 Web 服務(wù)發(fā)布到 Tomcat。

部署 Web 服務(wù)

要部署 Exchange 服務(wù),通過輸入 tomcat run 再次從 demo1 目錄啟動 Tomcat。然后在瀏覽器中輸入 URL
http://localhost:8080/soap,然后在看到歡迎屏幕時單擊 Run the admin client。應(yīng)該看到如圖 3 的屏幕。

圖 3:SOAP Admin 頁面


該屏幕顯示一些允許您部署、取消部署和列出 Tomcat/SOAP 系統(tǒng)中駐有服務(wù)的選項。如果單擊 List 選項,將看到?jīng)]有要開始的服務(wù)。要部署 Exchange 服務(wù),單擊 Deploy 選項并如圖 4 所示填充字段。

圖 4:部署 Exchange 服務(wù)


以下是 Deploy 屏幕中每個字段的解釋:

ID:Web 服務(wù)標(biāo)識。在該示例中,我將服務(wù)標(biāo)識設(shè)置成 urn:demo1:exchange,它跟在 http://www.ietf.org/rfc/rfc2141.txt 推薦的統(tǒng)一資源命名規(guī)范之后,其中,demo 是名稱空間,exchange 是服務(wù)字符串。

Scope:服務(wù)的激活方式。Request 表示每一個請求都創(chuàng)建一個新的服務(wù)實例。其它可用的方式是 Session 和 Application。

Methods:要在 Web 服務(wù)中顯示的由空格定界的方法列表。請注意,這好象暗示 Web 服務(wù)無法顯示兩個同名方法,但 SOAP 規(guī)范并不禁止這樣做。

Provider:Web 服務(wù)的類型。Apache/SOAP 目前只支持 Java 類和 Bean 腳本,但以后的版本將肯定支持 EJB 和其它流行的組件類型。

Provider Class/Static:Java 類的名稱。必須通過類路徑設(shè)置獲得該類。如果 Static 為真,則假定方法為 Java 類上的靜態(tài)方法,否則將它們作為實例方法處理。

其它字段與 Apache/SOAP 平臺的專有加載項 (add-on) 相關(guān),本文不再贅述。

輸入這些字段之后,向下滾動并單擊窗口底部的 Deploy 按鈕。應(yīng)該看到一個屏幕表明已經(jīng)部署了服務(wù)。如果單擊 List 按鈕,則將看到列出的 Web 服務(wù)的 URN。單擊其鏈接,應(yīng)該看到如圖 5 的信息。

圖 5:列出 Web 服務(wù)的 URN


如您所見,部署過程非常簡單明了。有關(guān)當(dāng)前部署的服務(wù)的所有信息都被 Tomcat/SOAP 存儲到當(dāng)前目錄中名為 DeployedServices.ds 的文件中。請耐心嘗試并閱讀它 -- 它包含一個序列化的 Java 散列表!

調(diào)用 Web 服務(wù)

要從 Java 客戶機調(diào)用 Web 服務(wù),需導(dǎo)入 Apache/SOAP 所需的各種包,然后通過構(gòu)造 Call 對象并初始化其字段來準(zhǔn)備遠程 SOAP 調(diào)用。通常將編碼風(fēng)格設(shè)置成 Constants.NS_URI_SOAP_ENC,本文不再贅述替代的編碼風(fēng)格。

每個參數(shù)都由一個 Parameter 對象和自變量名稱、自變量類型、自變量值(帶有封裝在其 Object 等價物中的原語)和自變量的編碼風(fēng)格(空表示缺省)表示。

要發(fā)送方法調(diào)用,用 SOAP 端點的 URL 和 SOAPAction 值(通常是空字符串,將在下一專欄中討論)執(zhí)行 invoke() 方法。如果一切正常,則返回結(jié)果和封裝在其對象等價物中的原語。清單 5 顯示了 Java 客戶機的源代碼。

清單 5:Java 客戶機代碼

import java.net.*;
import java.util.*;
import org.apache.soap.*; // Body, Envelope, Fault, Header
import org.apache.soap.rpc.*; // Call, Parameter, Response

public class Client
{
public static void main( String[] args ) throws Exception
{
URL url = new URL( "
http://localhost:8080/soap/servlet/rpcrouter" );
String urn = "urn:demo1:exchange";

Call call = new Call(); // prepare the service invocation
call.setTargetObjectURI( urn );
call.setMethodName( "getRate" );
call.setEncodingStyleURI( Constants.NS_URI_SOAP_ENC );
Vector params = new Vector();
params.addElement( new Parameter("country1", String.class, "USA", null ) );
params.addElement( new Parameter( "country2", String.class, "japan", null ) );
call.setParams( params );

try
{
System.out.println( "invoke servicen" + " URL= " + url + "n URN =" + urn );
Response response = call.invoke( url, "" ); // invoke the service

if( !response.generatedFault() )
{
Parameter result = response.getReturnValue(); // response was OK
System.out.println( "Result= " + result.getValue() );
}
else
{
Fault f = response.getFault(); // an error occurred
System.err.println( "Fault= " + f.getFaultCode() + ", " + f.getFaultString() );
}
}
catch( SOAPException e ) // call could not be sent properly
{
System.err.println( "SOAPException= " + e.getFaultCode() + ", " + e.getMessage() );
}
}
}

當(dāng)通過輸入 java Client 運行程序時,應(yīng)該看到如圖 6 的結(jié)果。

圖 6:運行 Java 客戶機


最后,Tomcat 屏幕中應(yīng)該出現(xiàn) Web 服務(wù)的輸出,如圖 7 所示。

圖 7:Tomcat 上的 Web 服務(wù)輸出


恭喜!您剛剛構(gòu)建并運行了第一個 Web 服務(wù)應(yīng)用?,F(xiàn)在開始真正享受樂趣吧!

從因特網(wǎng)調(diào)用 Web 服務(wù)

因為 Web 服務(wù)通過 HTTP 使用標(biāo)準(zhǔn)的 XML 格式來進行消息傳遞,所以從因特網(wǎng)調(diào)用 Web 服務(wù)相當(dāng)明了。要演示這點,請造訪 XMethods 站點(請參閱參考資料)。該站點有體驗這種新技術(shù)的極好的 Web 服務(wù)選擇。其主頁顯示了可用 Web 服務(wù)的列表,如圖 8 所示。

圖 8:XMethods 的 Web 服務(wù)清單


從該索引單擊名為 Currency Exchange Rate 的 Web 服務(wù)。將顯示一個屏幕(請參閱圖 9),該屏幕描述這個 Web 服務(wù)的所有細節(jié),包括 URN、路由器端點 URL 和開發(fā)人員可用方法的每一個描述。

圖 9:有關(guān) Xmethods 上 Currency Exchange Rate 的信息


我們將在本專欄的下一部分更詳細地討論 Web 服務(wù)。目前,姑且認(rèn)為在 XMethods 發(fā)布的 Web 服務(wù)提供與您剛剛構(gòu)建的方法完全相同的方法。要調(diào)用 XMethods 服務(wù),將 Java 客戶機中的 URL 和 URN 設(shè)置分別修改成 http://services.xmethods.net/soap 和 urn:xmethods-CurrentExchange,然后重新運行客戶機。應(yīng)該看到如圖 10 的屏幕。

圖 10:運行 Currency Exchange Rate Web 服務(wù)


我第一次運行這種代碼的感覺是:通過因特網(wǎng)得到方法調(diào)用并調(diào)用遠在千里之外的服務(wù)真是太奇妙了!

在本專欄的下一部分中,我將解釋 SOAP 的內(nèi)部工作,包括 XML 的線上格式、編碼方案以及它如何與 Web 服務(wù)器集成。

參考資料

  • 在第一部分中,Graham 討論了構(gòu)建 Web 服務(wù)應(yīng)用來啟用對等分布式網(wǎng)絡(luò)的好處和挑戰(zhàn)。
  • 要下載 Apache SOAP 2.0,請造訪 http://xml.apache.org/soap/index.html,單擊下載鏈接,然后選擇 soap-bin-2.0.zip(用于 Windows),或適合于您的平臺的包。
  • 要下載 Apache Jakarta Tomcat 3.2,請造訪 http://jakarta.apache.org/site/binindex.html 或 http://jakarta.apache.org,單擊 Tomcat 3.2 以進入 http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.1/bin/,然后單擊 download 按鈕并選擇 jakarta-tomcat-3.2.zip。

    要下載
    Apache Xerces XML Parser 1.2.3,請造訪 http://xml.apache.org/xerces-j/,然后單擊下載鏈接并選擇 Xerces-J-bin-1.2.3.zip。
  • XMethods 提供開發(fā)人員可以訪問的 Web 服務(wù)列表。
  • 我使用 XMethods 的 Currency Exchange Rate Web 服務(wù)作為示例。
  • 第三部分:SOAP 是如何工作的
  • 第四部分:Web 服務(wù)描述語言 (WSDL)

關(guān)于作者
Graham Glass 是 The Mind Electric 的創(chuàng)始人、CEO 兼首席設(shè)計師,該公司設(shè)計、構(gòu)建和特許向前思考型分步式計算基礎(chǔ)設(shè)施。他相信,因特網(wǎng)的演變將反映出生物思維的演變,協(xié)助人們和企業(yè)有效聯(lián)網(wǎng)的體系結(jié)構(gòu)能幫助人們理解將人腦聯(lián)結(jié)在一起的體系結(jié)構(gòu)??赏ㄟ^ graham-glass@mindspring.com 與他聯(lián)系。

 

 

瀏覽:Web服務(wù)的(革)創(chuàng)新,第1部分

Web服務(wù)的(革)創(chuàng)新,第3部分

Web服務(wù)的(革)創(chuàng)新,第4部分

發(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

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

QQ在線咨詢