【摘要】本文結(jié)合Web Service,在Eclipse平臺上實現(xiàn)了基于Eclipse的JMS插件。只需在JMS插件上配置一些用戶基本信息,就可以自動生成Web Service提供端和客戶端的代碼。
【關(guān)鍵詞】Eclipse Web Service Xfire 插件
1 引言
在現(xiàn)在的網(wǎng)絡(luò)環(huán)境中,跨平臺的可互操作性是近年來爭相討論的話題。Web Service正是這一時期的產(chǎn)物,它實現(xiàn)了跨防火墻的通信、異構(gòu)平臺的應(yīng)用、企業(yè)應(yīng)用集成、行業(yè)內(nèi)部B2B的應(yīng)用和強安全特性的應(yīng)用。它的實現(xiàn)將會大大改變商業(yè)運做的模式和信息交流的風(fēng)格。而Xfire是新一代的Web Service框架,它通過提供簡單的API和支持標(biāo)準(zhǔn)協(xié)議,便可以開發(fā)面向服務(wù)的程序。
基于Eclipse的插件,近幾年成為研究的熱點和重點,因為Eclipse是一個開放的、通用的、可擴(kuò)展的集成開發(fā)環(huán)境,而且它提供了一個用于開發(fā)插件的框架,通過開發(fā)相應(yīng)的Eclipse插件,提高了項目的開發(fā)效率和質(zhì)量。當(dāng)前,已經(jīng)出現(xiàn)了不少Eclipse插件,比如,Hibernate插件、HTML圖形化插件等。但針對Web Service的插件目前還沒有。我們開發(fā)了基于Eclipse的Web Service插件,它不但能簡化開發(fā)過程,而且具有擴(kuò)展能力強、使用方便、可靠性高等優(yōu)點。
2 Web Service
Web Service是建立可互操作的分布式應(yīng)用程序的新平臺,它透過Web通訊協(xié)議及資料格式的開放標(biāo)準(zhǔn)來為應(yīng)用程序提供服務(wù),其中它的最基本協(xié)議包括:SOAP(簡單對象訪問協(xié)議,它規(guī)定了Web Service之間是怎樣傳遞信息的。)、WSDL(Web Service描述語言)和UDDI(通用服務(wù)發(fā)布與發(fā)現(xiàn)規(guī)范,用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。)一個Web Service的生命周期,如圖1所示:(1)提供端發(fā)布一個Web Service,使其能夠接受和響應(yīng)SOAP消息;(2)撰寫一個WSDL文件用于描述此Web Service;(3)將此WSDL發(fā)布到UDDI上;(4)客戶端從UDDI上搜索到發(fā)布的WSDL;(5)根據(jù)發(fā)布的WSDL,客戶端可以編寫程序。Web Service的安全性和保密性是非常重要的問題。WS-Security通過利用現(xiàn)有標(biāo)準(zhǔn)和規(guī)范來實現(xiàn)安全性,它提供了三種可選的Web Service安全模式:Username Token模式,Encrypt模式,Sign模式。
實現(xiàn)Web Service的框架有很多,但Xfire框架支持一系列Web Service的新標(biāo)準(zhǔn),它通過提供簡單的API和支持標(biāo)準(zhǔn)協(xié)議,便可以開發(fā)面向服務(wù)的程序,它消除了使用不同組件模型、操作系統(tǒng)與編程語言系統(tǒng)之間存在的差異, 使異類系統(tǒng)能夠作為計算網(wǎng)絡(luò)的一部分協(xié)同運行。
3 Web Service插件
3.1 Web Service插件的設(shè)計方案
Web Service包括兩個部分:提供端和客戶端。提供端基礎(chǔ)代碼包括服務(wù)xml、一個接口和它的實現(xiàn)類;客戶端基礎(chǔ)代碼包括一個與提供端接口相同的接口,如果提供端發(fā)布了值對象,則有與提供端相同的值對象,如果提供端發(fā)布了復(fù)雜類型的綁定,則有與提供端相同的綁定文件。在最原始的配置文件及java類編寫方式——手工編寫時,從業(yè)務(wù)邏輯出發(fā),我們不但需要考慮配置文件的配置方法,還要遵循Web Service的相關(guān)規(guī)范,一行一行的編寫,難免顧此失彼,既耗時也容易出錯。
Web Service插件改變了這種情況,它使得Web Service的實現(xiàn)極其簡單,大部分基礎(chǔ)代碼都可以由它幫你完成。它在提供端使程序員輕松的配置一些基本信息,就可以生成提供端代碼。而在客戶端,通過給插件一個WSDL文件便可以生成客戶端代碼。這種操作極大地減少了編碼的工作量并且在最大程度上保證了java類和配置文件的一致性、同步性,提高了編碼的質(zhì)量,目前是國外非常流行的開發(fā)方式之一。Web Service插件對Web Service的Xfire框架有很好的支持,極大地提高了開發(fā)效率。
根據(jù)Web Service插件所提供的功能,我們將其分為兩部分:Web Service提供端插件和Web Service客戶端插件。Web Service提供端插件的功能為把一個普通的java文件轉(zhuǎn)換為一個web服務(wù),并自動生成它的配置文件。具體功能為:讀取一個普通的java文件,用戶根據(jù)插件UI信息配置相應(yīng)數(shù)據(jù)項并可以根據(jù)發(fā)布信息接口修改模板,從而生成web服務(wù)的java類和配置文件。Web Service客戶端插件的功能為解析WSDL文件,生成客戶端代碼,從而客戶端可以對提供端進(jìn)行訪問。具體功能為:解析WSDL文件,用戶根據(jù)WSDL文件信息接口修改模板,從而生成客戶端代碼。Web Service提供端插件和Web Service客戶端插件分別針對WS-Security的三種安全模式給出相應(yīng)的配置項,根據(jù)用戶所選的模式和配置信息生成相應(yīng)的代碼和密鑰。
Web Service提供端插件包括的模塊有:解析java類及其方法的模塊,根據(jù)java類及方法配置生成web服務(wù)的接口及配置文件的模塊,根據(jù)用戶選擇的Web Service提供端的安全模式自動生成安全類、配置文件和密鑰的模塊。Web Service客戶端插件包括的模塊有:解析WSDL文件的模塊,根據(jù)解析后WSDL文件的信息生成客戶端代碼的模塊,根據(jù)用戶選擇的Web Service客戶端的安全模式自動生成安全類、配置文件和密鑰的模塊。
3.2 Web Service插件的算法設(shè)計
(1)代碼自動生成是由FreeMarker模板機制和我們編輯的代碼生成算法完成的,由于FreeMarker是一個強大的模板引擎,所以我們采用它的模板機制,運用我們的算法就可以完成Web Service插件的代碼生成。從而根據(jù)插件頁面?zhèn)魅氲男畔⒕涂梢陨商峁┒撕涂蛻舳说膉ava類、xml文件、屬性文件等。
具體算法如下:
s0:獲取Web Service插件用戶填入的Web Service配置信息,將其轉(zhuǎn)換為值對象。
s1:初始化欲生成的文件的輸出路徑和各個模板路徑。
s2:將Web Service配置信息值對象放入到Map中。
s3:循環(huán)每一個模板。
s31:將Map中的value和key放入到哈希表中。
s32:根據(jù)模板名將每個模板轉(zhuǎn)換為FreeMarker的模板類。
s33:FreeMarker模板類將模板中的key與hash表中的key對應(yīng)上,從而將與key對應(yīng)的value值放入模板中相應(yīng)位置。
s34:通過java.io.BufferedWriter將文本寫入字符輸出流并緩沖字符。
s35:將緩沖字符輸出流轉(zhuǎn)換為字符串,并根據(jù)文件名將文件寫入。
s36:根據(jù)欲生成的文件的輸出路徑,生成該文件。
s37:根據(jù)文件全名作截取,如webservice.xml截取完為xml,從而判斷文件類型。如果文件類型為java文件,則跳s38,如果文件類型為xml文件,則跳s39。
s38:java文件格式化。
s39:xml文件格式化。
(2)獲取java類中的類名、方法名、方法參數(shù)和返回值等信息是我們利用了類反射機制和類裝載機制。通過它實現(xiàn)了讀取java類中的包名、類名、屬性、各個方法的方法名、方法參數(shù)、方法返回值等,從而完成了解析java類及其方法的模塊。
具體算法如下:
s0:傳入Web Service提供端工程路徑,創(chuàng)建類裝載器。
s1:類裝載器把Web Service提供端工程的java類型讀入Java虛擬機中產(chǎn)生一個代表該類型的二進(jìn)制數(shù)據(jù)流。解析這個二進(jìn)制數(shù)據(jù)流為方法區(qū)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。?在堆上創(chuàng)建一個表示該類型的java.lang.Class類的實例。
s2:根據(jù)類反射機制,傳入需要獲取信息的類名,便可以獲取java類中的任何信息。
4 Web Service插件的實現(xiàn)
根據(jù)Web Service插件的設(shè)計,我們實現(xiàn)了基于Eclipse的Web Service插件。如圖2所示,為Web Service提供端插件的界面,通過在界面中輸入Web Service提供端的基本信息和配置Web Service安全信息,便可以生成提供端接口、實現(xiàn)類、綁定文件、服務(wù)配置文件及安全文件等文件。如圖3所示,為Web Service客戶端插件的界面,通過在界面中輸入WSDL文件路徑及配置Web Service客戶端安全信息,客戶端插件便可以根據(jù)WSD文件的內(nèi)容生成相應(yīng)的接口、實現(xiàn)類等文件,根據(jù)配置的安全信息生成客戶端安全文件等。
5 結(jié)束語
Web Service插件界面友好,風(fēng)格統(tǒng)一,而且在Web Service提供端和客戶端都提供了相應(yīng)的插件。它可以方便的使應(yīng)用程序跨平臺和跨網(wǎng)絡(luò)進(jìn)行通信。這樣不僅可以縮短開發(fā)周期,大大方便了用戶的使用,還可以減少代碼的復(fù)雜度,并增強整個應(yīng)用程序的可維護(hù)性。應(yīng)用必須在Eclipse平臺中運行, 這是它的局限性。
參考文獻(xiàn):
[1]Vinoski,S..Web service references[J].IEEE internet computing,2005,9 (2):94-96.
[2]Dwight Deugo.Extending Eclipse[J].Application Development Trends,2003,10(6):63-64.
[3]Mike Mccullough.Developing Eclipse Plugins[J].Linux Journal,2006,(143):90-95.
[4]Eric Armstron. Java Web Service Modeling Ontology[M].Pearson Education,2003.
[5] Dumitru Roman,Uwe Keller,Holger Lausen. Web Service Modeling Ontology[J].Applied Ontology,2005,1(1):77-106.
[6]邵京平,智明,柳先輝.ASP平臺上基于Web Service的插件技術(shù)的實現(xiàn)[J].計算機應(yīng)用研究, 2005,12(5):90-92.
項目編號:長工大科合字第2007129。
(作者單位:吉林長春工業(yè)大學(xué)傳媒學(xué)院)