當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
Web服務(wù)的(革)創(chuàng)新,第2部分
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
中的
清單 2:插入到 server.xml 的
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部分
- 1企業(yè)借OA節(jié)省費用,減輕金融風(fēng)暴影響
- 2Web服務(wù)的“租用”本質(zhì)
- 3比ERP更懂管理的管理系統(tǒng)
- 4Web Services 及其技術(shù)(上)
- 5炎黃盈動AWS石家莊OA信息化應(yīng)用套件
- 6微軟:“Web服務(wù)我們領(lǐng)先Sun 18個月”
- 7理解Web服務(wù)的服務(wù)質(zhì)量
- 8架構(gòu)Web Service:基于Web服務(wù)的應(yīng)用、解決方案和開發(fā)平臺
- 9在Web Service中使用ASP.net狀態(tài)保持
- 10微軟展示新版互聯(lián)網(wǎng)服務(wù)MSN 8.0
- 11關(guān)于石家莊OA信息化的基本概念
- 12軟件里面的思想黑馬:金和董事長欒潤峰
- 13Web Service Case Study: 認(rèn)證考試申請服務(wù)
- 14SOAP技術(shù)與B2B應(yīng)用集成--SOAP的型系統(tǒng)和數(shù)據(jù)編碼規(guī)則
- 15APQC是如何看石家莊OA信息化的?
- 16Building a Stock-Quotes Web Service
- 17“低價狂人”欒潤峰:有理想的冒險才值得
- 18超越石家莊OA信息化
- 19網(wǎng)絡(luò)、知識增長和經(jīng)濟發(fā)展
- 20從紡織行業(yè)看知識庫及專家系統(tǒng)構(gòu)建信息平臺
- 21信息時代的組織智商
- 22ITToolBox KM(by AMT整理)
- 23KnowledgeManagement at Best Buy
- 24Web服務(wù)設(shè)計師,第6部分:基于付費的Web服務(wù)的催化劑
- 25知識庫建設(shè)應(yīng)規(guī)避的5點具體誤區(qū)
- 26將Web服務(wù)用于電子交易的單點登錄
- 27石家莊OA軟件的征求意見和民意調(diào)查
- 28Re: 知識時代企業(yè)的四個要素
- 29從知識的角度回顧企業(yè)能力理論-摘錄
- 30W3C加速語義網(wǎng)和Web服務(wù)方案開發(fā)
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114