當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
將應(yīng)用程序的功能封裝成為Web Services
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.org將應(yīng)用程序的功能封裝成為Web Services
黎獻(xiàn)勇 李勁
2002 年 5 月
介紹
目前,很多電子商務(wù)中的Web應(yīng)用程序都有與它們的客戶端進(jìn)行交換和事務(wù)處理的功能。這些應(yīng)用程序通常被稱之為B2C應(yīng)用,它們通常使用像Java
servlet, JavaServer
Page這些服務(wù)器端的編程技術(shù)來動(dòng)態(tài)生成HTML返回給客戶端?,F(xiàn)在,電子商務(wù)應(yīng)用趨向于將它們的處理流程同其他的電子商務(wù)應(yīng)用的處理流程自動(dòng)地整合起來。在這種情形下,電子商務(wù)要求B2B形式的應(yīng)用,從而使應(yīng)用之間達(dá)到公開的,簡(jiǎn)單的,統(tǒng)一的連接和交換。B2B應(yīng)用更專注于應(yīng)用之間的信息交換,而不是信息的表示。
Web服務(wù),通過定義一組可以通過互聯(lián)網(wǎng)調(diào)用的相關(guān)的商業(yè)邏輯,從而可以使電子商務(wù)將其應(yīng)用程序的功能以公開的,統(tǒng)一的方式提供給對(duì)方。Web服務(wù)通過WSDL來描述,通過SOAP作訪問,在商業(yè)注冊(cè)中心(UDDI)發(fā)布,從而使開發(fā)者和電子商務(wù)應(yīng)用程序可以搜索并定位到該服務(wù)。在Web服務(wù)開發(fā)的過程中有三個(gè)清晰的角色定義,它們是服務(wù)的提供者(Service
provider),服務(wù)的請(qǐng)求者(Service request)和服務(wù)的代理(Service broker),圖一顯示了它們之間的關(guān)系。
圖一:Web服務(wù)
Web服務(wù)的提供者使用WSDL來描述和定義那些可以通過編程來訪問的應(yīng)用程序的功能。同時(shí),服務(wù)提供者將在UDDI商業(yè)注冊(cè)中心(即服務(wù)代理)中發(fā)布這些服務(wù)的信息使其可以被其他應(yīng)用訪問到。Web服務(wù)的請(qǐng)求者通過服務(wù)代理找到他們所需的服務(wù)后,下載定義服務(wù)的文件(WSDL),接下來就可以通過SOAP來訪問這些服務(wù)了。
在本文中,我們將介紹如何用IBM的開發(fā)工具WebSphere Studio Application Developer(WSAD)來定義、發(fā)布、定位和調(diào)用Web服務(wù)。
應(yīng)用場(chǎng)景
我們的例子描述的是如何將一個(gè)已有的基于Web的公司員工電話號(hào)碼簿的應(yīng)用程序的部分功能封裝成Web服務(wù),這個(gè)應(yīng)用來自于一個(gè)我們假想的名為Acme的公司。通過這個(gè)已有的Web應(yīng)用,公司的員工可以通過員工號(hào),名字等等查詢到其他員工的信息。只要按照標(biāo)準(zhǔn)輸入查詢信息,應(yīng)用程序執(zhí)行查詢后,會(huì)將查詢結(jié)果以Web頁面的形式顯示出來。很多時(shí)候,會(huì)有其它的應(yīng)用程序也需要員工的信息,通常情況下,這些應(yīng)用的用戶通過電話號(hào)碼簿這個(gè)應(yīng)用來查詢到他們所需的員工信息,然后手工的將這些信息復(fù)制,粘貼到他們的應(yīng)用中。假如我們將電話號(hào)碼簿應(yīng)用中的員工查詢功能封裝為Web服務(wù),那么其他的應(yīng)用就可以通過編程的方式來調(diào)用這個(gè)服務(wù)獲取所需的員工信息。這樣一來,用戶將不需要手工的從各個(gè)應(yīng)用之間來獲取和整合信息,從而在整個(gè)應(yīng)用流程中的操作效率也就大大提高了。圖2描述了最初的應(yīng)用流程和使用Web服務(wù)整合后的應(yīng)用流程。
圖二: 最初的應(yīng)用流程和使用Web服務(wù)整合后的應(yīng)用流程。
提供員工信息查詢功能的Web服務(wù)
在這一部分,我們將描述怎樣將已有的基于Web的電話號(hào)碼簿應(yīng)用中的員工信息查詢功能定義成Web服務(wù)并發(fā)布它。在這個(gè)應(yīng)用中,我們有一個(gè)名為TelephoneDirectory
的Java
Bean,它有一個(gè)名為findEmployeeByID的方法,這個(gè)方法可以通過給予一個(gè)唯一的員工序列號(hào)來檢索員工的信息。下面的代碼片斷顯示了TelephoneDirectory
Bean的綱要結(jié)構(gòu)。
public class TelephoneDirectory
implements
java.io.Serializable
{
public Employee findEmployeeByID(int
id)
{
}
}
用WSDL定義Web服務(wù)
在創(chuàng)建了Web項(xiàng)目,并將TelephoneDirectory
Bean導(dǎo)入后,我們可以通過菜單項(xiàng)中的"文件->新建->Web服務(wù)"來啟動(dòng)WSAD的Web服務(wù)生成向?qū)?,它將?nèi)省Directory
Bean并顯示其所有可得的公共的方法。我們選擇將findEmployeeByID這個(gè)方法發(fā)布為Web服務(wù),并可通過http://tempuri.org/com.acme.TelephoneDirectory來訪問。在缺省狀態(tài)下,向?qū)?huì)自動(dòng)在Java類型和返回的XML類型之間選擇最佳的的映射,同時(shí)用戶也可以自己定制Java-to-XML的映射。向?qū)⑸上鄳?yīng)的用來定義Web服務(wù)的名為Directory-service.wsdl
和Directory-binding.wsdl
的WSDL文件和一個(gè)相關(guān)的用來規(guī)范WSDL的名為TelephoneDirectory-schema.xsd的模式文件。同時(shí),向?qū)н€會(huì)生成一個(gè)名為Directory.isd的部署描述文件,它將在Web服務(wù)運(yùn)行時(shí)被使用。圖3
顯示的是用Web服務(wù)生成向?qū)?chuàng)建Web服務(wù)的主要步驟(包括服務(wù)的定義,Java Bean方法的選擇和Java-to-XML的映射)。
圖3: WSAD中的Web服務(wù)生成向?qū)?/FONT>
下面的代碼段說明了如何在WSDL中定義我們的Web服務(wù)。
TelephoneDirectory-service.wsdl
<?xml version="1.0"
encoding="UTF-8"?>
<definitions
name="TelephoneDirectoryService"
targetNamespace="http://localhost:8080/TelephoneDirectoryWeb/wsdl/TelephoneDirectory-service.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:binding="http://www.telephonedirectory.com/definitions/TelephoneDirectoryRemoteInterface"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://localhost:8080/TelephoneDirectoryWeb/wsdl/TelephoneDirectory-service.wsdl">
<import
location="http://localhost:8080/TelephoneDirectoryWeb/wsdl/TelephoneDirectory-binding.wsdl"
namespace="http://www.telephonedirectory.com/definitions/TelephoneDirectoryRemoteInterface"/>
<service
name="TelephoneDirectoryService">
<port binding="binding:TelephoneDirectoryBinding"
name="TelephoneDirectoryPort">
<soap:address location="http://localhost:8080/TelephoneDirectoryWeb/servlet/rpcrouter"/>
</port>
</service>
</definitions>
TelephoneDirectory-service.wsdl文件包括了一些定義Web服務(wù)的信息,比如說Web服務(wù)的名字,Web服務(wù)的端口綁定等等。從例子中可以看出,我們將通過SOAP
rpcrouter 這個(gè) servlet來訪問Web服務(wù),而 port binding則描述了在哪可以找到如何訪問服務(wù)的詳細(xì)信息。
TelephoneDirectory-binding.wsdl
<?xml version="1.0"
encoding="UTF-8"?>
<definitions
name="TelephoneDirectoryRemoteInterface"
targetNamespace="http://www.telephonedirectory.com/definitions/TelephoneDirectoryRemoteInterface"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.telephonedirectory.com/definitions/TelephoneDirectoryRemoteInterface"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://www.telephonedirectory.com/schemas/TelephoneDirectoryRemoteInterface">
<import
location="http://localhost:8080/TelephoneDirectoryWeb/wsdl/TelephoneDirectory-schema.xsd"
namespace="http://www.telephonedirectory.com/schemas/TelephoneDirectoryRemoteInterface"/>
<message
name="findEmployeeByIDRequest">
<part name="id" type="xsd:int"/>
</message>
<message
name="findEmployeeByIDResponse">
<part name="result" type="xsd1:com.acme.Employee"/>
</message>
<portType
name="TelephoneDirectory">
<operation name="findEmployeeByID"
parameterOrder="id">
<input message="tns:findEmployeeByIDRequest"
name="findEmployeeByIDRequest"/>
<output message="tns:findEmployeeByIDResponse"
name="findEmployeeByIDResponse"/>
</operation>
</portType>
<binding name="TelephoneDirectoryBinding"
type="tns:TelephoneDirectory">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation
name="findEmployeeByID">
<soap:operation soapAction="" style="rpc"/>
<input
name="findEmployeeByIDRequest">
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/com.acme.TelephoneDirectory"
use="encoded"/>
</input>
<output
name="findEmployeeByIDResponse">
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://tempuri.org/com.acme.TelephoneDirectory"
use="encoded"/>
</output>
</operation>
</binding>
</definitions>
TelephoneDirectory-binding.wsdl文件中包含了定義Web服務(wù)接口的信息。在我們的例子中,接口的名字為TelephoneDirectoryRemoteInterface,它有一個(gè)名為TelephoneDirectory的portType,這個(gè)端口關(guān)聯(lián)了一個(gè)名為findEmployeebyID的操作。
TelephoneDirectory-schema.xsd
<?xml version="1.0"
encoding="UTF-8"?>
<schema attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://www.telephonedirectory.com/schemas/TelephoneDirectoryRemoteInterface"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://www.telephonedirectory.com/schemas/TelephoneDirectoryRemoteInterface">
<complexType
name="com.acme.Employee">
<all>
<element name="phone"
type="string"/>
<element name="lastName"
type="string"/>
<element name="firstName"
type="string"/>
<element name="id"
type="int"/>
</all>
</complexType>
</schema>
TelephoneDirectory-schema.xsd文件中包含了在Web服務(wù)中從Java到XML的映射信息,在例子中,名為com.acme.Employee的Java類將被映射為一個(gè)完整的XML文檔,XML中的每一個(gè)元素都對(duì)應(yīng)于類中一個(gè)簡(jiǎn)單的Java類型。這些信息將在TelephoneDirectory-binding.wsdl文件中定義消息類型和格式時(shí)被用到。
測(cè)試Web服務(wù)
WSAD中的Web服務(wù)生成向?qū)且粋€(gè)強(qiáng)大,有效的工具,它不但可以引導(dǎo)您一步一步的創(chuàng)建和定義一個(gè)Web服務(wù),還可以幫助您部署和測(cè)試生成的Web服務(wù)。您可以不需要知道部署和配置Web服務(wù)的詳細(xì)信息,因?yàn)橄驅(qū)?huì)自動(dòng)將新創(chuàng)建的Web服務(wù)部署到WSAD自帶的WebSphere應(yīng)用服務(wù)器測(cè)試環(huán)境中,同時(shí)幫您生成用來測(cè)試的Web客戶端應(yīng)用程序并運(yùn)行它。圖4顯示了向?qū)傻挠脕頊y(cè)試的客戶端例子程序。
圖4:WSAD中生成的用來測(cè)試的客戶端例子程序
從圖4中,我們看到客戶端例子程序的用戶界面由三個(gè)HTML部分構(gòu)成。在左邊區(qū)域的上部列出了所有可以作為Web服務(wù)調(diào)用的方法。當(dāng)選中其中任一方法時(shí),右邊區(qū)域的上部會(huì)顯示出一個(gè)表格,表格里包含要調(diào)用該方法所需的所有參數(shù)。用戶輸入?yún)?shù)值,并點(diǎn)擊提交按鈕后,相應(yīng)的Web服務(wù)將被調(diào)用,結(jié)果會(huì)顯示在底部區(qū)域。
將Web服務(wù)發(fā)布到UDDI注冊(cè)中心
在利用WSAD自帶的測(cè)試環(huán)境驗(yàn)證我們創(chuàng)建的Web服務(wù)成功后,我們準(zhǔn)備讓其它的應(yīng)用程序來使用該服務(wù)。我們用WSAD中的UDDI
explorer將Web服務(wù)發(fā)布到IBM Test Registry(要使用IBM的Test Registry,
你需要先到以下網(wǎng)址www-3.ibm.com/services/uddi/testregistry/protect/home.jsp注冊(cè))。首先,我們?cè)贗BM的Test
Registry中創(chuàng)建一個(gè)名為ACME Business的商業(yè)實(shí)體,接下來,就可以將我們的電話號(hào)碼簿的Web服務(wù)發(fā)布到其中了。圖5顯示了怎樣使用UDDI
explorer 來發(fā)布我們的Web服務(wù)。
圖5: 用UDDI Explorer發(fā)布Web服務(wù)
使用員工信息查詢的Web服務(wù)
當(dāng)我們想通過編程的方式從電話號(hào)碼簿的應(yīng)用中來檢索員工信息,我們需要首先查找到這個(gè)Web服務(wù)的定義然后調(diào)用它們。也就是說,我們將成為這個(gè)Web服務(wù)的服務(wù)請(qǐng)求者。
通過UDDI Registry發(fā)現(xiàn)Web服務(wù)
我們使用WSAD中的UDDI
explorer來查找電話號(hào)碼簿這個(gè)Web服務(wù)。一旦我們?cè)赨DDI Registry中找到它,我們將使用導(dǎo)入功能將搜索到的WSDL文檔導(dǎo)入到WSAD的工作臺(tái)中。
圖5說明了如何發(fā)現(xiàn)、導(dǎo)入Web服務(wù)定義文檔的過程。
圖6:發(fā)現(xiàn)、導(dǎo)入U(xiǎn)DDI Registry中的WSDL文檔
通過SOAP來訪問Web服務(wù)
通過SOAP來訪問Web服務(wù)的最常見的方法是使用事先生成的Java
代理對(duì)象(Java Proxy
Object)。通過使用WSAD中的Web服務(wù)客戶端向?qū)?,我們可以為電話?hào)碼簿這個(gè)Web服務(wù)生成一個(gè)Java代理,它使我們可以通過簡(jiǎn)單的Java調(diào)用來訪問Web服務(wù)。圖7顯示了如何使用客戶端向?qū)砩蒍ava代理對(duì)象并通過生成的例子代碼來訪問Web服務(wù)。
圖7:生成一個(gè)Java代理并訪問Web服務(wù)
總結(jié)
Web服務(wù)是構(gòu)建在諸如XML、SOAP、WSDL和UDDI等等這些開放的,技術(shù)實(shí)現(xiàn)中立的標(biāo)準(zhǔn)之上的。Web服務(wù)被看作是下一代Web應(yīng)用的奠基石,通過Web服務(wù),電子商務(wù)應(yīng)用可以高效的,自動(dòng)化的整合他們的應(yīng)用,降低開發(fā)費(fèi)用,獲取更多的商機(jī)。到此為止,我們已經(jīng)描述了如何將已有的應(yīng)用程序的功能封裝為Web服務(wù)的過程,展示了在一個(gè)B2B的例子應(yīng)用中,如何使用IBM的WebSphere
Studio Application Developer來非常輕松的定義、發(fā)布、定位、訪問Web服務(wù)。
資源:
1.請(qǐng)下載最新版本的WSAD試用版。
2.下載directory.war文件,該文件包含了本文的例子代碼。要運(yùn)行該例子程序,需要將該文件導(dǎo)入IBM的WebSphere Studio Application Developer工作區(qū),然后您就可以通過Web服務(wù)向?qū)伤璧拇a來測(cè)試這個(gè)應(yīng)用和Web服務(wù)了。
3. 大家對(duì)于本文有任何建議以及想到的其他可能的問題,都?xì)g迎到討論論壇來提出意見或給出評(píng)論。
黎獻(xiàn)勇, 電腦軟件業(yè)余愛好者,擅長(zhǎng)基于XML和Web服務(wù)的WebSphere應(yīng)用設(shè)計(jì). 可以通過 lxylxylxylxy@hotmail.com與他聯(lián)系。
李勁, IBM軟件解決方案多倫多實(shí)驗(yàn)室應(yīng)用開發(fā)技術(shù)中心的部門負(fù)責(zé)人,他負(fù)責(zé)從收集用戶要求到軟件實(shí)現(xiàn)及測(cè)試的全部設(shè)計(jì)周期,即收集、分析用戶的要求,并在軟件以及WebSphere應(yīng)用開發(fā)工具和面向Web應(yīng)用的交互式設(shè)計(jì)技術(shù),實(shí)現(xiàn)用戶的要求和使用方案。 Jin目前的主要工作是Web服務(wù)和B2B應(yīng)用集成,他具有十多年的軟件業(yè)從業(yè)經(jīng)驗(yàn),曾多次使用VisualAge實(shí)現(xiàn)了IBM的Java和WebSphere應(yīng)用服務(wù)器的客戶承諾. 可以通過 jinli@ca.ibm.com與他聯(lián)系。
- 1柴油機(jī)故障診斷專家系統(tǒng)知識(shí)庫(kù)設(shè)計(jì)
- 2Web服務(wù)準(zhǔn)備:理解和使用Web服務(wù)托管技術(shù)
- 3OA網(wǎng)絡(luò)辦公系統(tǒng)信息傳遞的安全解決方案
- 4從九點(diǎn)連線談創(chuàng)新及對(duì)石家莊OA信息化的再思考(by AMT 夏敬華)
- 5Web服務(wù)設(shè)計(jì)師,第2部分:動(dòng)態(tài)電子商務(wù)模式
- 62008協(xié)同軟件冰火之年:概念褪去 普及延伸
- 7BEA和Palm合作掌上電腦Web服務(wù)
- 8Web服務(wù)內(nèi)幕,第10部分:深入主題:可靠性和事務(wù)
- 9知識(shí)地圖在項(xiàng)目型組織中的應(yīng)用
- 10SOAP與RDF--超越遠(yuǎn)程過程調(diào)用
- 11Web服務(wù):WS-Inspection 1.0
- 12如何使用Visual Studio .NET和Office XP創(chuàng)建和部署XML Web Service
- 13架構(gòu)Web Service:什么是Web服務(wù)?
- 14Web服務(wù)網(wǎng)絡(luò):簡(jiǎn)化企業(yè)間工程的中介
- 15架構(gòu)Web Service:為什么需要Web服務(wù)?
- 16Web Services Interoperability and SOAP
- 17使用Visual Studio.Net建立web service
- 18關(guān)于模型的簡(jiǎn)單介紹!
- 19The DECOR Project:Workflow-Embedded Organizational Memory Ac
- 20端到端的挑戰(zhàn)者
- 21借助RDF增強(qiáng)WSDL--管理結(jié)構(gòu)化的Web服務(wù)元數(shù)據(jù)
- 22利用辦公自動(dòng)化系統(tǒng)進(jìn)行石家莊OA信息化
- 23.NET會(huì)取代COM嗎?--準(zhǔn)備Web服務(wù)的未來
- 24資本的冬天是協(xié)同軟件行業(yè)的春天
- 25Web Service Case Study:軟件反饋跟蹤平臺(tái)
- 26石家莊OA信息化的基本XML和RDF技術(shù)(三):語義知識(shí)
- 27即插即用portlet
- 28對(duì)某集團(tuán)公司協(xié)同辦公系統(tǒng)未來3-5年的IT規(guī)劃建設(shè)藍(lán)圖
- 29Web服務(wù)內(nèi)幕,第7部分:WSFL和遞歸組合
- 30中小企業(yè)如何化解經(jīng)濟(jì)危機(jī)
成都公司:成都市成華區(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