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