專利名稱:構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)軟件領(lǐng)域,特別涉及構(gòu)件化軟件系統(tǒng)技術(shù)領(lǐng)域,具體是指一種 構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法。
背景技術(shù):
隨著現(xiàn)代社會科學(xué)技術(shù)的發(fā)展,計算機(jī)系統(tǒng)已經(jīng)成為各行各業(yè)所不可缺少的工 具,而在其中起著核心作用的,則是計算機(jī)軟件系統(tǒng)。隨著軟件系統(tǒng)在各行各業(yè)的日益滲 透,商業(yè)系統(tǒng)的日益龐大,其自身的問題也是越來越嚴(yán)重?,F(xiàn)在的一個企業(yè)應(yīng)用,常常會涉 及企業(yè)的每一個部分,會由幾十人編寫幾十萬到幾百萬行代碼來完成。另一方面,現(xiàn)代企業(yè) 是在一個不斷變化的動態(tài)環(huán)境中生存和發(fā)展的,因此,企業(yè)應(yīng)用就需要不斷地維護(hù)——即 部分地改寫一些現(xiàn)有軟件。由幾十萬上百萬的代碼變化因子,組成的不斷變化的系統(tǒng),其復(fù) 雜度是人類歷史上沒有見過的。軟件的安全性和質(zhì)量可靠性,常常成為現(xiàn)代無所不在、無所 不能的信息化系統(tǒng)的一個嚴(yán)重問題。構(gòu)件技術(shù)整合了傳統(tǒng)的構(gòu)件技術(shù)、模型驅(qū)動技術(shù)和面向服務(wù)技術(shù),是解決現(xiàn)有軟 件系統(tǒng)結(jié)構(gòu)弊端的一種有效手段。所謂構(gòu)件,是指某種自成一體、并有一個(或一組)清晰 接口的軟件。同時,構(gòu)件還應(yīng)具有清晰的運(yùn)行時和上線內(nèi)涵。也就是說,該構(gòu)件具備可供運(yùn) 行時訪問的接口 ;并且,在軟件開發(fā)生命周期的某個時間點(diǎn),該構(gòu)件可獨(dú)立交付和安裝。另 外,一個構(gòu)件還能方便地跟其他構(gòu)件合并或組合,從而提供有用的功能——通常情況下,單 個構(gòu)件只有跟別的構(gòu)件協(xié)同工作才能達(dá)到其功效。在企業(yè)級應(yīng)用開發(fā)領(lǐng)域,隨著應(yīng)用規(guī)模的不斷擴(kuò)大,各個系統(tǒng)之間的集成和交互 變得越來越重要。Web Service由于其特有的平臺無關(guān)、編程語言無關(guān)等特性,成為系統(tǒng)集 成中使用非常廣泛的技術(shù),并且Web Service作為一項工業(yè)標(biāo)準(zhǔn),已經(jīng)得到越來越多廠商的 支持,從數(shù)據(jù)的封裝到數(shù)據(jù)的傳遞都有一系列的標(biāo)準(zhǔn)(ws-*)作為支撐。同時,Web Service 對外僅以WSDL(網(wǎng)絡(luò)服務(wù)描述語言,Web Services Description Language)作為交流的中 介,它是一門基于XML的語言,描述了 Web Service的服務(wù)定義以及服務(wù)的通信,是跨平臺 的。如何方便的調(diào)用外部系統(tǒng)提供的Web Services,在系統(tǒng)的集成階段變得日益重 要。通常調(diào)用外部Web Service的作法為根據(jù)外部提供的URL,取到其Web Services的描述 文件WSDL,然后根據(jù)工具如Apache axis2、Apache cxf等生成調(diào)用Web Service的stub。此 方式會生成針對外部Web Service調(diào)用的靜態(tài)代碼,在靜態(tài)代碼中包含了對數(shù)據(jù)的處理,這 些代碼由固定模板生成,要么文件超大動輒上萬行,要么文件超多,難于維護(hù)和問題定位。 如果外部的WSDL有了稍許的變化,即使只有結(jié)點(diǎn)名稱的變化如由parameter變更為in,那 么原來生成的靜態(tài)stub將不再正確,需要根據(jù)新的WSDL重新生成stub,并再次進(jìn)行編譯打 包。同時,針對每個Web Service調(diào)用,都要生成一系列的程序代碼,大量代碼的堆積在系 統(tǒng)集成時常常會帶來額外的維護(hù)成本,甚至?xí)斐纱罅康睦a,降低了生產(chǎn)效率。
發(fā)明內(nèi)容
本發(fā)明的目的是克服了上述現(xiàn)有技術(shù)中的缺點(diǎn),提供一種能夠通過構(gòu)件對外部 WebService進(jìn)行調(diào)用、開發(fā)期直觀形象、快捷方便、運(yùn)行期效率較高、系統(tǒng)性能穩(wěn)定可靠、適 用范圍較為廣泛的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法。為了實(shí)現(xiàn)上述的目的,本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法 如下該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,所述的構(gòu)件化軟件系統(tǒng)中包 括圖形化構(gòu)件開發(fā)平臺和與該圖形化構(gòu)件開發(fā)平臺相連接的構(gòu)件運(yùn)行平臺,其主要特點(diǎn) 是,所述的方法包括Web Service調(diào)用構(gòu)件開發(fā)處理操作和Web Service調(diào)用構(gòu)件運(yùn)行處 理操作,所述的Web Service調(diào)用構(gòu)件開發(fā)處理操作,包括以下步驟(A1)系統(tǒng)的圖形化構(gòu)件開發(fā)平臺新建構(gòu)件包;(A2)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入外部的WSDL文件;(A3)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入該外部的WSDL文件所依賴的XSD文件;(A4)所述的圖形化構(gòu)件開發(fā)平臺進(jìn)行XSD模式類型與服務(wù)數(shù)據(jù)對象之間的相互 轉(zhuǎn)換;(A5)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的WSDL文件中的 WebService相關(guān)兀素;(A6)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的XSD文件中定義 的類型以及屬性信息;(A7)所述的圖形化構(gòu)件開發(fā)平臺在構(gòu)件編輯器中生成Web Service調(diào)用圖元;(A8)所述的圖形化構(gòu)件開發(fā)平臺對Web Service調(diào)用圖元設(shè)置調(diào)用參數(shù);(A9)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP頭信息;(A10)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP附件信息;所述的Web Service調(diào)用構(gòu)件運(yùn)行處理操作,包括以下步驟(B1)系統(tǒng)將構(gòu)件包下的資源部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn)行環(huán)境中;(B2)所述的構(gòu)件運(yùn)行平臺加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,并將其中的模式定義 形成服務(wù)數(shù)據(jù)對象;(B3)所述的構(gòu)件運(yùn)行平臺加載XSD文件到構(gòu)件運(yùn)行環(huán)境;(B4)所述的構(gòu)件運(yùn)行平臺將所述的服務(wù)數(shù)據(jù)對象序列化為文檔對象;(B5)所述的構(gòu)件運(yùn)行平臺將文檔對象反序列化為服務(wù)數(shù)據(jù)對象;(B6)所述的構(gòu)件運(yùn)行平臺發(fā)送Web Service請求;(B7)所述的構(gòu)件運(yùn)行平臺處理Web Service返回值;(B8)所述的構(gòu)件運(yùn)行平臺解析并返回SOAP頭信息;(B9)所述的構(gòu)件運(yùn)行平臺解析并返回SOAP附件信息。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的構(gòu)件包為包含一定功能邏 輯的物理單元,且該構(gòu)件包作為一個最小的部署單元部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn) 行環(huán)境中,該構(gòu)件包中包含實(shí)現(xiàn)構(gòu)件功能的所有依賴資源。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的依賴資源包括WSDL文件、 XSD文件、Java運(yùn)行需要的類文件。
該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的導(dǎo)入外部的WSDL文件,包 括以下步驟(11)所述的圖形化構(gòu)件開發(fā)平臺根據(jù)外部Web Service所在的URL,把該URL所 指定的WSDL文件下載到本地;(12)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的WSDL文件,如果所下載的WSDL文 件中包含引用的其它WSDL文件,則將該其它WSDL文件一并下載到本地;(13)所述的圖形化構(gòu)件開發(fā)平臺將所下載的WSDL文件默認(rèn)保存到構(gòu)件包資源樹 下的“接口”結(jié)點(diǎn)下。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的WSDL文件中所包含引用 的其它WSDL文件,為以下兩種情形中的一種(1)通過{http://schemas. xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;(2)通過{http://schemas. xmlsoap. org/wsdl/} include 所引用的 WSDL 文件。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的導(dǎo)入外部的WSDL文件所 依賴的XSD文件,包括以下步驟(21)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有WSDL文件,如果WSDL文件中 包含引用的其它XSD文件,則把所引用的XSD文件下載到本地;(22)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有XSD文件,如果XSD文件中包 含引用的其它XSD文件,則把所引用的XSD文件下載到本地;(23)所述的圖形化構(gòu)件開發(fā)平臺將所下載的XSD文件默認(rèn)保存到構(gòu)件包資源樹 下的“XML模式”結(jié)點(diǎn)下。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的WSDL文件中所包含引用 的其它XSD文件,為以下兩種情形中的一種(1)在WSDL文件中的類型定義部分所包含的通過{http://www.w3.org/2001/ XMLSchem} import 所引用的 XSD 文件;(2)在WSDL文件中的類型定義部分所包含的通過{http//www. w3. org/2001/ XMLSchem} include 所引用的 XSD 文件。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的XSD文件中所包含引用的 其它XSD文件,為以下兩種情形中的一種(1)通過{http://www. w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(2)通過{http://www. w3. org/2001/XMLSchem} include 所引用的 XSD 文件。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的圖形化構(gòu)件開發(fā)平臺進(jìn)行 XSD模式類型與服務(wù)數(shù)據(jù)對象之間的相互轉(zhuǎn)換,包括以下步驟(31)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象與XSD文件中定義的 complexType 對應(yīng);(32)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象的屬性與XSD文件中定義 complexType的屬性對應(yīng);(33)所述的圖形化構(gòu)件開發(fā)平臺判斷XSD文件中定義complexType的屬性類型是 否為復(fù)雜類型;(34)如果是,則該復(fù)雜類型對應(yīng)另一服務(wù)數(shù)據(jù)對象,并作為該另一服務(wù)數(shù)據(jù)對象的屬性。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的圖形化構(gòu)件開發(fā)平臺在資 源樹中概覽顯示所導(dǎo)入的WSDL文件中的Web Service相關(guān)元素,包括以下步驟(41)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“類型”結(jié)點(diǎn)下按XML模式的 方式定義的數(shù)據(jù)類型;(42)按服務(wù)數(shù)據(jù)對象的規(guī)則將數(shù)據(jù)類型信息解析為服務(wù)數(shù)據(jù)對象;(43)將解析后的類型信息顯示在WSDL資源樹下的“類型”結(jié)點(diǎn)下;(44)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“端口類型”結(jié)點(diǎn)并分析出其 中包括的操作以及參數(shù)類型;(45)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行參數(shù)類型的解析,在解析參數(shù)個數(shù)時,根據(jù)WSDL 文件中定義的風(fēng)格的不同而采用不同解析方式;(46)解析后的端口類型信息顯示在WSDL資源樹下的“端口類型”結(jié)點(diǎn)下;(47)解析WSDL文件中的“服務(wù)”結(jié)點(diǎn),并解析出其包含的端口子結(jié)點(diǎn);(48)根據(jù)每個端口對應(yīng)的綁定找到相應(yīng)的端口類型,進(jìn)而顯示服務(wù)對應(yīng)的操作以 及參數(shù)信息;(49)將解析后的服務(wù)信息顯示在WSDL資源樹下的“服務(wù)”結(jié)點(diǎn)下。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的按服務(wù)數(shù)據(jù)對象的規(guī)則將 數(shù)據(jù)類型信息解析為服務(wù)數(shù)據(jù)對象,包括以下步驟(421)如果數(shù)據(jù)類型為XSD原生類型,則將該數(shù)據(jù)類型解析為Java基本類型;(422)如果數(shù)據(jù)類型為復(fù)雜類型,則將稿數(shù)據(jù)類型解析為服務(wù)數(shù)據(jù)對象中的 commonj. sdo. DataOb ject 對象。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的圖形化構(gòu)件開發(fā)平臺在資 源樹中概覽顯示所導(dǎo)入的XSD文件中定義的類型以及屬性信息,包括以下步驟(51)所述的圖形化構(gòu)件開發(fā)平臺解析XSD文件中所包含的所有全局元素結(jié)點(diǎn)和 全局復(fù)雜類型結(jié)點(diǎn)信息;(52)將全局元素結(jié)點(diǎn)和全局復(fù)雜類型結(jié)點(diǎn)作為XML模式的子結(jié)點(diǎn)顯示在資源樹 下的“數(shù)據(jù)”結(jié)點(diǎn)下;(53)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行類型的屬性解析,并作為子結(jié)點(diǎn)顯示在相應(yīng)的類 型下。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的構(gòu)件編輯器中生成Web Service調(diào)用圖元,包括以下步驟(61)在資源樹中WSDL結(jié)點(diǎn)的子結(jié)點(diǎn)“服務(wù)”結(jié)點(diǎn)列出服務(wù)下所有可以被調(diào)用的操 作,所述的圖形化構(gòu)件開發(fā)平臺根據(jù)用戶的拖放動作將相應(yīng)的操作拖放到構(gòu)件編輯器中, 并生成Web Service調(diào)用圖元;(62)所述的Web Service調(diào)用圖元顯示出調(diào)用的操作以及Web Service服務(wù)所在 的端點(diǎn)地址;(63)所述的Web Service調(diào)用圖元根據(jù)所選操作的類型信息生成調(diào)用的實(shí)際參 數(shù)信息,其中包括參數(shù)個數(shù)和參數(shù)類型;(64)所述的Web Service調(diào)用圖元根據(jù)需要添加SOAP頭信息和附件信息。
該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的對Web Service調(diào)用圖元 設(shè)置調(diào)用參數(shù),包括以下步驟(71)所述的圖形化構(gòu)件開發(fā)平臺判斷輸入?yún)?shù)和輸出參數(shù)的類型;(72)如果輸入?yún)?shù)和輸出參數(shù)為簡單類型,則直接進(jìn)行賦值;(73)如果輸入?yún)?shù)和輸出參數(shù)為復(fù)雜類型,則通過XPath的方式對在復(fù)雜類型中 定義的各個屬性分別進(jìn)行賦值。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的添加SOAP頭信息,包括以 下步驟(81)將SOAP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(82)在該SOAP頭信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于SOAP頭信息下頭的結(jié)點(diǎn)名 稱;(83)在該SOAP頭信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于S0AP頭信息下對應(yīng)鍵結(jié)點(diǎn) 的值;(84)將該S0AP頭信息存儲的鍵和值按服務(wù)數(shù)據(jù)對象的規(guī)則序列化;(85)將序列化后的文檔對象作為S0AP頭信息添加到頭中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的添加S0AP附件信息,包括 以下步驟(91)將S0AP附件信息按Map結(jié)構(gòu)進(jìn)行存儲;(92)在該S0AP附件信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于S0AP附件信息中的 Contentld ;(93)在該S0AP附件信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于S0AP附件信息中的詳細(xì) 內(nèi)容;(94)遍歷所存儲的附件信息,并作為S0AP附件信息添加到S0AP中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的將構(gòu)件包下的資源部署到 構(gòu)件運(yùn)行環(huán)境中,包括以下步驟(C1)將構(gòu)件包下的所有構(gòu)件資源拷貝到構(gòu)件運(yùn)行環(huán)境所指定的目錄中;(C2)將構(gòu)件包下定義的Java編譯類文件以及頁面資源拷貝到應(yīng)用服務(wù)器指定的 應(yīng)用目錄中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的構(gòu)件資源包括XSD文件和 WSDL文件。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的頁面資源包括jsp文件和 js文件。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的加載WSDL文件到構(gòu)件運(yùn) 行環(huán)境,包括以下步驟(D1)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有WSDL文件;(D2)解析WSDL文件中類型結(jié)點(diǎn)下的模式結(jié)點(diǎn)并加載為服務(wù)數(shù)據(jù)對象的類型;(D3)加載WSDL文件中的服務(wù)、綁定、端口類型信息,并封裝為運(yùn)行期模型;(D4)判定WSDL文件對應(yīng)的風(fēng)格類型,并加載到WSDL運(yùn)行期模型中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的風(fēng)格類型包括以下幾種
(1)document/literal ;(2)document/literal/wrapper ;(3)rpc/literal、rpc/encoded。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的加載XSD文件到構(gòu)件運(yùn)行 環(huán)境,包括以下步驟(E1)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有XSD文件;(E2)解析XSD文件模式結(jié)點(diǎn)下的類型信息,并加載成服務(wù)數(shù)據(jù)對象的類型。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的XSD文件模式結(jié)點(diǎn)下的類 型信息包括元素類型和復(fù)雜類型。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的將服務(wù)數(shù)據(jù)對象序列化為 文檔對象,包括以下步驟(F1)服務(wù)數(shù)據(jù)對象根據(jù)對應(yīng)的模式類型信息,按模式的定義序列化為文檔對象, 該文檔對象包括結(jié)點(diǎn)名稱和結(jié)點(diǎn)所在名稱空間;(F2)服務(wù)數(shù)據(jù)對象的屬性類型為服務(wù)數(shù)據(jù)對象,并按模式的定義對其屬性序列化 為文檔對象。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的將文檔對象反序列化為服 務(wù)數(shù)據(jù)對象,包括以下步驟(G1)文檔對象根結(jié)點(diǎn)取得對應(yīng)的名稱空間信息;(G2)由名稱空間檢索對應(yīng)的服務(wù)數(shù)據(jù)對象;(G3)遍歷文檔對象的子結(jié)點(diǎn),找到服務(wù)數(shù)據(jù)對象對應(yīng)的同名屬性;(G4)如果該屬性為簡單類型,則直接進(jìn)行賦值;(G5)如果該屬性為復(fù)雜類型,則遞歸進(jìn)行文檔對象的反序列化。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的發(fā)送Web Service請求, 包括以下步驟(HI)構(gòu)造 SOAP 信封;(H2)根據(jù)WSDL文件定義的風(fēng)格類型,把作為輸入?yún)?shù)的服務(wù)數(shù)據(jù)對象序列化成 文檔對象;(H3)序列化后的文檔對象作為SOAP體的內(nèi)容添加到S0AP信封中;(H4)如果Web Service調(diào)用圖元設(shè)置了頭信息,按輸入?yún)?shù)的序列化方式,把設(shè) 定的頭信息序列化成文檔對象;(H5)序列化后的頭信息作為S0AP頭的內(nèi)容添加到S0AP信封中;(H6)如果Web Service調(diào)用圖元設(shè)置了附件信息,把設(shè)定的附件信息轉(zhuǎn)換成 javax. activation. DataHandler對象,并作為SOAP附件信息添加到S0AP信封中;(H7)根據(jù) Web Service 所在的 URL 建立 Http 連接;(H8)設(shè)置Http連接的請求屬性,設(shè)置內(nèi)容類型、內(nèi)容長度、S0AP動作為正確的請 求數(shù)據(jù)信息;(H9)把S0AP信封發(fā)送到連接的輸出流中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的處理Web Service返回 值,包括以下步驟
(II)從Http連接的輸出流中取得返回的SOAP信封;(12)從SOAP信封中取得SOAP體的內(nèi)容作為輸出參數(shù);(13)把輸出參數(shù)按服務(wù)數(shù)據(jù)對象定義的反序列化規(guī)則進(jìn)行反序列化成數(shù)據(jù)對象, 并把反序列化后的值保存到調(diào)用的上下文中。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的解析并返回SOAP頭信息, 包括以下步驟(J1)從SOAP信封中取得S0AP頭信息;(J2) S0AP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(J3)遍歷S0AP頭信息下的結(jié)點(diǎn),結(jié)點(diǎn)名稱作為Map結(jié)構(gòu)的鍵;(J4)遍歷鍵結(jié)點(diǎn)的子結(jié)點(diǎn),把其文檔對象反序列化為服務(wù)數(shù)據(jù)對象,作為Map結(jié) 構(gòu)的值;(J5)S0AP頭信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的解析并返回S0AP附件信 息,包括以下步驟(K1)從S0AP信封中取得S0AP附件信息;(K2)將S0AP附件信息按Map結(jié)構(gòu)進(jìn)行存儲;(K3)將Map結(jié)構(gòu)的鍵對應(yīng)于附件的Content Id ;(K4)將Map結(jié)構(gòu)的值對應(yīng)于附件的詳細(xì)內(nèi)容;(K5)將S0AP附件信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。采用了該發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,由于其中提供 了動態(tài)調(diào)用外部Web Service的方法,針對不同Web Service調(diào)用,不再需要生成其WSDL 對應(yīng)的stub,減少了調(diào)用的操作步驟和對不同外部工具的依賴,真正做到了靈活的調(diào)用,同 時傳遞的數(shù)據(jù)采用標(biāo)準(zhǔn)的服務(wù)數(shù)據(jù)對象(SD0)進(jìn)行封裝,為異構(gòu)環(huán)境的數(shù)據(jù)傳遞奠定了良 好的基礎(chǔ),從而在系統(tǒng)的集成工作中不再需要維護(hù)Web Service工具生成的大量調(diào)用Web Service代碼,而且對于外部Web Service變化能夠快速適應(yīng),從而使Web Service的開發(fā)、 調(diào)用過程更加直觀、簡單和高效,提高了調(diào)用的效率,快捷方便,系統(tǒng)運(yùn)行效率較高,性能穩(wěn) 定可靠,降低了開發(fā)維護(hù)的成本;同時增強(qiáng)了系統(tǒng)可移植性和可擴(kuò)展性;不僅如此,該方法 還能夠快速回應(yīng)業(yè)務(wù)需求的變化和技術(shù)變化,能夠支撐建立高度模塊化而且又高度整合的 軟件系統(tǒng),適用范圍較為廣泛,為計算機(jī)構(gòu)件化軟件技術(shù)的進(jìn)一步發(fā)展奠定了堅實(shí)的基礎(chǔ)。
圖1為本發(fā)明的Web Service調(diào)用系統(tǒng)架構(gòu)示意圖。圖2為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的Web Service調(diào)用開發(fā)、加載、數(shù)據(jù)處理流程圖。圖3為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中Web Service 的請求發(fā)送和返回值的處理流程。圖4為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中的WSDL、XSD 中模式(schema)解析類圖。圖5為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中模式(schema)
14與SD0類型轉(zhuǎn)換類圖。圖6為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中序列化、反序 列化的類圖。圖7為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中Web Service 調(diào)用圖元的示意圖。圖8為本發(fā)明的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法中SOAP消息結(jié) 構(gòu)示意圖。
具體實(shí)施例方式為了能夠更清楚地理解本發(fā)明的技術(shù)內(nèi)容,特舉以下實(shí)施例詳細(xì)說明。在調(diào)用Web Service服務(wù)時,客戶端與服務(wù)器端交互的橋梁是WSDL (Web ServiceDef inition Language, Web服務(wù)定義語言),其中包括了以下幾個主要元素 types——數(shù)據(jù)類型定義的容器,使用XML Schema來描述數(shù)據(jù)類型的結(jié)構(gòu)信 肩、o portType——描述服務(wù)操作的抽象集合,與Java接口類似。
binding——數(shù)據(jù)傳輸過程中指定的具體傳輸協(xié)議以及所定義操作的數(shù)據(jù)格式 規(guī)范。
service——對外提供的服務(wù)。
operation——對服務(wù)中所支持的操作的抽象描述,描述了訪問入口的請求/ 響應(yīng)消息以及異常的聲明。在調(diào)用Web Service過程中,客戶端與服務(wù)器端交互的信息為S0AP消息,以XML 格式進(jìn)行定義,其結(jié)構(gòu)請參閱圖8如示,其中包括了以下幾個主要元素 SOAP Body——封裝了要傳遞的數(shù)據(jù)。
SOAP Header——作為傳遞消息的擴(kuò)展,可以自由添加。請參閱圖1至圖9所示,該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,所述 的構(gòu)件化軟件系統(tǒng)中包括圖形化構(gòu)件開發(fā)平臺和與該圖形化構(gòu)件開發(fā)平臺相連接的構(gòu)件 運(yùn)行平臺,其中,所述的方法包括Web Service調(diào)用構(gòu)件開發(fā)處理操作和Web Service調(diào)用 構(gòu)件運(yùn)行處理操作,所述的Web Service調(diào)用構(gòu)件開發(fā)處理操作,包括以下步驟(A1)系統(tǒng)的圖形化構(gòu)件開發(fā)平臺新建構(gòu)件包;該構(gòu)件包為包含一定功能邏輯的 物理單元,且該構(gòu)件包作為一個最小的部署單元部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn)行環(huán) 境中,該構(gòu)件包中包含實(shí)現(xiàn)構(gòu)件功能的所有依賴資源;該依賴資源包括WSDL文件、XSD文 件、Java運(yùn)行需要的類文件;(A2)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入外部的WSDL文件,包括以下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺根據(jù)外部Web Service所在的URL,把該URL所指定的WSDL文件下載到本地;(b)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的WSDL文件,如果所下載的WSDL文件 中包含引用的其它WSDL文件,則將該其它WSDL文件一并下載到本地;該WSDL文件中所包 含引用的其它WSDL文件,為以下兩種情形中的一種⑴通過{http://schemas. xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;
(ii) it{http://schemas. xmlsoap. org/wsdl/} include M弓Iffi白勺 WSDL f 牛;(c)所述的圖形化構(gòu)件開發(fā)平臺將所下載的WSDL文件默認(rèn)保存到構(gòu)件包資源樹 下的“接口”結(jié)點(diǎn)下;(A3)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入該外部的WSDL文件所依賴的XSD文件,包括 以下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有WSDL文件,如果WSDL文件中包 含引用的其它XSD文件,則把所引用的XSD文件下載到本地;該WSDL文件中所包含引用的 其它XSD文件,為以下兩種情形中的一種⑴在WSDL文件中的類型定義部分所包含的通過{http://www.w3.org/2001/ XMLSchem} import 所引用的 XSD 文件;(ii)在WSDL文件中的類型定義部分所包含的通過{http://www.w3.org/2001/ XMLSchem} include 所引用的 XSD 文件;(b)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有XSD文件,如果XSD文件中包含 引用的其它XSD文件,則把所引用的XSD文件下載到本地;該XSD文件中所包含引用的其它 XSD文件,為以下兩種情形中的一種(i)通過{http://www. w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(ii)通過{http://www. w3. org/2001/XMLSchem} include 所引用的 XSD 文件;(c)所述的圖形化構(gòu)件開發(fā)平臺將所下載的XSD文件默認(rèn)保存到構(gòu)件包資源樹下 的“XML模式”結(jié)點(diǎn)下;(A4)所述的圖形化構(gòu)件開發(fā)平臺進(jìn)行XSD模式類型與服務(wù)數(shù)據(jù)對象之間的相互 轉(zhuǎn)換,包括以下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象與XSD文件中定義的 complexType 對應(yīng);(b)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象的屬性與XSD文件中定義 complexType的屬性對應(yīng);(c)所述的圖形化構(gòu)件開發(fā)平臺判斷XSD文件中定義complexType的屬性類型是 否為復(fù)雜類型;(d)如果是,則該復(fù)雜類型對應(yīng)另一服務(wù)數(shù)據(jù)對象,并作為該另一服務(wù)數(shù)據(jù)對象的 屬性;(A5)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的WSDL文件中的 WebService相關(guān)元素,包括以下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“類型”結(jié)點(diǎn)下按XML模式的 方式定義的數(shù)據(jù)類型;(b)按服務(wù)數(shù)據(jù)對象的規(guī)則將數(shù)據(jù)類型信息解析為服務(wù)數(shù)據(jù)對象,包括以下步 驟(i)如果數(shù)據(jù)類型為XSD原生類型,則將該數(shù)據(jù)類型解析為Java基本類型;(ii)如果數(shù)據(jù)類型為復(fù)雜類型,則將稿數(shù)據(jù)類型解析為服務(wù)數(shù)據(jù)對象中的 commonj. sdo. DataOb ject 對象;(c)將解析后的類型信息顯示在WSDL資源樹下的“類型”結(jié)點(diǎn)下;
16
(d)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“端口類型”結(jié)點(diǎn)并分析出其 中包括的操作以及參數(shù)類型;(e)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行參數(shù)類型的解析,在解析參數(shù)個數(shù)時,根據(jù)WSDL 文件中定義的風(fēng)格的不同而采用不同解析方式;(f)解析后的端口類型信息顯示在WSDL資源樹下的“端口類型”結(jié)點(diǎn)下;(g)解析WSDL文件中的“服務(wù)”結(jié)點(diǎn),并解析出其包含的端口子結(jié)點(diǎn);(h)根據(jù)每個端口對應(yīng)的綁定找到相應(yīng)的端口類型,進(jìn)而顯示服務(wù)對應(yīng)的操作以 及參數(shù)信息;(j)將解析后的服務(wù)信息顯示在WSDL資源樹下的“服務(wù)”結(jié)點(diǎn)下;(A6)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的XSD文件中定義 的類型以及屬性信息,包括以下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺解析XSD文件中所包含的所有全局元素結(jié)點(diǎn)和全 局復(fù)雜類型結(jié)點(diǎn)信息;(b)將全局元素結(jié)點(diǎn)和全局復(fù)雜類型結(jié)點(diǎn)作為XML模式的子結(jié)點(diǎn)顯示在資源樹下 的“數(shù)據(jù)”結(jié)點(diǎn)下;(c)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行類型的屬性解析,并作為子結(jié)點(diǎn)顯示在相應(yīng)的類 型下;(A7)所述的圖形化構(gòu)件開發(fā)平臺在構(gòu)件編輯器中生成Web Service調(diào)用圖元,包 括以下步驟(61)在資源樹中WSDL結(jié)點(diǎn)的子結(jié)點(diǎn)“服務(wù)”結(jié)點(diǎn)列出服務(wù)下所有可以被調(diào)用的操 作,所述的圖形化構(gòu)件開發(fā)平臺根據(jù)用戶的拖放動作將相應(yīng)的操作拖放到構(gòu)件編輯器中, 并生成Web Service調(diào)用圖元;(62)所述的Web Service調(diào)用圖元顯示出調(diào)用的操作以及Web Service服務(wù)所在 的端點(diǎn)地址;(63)所述的Web Service調(diào)用圖元根據(jù)所選操作的類型信息生成調(diào)用的實(shí)際參 數(shù)信息,其中包括參數(shù)個數(shù)和參數(shù)類型;(64)所述的Web Service調(diào)用圖元根據(jù)需要添加SOAP頭信息和附件信息;(A8)所述的圖形化構(gòu)件開發(fā)平臺對Web Service調(diào)用圖元設(shè)置調(diào)用參數(shù),包括以 下步驟(a)所述的圖形化構(gòu)件開發(fā)平臺判斷輸入?yún)?shù)和輸出參數(shù)的類型;(b)如果輸入?yún)?shù)和輸出參數(shù)為簡單類型,則直接進(jìn)行賦值;(c)如果輸入?yún)?shù)和輸出參數(shù)為復(fù)雜類型,則通過XPath的方式對在復(fù)雜類型中 定義的各個屬性分別進(jìn)行賦值;(A9)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP頭信息,包括以下步驟(a)將SOAP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(b)在該SOAP頭信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于SOAP頭信息下頭的結(jié)點(diǎn)名 稱;(c)在該S0AP頭信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于S0AP頭信息下對應(yīng)鍵結(jié)點(diǎn)的 值;
(d)將該SOAP頭信息存儲的鍵和值按服務(wù)數(shù)據(jù)對象的規(guī)則序列化;(e)將序列化后的文檔對象作為SOAP頭信息添加到頭中;(A10)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP附件信息,包括以下步驟(a)將SOAP附件信息按Map結(jié)構(gòu)進(jìn)行存儲;(b)在該SOAP附件信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于S0AP附件信息中的 Contentld ;(c)在該S0AP附件信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于S0AP附件信息中的詳細(xì)內(nèi) 容;(d)遍歷所存儲的附件信息,并作為S0AP附件信息添加到S0AP中;所述的Web Service調(diào)用構(gòu)件運(yùn)行處理操作,包括以下步驟(B1)系統(tǒng)將構(gòu)件包下的資源部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn)行環(huán)境中,包括 以下步驟(a)將構(gòu)件包下的所有構(gòu)件資源拷貝到構(gòu)件運(yùn)行環(huán)境所指定的目錄中;該構(gòu)件資 源包括XSD文件和WSDL文件。(b)將構(gòu)件包下定義的Java編譯類文件以及頁面資源拷貝到應(yīng)用服務(wù)器指定的 應(yīng)用目錄中;該頁面資源包括jsp文件和js文件;(B2)所述的構(gòu)件運(yùn)行平臺加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,并將其中的模式定義 形成服務(wù)數(shù)據(jù)對象;該加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,包括以下步驟(a)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有WSDL文件;(b)解析WSDL文件中類型結(jié)點(diǎn)下的模式結(jié)點(diǎn)并加載為服務(wù)數(shù)據(jù)對象的類型;(c)加載WSDL文件中的服務(wù)、綁定、端口類型信息,并封裝為運(yùn)行期模型;(d)判定WSDL文件對應(yīng)的風(fēng)格類型,并加載到WSDL運(yùn)行期模型中;該風(fēng)格類型包 括以下幾種(i)document/literal ;(ii) document/literal/wrapper ;(iii)rpc/literal、rpc/encoded ;(B3)所述的構(gòu)件運(yùn)行平臺加載XSD文件到構(gòu)件運(yùn)行環(huán)境,包括以下步驟(a)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有XSD文件;(b)解析XSD文件模式結(jié)點(diǎn)下的類型信息,并加載成服務(wù)數(shù)據(jù)對象的類型;該XSD 文件模式結(jié)點(diǎn)下的類型信息包括元素類型和復(fù)雜類型;(B4)所述的構(gòu)件運(yùn)行平臺將所述的服務(wù)數(shù)據(jù)對象序列化為文檔對象,包括以下步 驟(a)服務(wù)數(shù)據(jù)對象根據(jù)對應(yīng)的模式類型信息,按模式的定義序列化為文檔對象,該 文檔對象包括結(jié)點(diǎn)名稱和結(jié)點(diǎn)所在名稱空間;(b)服務(wù)數(shù)據(jù)對象的屬性類型為服務(wù)數(shù)據(jù)對象,并按模式的定義對其屬性序列化 為文檔對象;(B5)所述的構(gòu)件運(yùn)行平臺將文檔對象反序列化為服務(wù)數(shù)據(jù)對象,包括以下步驟(a)文檔對象根結(jié)點(diǎn)取得對應(yīng)的名稱空間信息;(b)由名稱空間檢索對應(yīng)的服務(wù)數(shù)據(jù)對象;
18
(c)遍歷文檔對象的子結(jié)點(diǎn),找到服務(wù)數(shù)據(jù)對象對應(yīng)的同名屬性;(d)如果該屬性為簡單類型,則直接進(jìn)行賦值;(e)如果該屬性為復(fù)雜類型,則遞歸進(jìn)行文檔對象的反序列化;(B6)所述的構(gòu)件運(yùn)行平臺發(fā)送Web Service請求,包括以下步驟(a)構(gòu)造 SOAP 信封;(b)根據(jù)WSDL文件定義的風(fēng)格類型,把作為輸入?yún)?shù)的服務(wù)數(shù)據(jù)對象序列化成文 檔對象;(c)序列化后的文檔對象作為SOAP體的內(nèi)容添加到SOAP信封中;(d)如果Web Service調(diào)用圖元設(shè)置了頭信息,按輸入?yún)?shù)的序列化方式,把設(shè)定 的頭信息序列化成文檔對象;(e)序列化后的頭信息作為SOAP頭的內(nèi)容添加到SOAP信封中;(f)如果Web Service調(diào)用圖元設(shè)置了附件信息,把設(shè)定的附件信息轉(zhuǎn)換成 javax. activation. DataHandler對象,并作為SOAP附件信息添加到S0AP信封中;(g)根據(jù)Web Service所在的URL建立Http連接;(h)設(shè)置Http連接的請求屬性,設(shè)置內(nèi)容類型、內(nèi)容長度、SOAP動作為正確的請求 數(shù)據(jù)信息;(j)把S0AP信封發(fā)送到連接的輸出流中;(B7)所述的構(gòu)件運(yùn)行平臺處理Web Service返回值,包括以下步驟(a)從Http連接的輸出流中取得返回的S0AP信封;(b)從S0AP信封中取得S0AP體的內(nèi)容作為輸出參數(shù);(c)把輸出參數(shù)按服務(wù)數(shù)據(jù)對象定義的反序列化規(guī)則進(jìn)行反序列化成數(shù)據(jù)對象, 并把反序列化后的值保存到調(diào)用的上下文中;(B8)所述的構(gòu)件運(yùn)行平臺解析并返回S0AP頭信息,包括以下步驟(a)從S0AP信封中取得S0AP頭信息;(b) SOAP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(c)遍歷S0AP頭信息下的結(jié)點(diǎn),結(jié)點(diǎn)名稱作為Map結(jié)構(gòu)的鍵;(d)遍歷鍵結(jié)點(diǎn)的子結(jié)點(diǎn),把其文檔對象反序列化為服務(wù)數(shù)據(jù)對象,作為Map結(jié)構(gòu) 的值;(e)S0AP頭信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問;(B9)所述的構(gòu)件運(yùn)行平臺解析并返回S0AP附件信息,包括以下步驟(a)從S0AP信封中取得S0AP附件信息;(b)將S0AP附件信息按Map結(jié)構(gòu)進(jìn)行存儲;(c)將Map結(jié)構(gòu)的鍵對應(yīng)于附件的Content Id ;(d)將Map結(jié)構(gòu)的值對應(yīng)于附件的詳細(xì)內(nèi)容;(e)將S0AP附件信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。在實(shí)際使用當(dāng)中,該構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)調(diào)用Web Service的方法,包括圖形化 構(gòu)件開發(fā)平臺和構(gòu)件的運(yùn)行平臺,所述的方法包括Web Service調(diào)用構(gòu)件開發(fā)操作和Web Service調(diào)用構(gòu)件運(yùn)行操作,如圖2所示。在Web Service開發(fā)和調(diào)用過程中,數(shù)據(jù)的定義 和封裝采用統(tǒng)一的服務(wù)數(shù)據(jù)對象(SD0,Service Data Object)模型,服務(wù)數(shù)據(jù)對象(SD0)統(tǒng)一了不同數(shù)據(jù)源類型的數(shù)據(jù)編程,提供了對通用應(yīng)用程序模式的健壯支持,并使應(yīng)用程 序和工具更容易查詢、讀取,其操作按XPath規(guī)則進(jìn)行,服務(wù)數(shù)據(jù)對象(SD0)與Schema轉(zhuǎn)換 的類圖如圖5所示。所述的Web Service調(diào)用構(gòu)件開發(fā)操作包括以下步驟(1)新建構(gòu)件包,本構(gòu)件包定義了一個業(yè)務(wù)模塊單元,提供相應(yīng)的服務(wù),在物理上 與文件目錄相對應(yīng);(2)導(dǎo)入外部的WSDL文件,包括以下步驟(a)根據(jù)外部Web Service所在的URL,把其URL指定的WSDL下載到本地;(b)分析下載的WSDL文件,如果下載的WSDL文件中包含通過{http //schemas. xmlsoap. org/wsdl/} import 或者{http://schemas. xmlsoap. org/wsdl/} include 弓| 用的 其它WSDL文件,則一并下載到本地;(c)下載的WSDL文件默認(rèn)保存到構(gòu)件包資源樹下的“接口”結(jié)點(diǎn)下。(3)導(dǎo)入外部的WSDL文件所依賴的XSD文件,包括以下步驟(a)分析下載的所有WSDL文件,如果WSDL文件中的類型定義〈types〉部分包含通 過{http //www. w3. org/2001/XMLSchem} import 或者{http: //www. w3. org/2001/XMLSchem} include 引用的其它 XSD 文件,則把引用的 XSD文件下載到本地;(b)分析下載的所有XSD文件,如果包含通過{http //www. w3. org/2001/XMLSchem} import 或者{http://www. w3. org/2001/XMLSchem} include 引用的其它 XSD 文件,則同時把引 用的XSD文件下載到本地;(c)下載的XSD文件默認(rèn)保存到構(gòu)件包資源樹下的“XML Schema"結(jié)點(diǎn)下。(4)XSD Schema Type與服務(wù)數(shù)據(jù)對象(SD0)的相互轉(zhuǎn)換,包括以下步驟(a)服務(wù)數(shù)據(jù)對象與XSD中定義的complexType對應(yīng);(b)服務(wù)數(shù)據(jù)對象的屬性與XSD中定義complexType的屬性對應(yīng);(c)XSD中定義complexType的屬性類型如為complexType,則對應(yīng)另一服務(wù)數(shù)據(jù) 對象,并作為服務(wù)數(shù)據(jù)對象的屬性。(5)資源樹概覽顯示導(dǎo)入的WSDL文件,包括以下步驟(a)解析WSDL文件中的types結(jié)點(diǎn)下按照XML Schema的方式定義的數(shù)據(jù)類型;(b)數(shù)據(jù)類型信息按服務(wù)數(shù)據(jù)對象(SD0)的規(guī)則,解析為服務(wù)數(shù)據(jù)對象(SD0),如 果類型為XSD原生類型,則解析為Java基本類型,如果類型為復(fù)雜類型(complexType),則 解析為服務(wù)數(shù)據(jù)對象(SD0)中的commonj. sdo. DataObject對象;(c)解析后的類型信息顯示在WSDL資源樹下的“類型”結(jié)點(diǎn)下;(d)解析WSDL文件中的portType結(jié)點(diǎn),并分析出其中包括的操作以及參數(shù)類型;(e)參數(shù)類型的解析以服務(wù)數(shù)據(jù)對象(SD0)的規(guī)則進(jìn)行,在解析參數(shù)個數(shù)時,根據(jù) WSDL文件中定義的style (document、rpc)不同而采用不同解析方式;(f)解析后的portType信息顯示在WSDL資源樹下的“端口類型”結(jié)點(diǎn)下;(g)解析WSDL文件中的service結(jié)點(diǎn),并解析出其包含的port子結(jié)點(diǎn),根據(jù)每個port對應(yīng)的binding找到相應(yīng)的portType,進(jìn)而顯示service對應(yīng)的操作以及參數(shù)信息;(h)解析后的service信息顯示在WSDL資源樹下的“服務(wù)”結(jié)點(diǎn)下。(6)資源樹概覽顯示導(dǎo)入的XSD文件,包括以下步驟(a)解析XSD文件中包含的所有全局element結(jié)點(diǎn)和全局complexType結(jié)點(diǎn)信息;(b)全局element結(jié)點(diǎn)和全局complexType結(jié)點(diǎn)作為XML Schema的子結(jié)點(diǎn)顯示在 資源樹下的“數(shù)據(jù)”結(jié)點(diǎn)下;(c)解析類型的屬性,并作為子結(jié)點(diǎn)顯示在相應(yīng)的類型下,類型的解析以服務(wù)數(shù)據(jù) 對象(SD0)的規(guī)則進(jìn)行。(7)生成構(gòu)件化Web Service調(diào)用圖元,包括以下步驟(a)資源樹中WSDL結(jié)點(diǎn)的子結(jié)點(diǎn)“服務(wù)”結(jié)點(diǎn)列出了服務(wù)下所有可以被調(diào)用的操 作,直接把操作拖放到構(gòu)件編輯器中,生成Web Service調(diào)用圖元;(b)生成的Web Service調(diào)用圖元中顯示出調(diào)用的操作以及Web Service服務(wù)所 在的端點(diǎn)地址(Endpoint);(c)生成的Web Service調(diào)用圖元中,根據(jù)所選操作的類型信息,生成調(diào)用的實(shí)際 參數(shù)信息,包括參數(shù)個數(shù)和參數(shù)類型,其中類型的信息同資源樹中類型的顯示信息一致;(d)生成的Web Service調(diào)用圖元根據(jù)需要可以添加SOAP Header和附件。(8)Web Service調(diào)用圖元設(shè)置調(diào)用參數(shù),包括以下步驟(a)輸入、輸出參數(shù)如果為簡單類型,直接進(jìn)行賦值;(b)輸入、輸出參數(shù)如果為復(fù)雜類型(SD0類型),通過XPath的方式對其定義的各 個屬性分別進(jìn)行賦值。(9)添加SOAP Header信息,包括以下步驟
(a) SOAP Header信息按Map結(jié)構(gòu)進(jìn)行存儲;(b) Header 存儲時,鍵(key)對應(yīng) SOAP Header 下 Header 的結(jié)點(diǎn)名稱;(c) Header存儲時,值(value)對應(yīng)SOAP Header下對應(yīng)鍵(key)結(jié)點(diǎn)的值;(d) Header存儲的鍵(key)和值(value)按服務(wù)數(shù)據(jù)對象(SD0)的規(guī)則序列化;(e)序列化后的文檔對象(document)作為SOAP Header添加到Header中。(10)添加SOAPAttachment信息,包括以下步驟(a) SOAP Attachment信息按Map結(jié)構(gòu)進(jìn)行存儲;(b) Attachment 存儲時,鍵(key)對應(yīng)附件的 Content Id ;(c)Attachment存儲時,值(value)對應(yīng)附件的詳細(xì)內(nèi)容;(d)遍歷存儲的Attachment信息,作為附件信息添加到S0AP中。經(jīng)過以上步驟,Web Service調(diào)用的準(zhǔn)備階段已經(jīng)完成,開發(fā)完成的Web Service 調(diào)用圖元示意圖如圖7所示。從中可以看出,用戶在調(diào)用Web Service調(diào)用時,通過兩個簡 單的步驟導(dǎo)入和設(shè)置調(diào)用參數(shù)就完成了。所述的Web Service調(diào)用構(gòu)件運(yùn)行操作包括以下步驟(1)部署構(gòu)件包下資源到構(gòu)件運(yùn)行環(huán)境,包括以下步驟(a)把構(gòu)件包下的所有構(gòu)件資源,如XSD文件、WSDL文件,拷貝到構(gòu)件運(yùn)行環(huán)境指 定的目錄中;(b)構(gòu)件包下定義的Java編譯class文件以及頁面資源(jsp文件、js文件),放
21到應(yīng)用服務(wù)器指定的應(yīng)用(webapp)目錄中。(2)加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,解析的類圖如圖3所示。所述的操作包括以 下步驟(a)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有WSDL文件;(b)解析WSDL文件中types結(jié)點(diǎn)下的schema結(jié)點(diǎn)加載成服務(wù)數(shù)據(jù)對象(SD0)的 類型;(c)加載WSDL文件中的service、binding、portType信息,封裝為運(yùn)行期模型,系 統(tǒng)中對運(yùn)行期模型進(jìn)行緩存,以提高性能;(d)加載WSDL文件中的portType定義的操作信息,并對每一操作參數(shù)信息進(jìn)行緩 存,以提高調(diào)用性能;(e)判定 WSDL 文件對應(yīng)的 style 類型(document/literal,document/literal/ wrapper, rpc/literal, rpc/encoded),并力口載至lj WSDL 運(yùn)行期模型中。(3)加載XSD文件加載到構(gòu)件運(yùn)行環(huán)境,包括以下步驟(a)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有XSD文件;(b)解析XSD文件schema結(jié)點(diǎn)下的類型(elemenlcomplexType)信息,并加載成 服務(wù)數(shù)據(jù)對象(SD0)的類型;(c)對生成的服務(wù)數(shù)據(jù)對象(SD0)進(jìn)行緩存,以提高類型的查找性能。(4)服務(wù)數(shù)據(jù)對象(SD0)序列化為文檔對象(document),包括以下步驟(a)服務(wù)數(shù)據(jù)對象(SD0)根據(jù)對應(yīng)的SchemaType信息,按Schema的定義序列化為 文檔對象(document),包括結(jié)點(diǎn)名稱和結(jié)點(diǎn)所在名稱空間;(b)服務(wù)數(shù)據(jù)對象的屬性類型為服務(wù)數(shù)據(jù)對象(SD0),按Schema的定義對其屬性 序列化為文檔對象(document)。(5)文檔對象(document)反序列化為服務(wù)數(shù)據(jù)對象(SD0),包括以下步驟(a)文檔對象根結(jié)點(diǎn)取得對應(yīng)的名稱空間信息;(b)由名稱空間檢索對應(yīng)的服務(wù)數(shù)據(jù)對象(SD0);(c)遍歷文檔對象的子結(jié)點(diǎn),找到服務(wù)數(shù)據(jù)對象(SD0)對應(yīng)的同名屬性;(d)如果為簡單類型,直接進(jìn)行賦值;(e)如果為復(fù)雜類型(SD0類型),則遞歸進(jìn)行文檔對象(document)的反序列化。(6)發(fā)送Web Service請求,流程圖如圖2所示。所述的操作包括以下步驟(a)構(gòu)造 S0AP 信封;(b)根據(jù)WSDL文件定義的style類型,把作為輸入?yún)?shù)的服務(wù)數(shù)據(jù)對象(SD0)序 列化成文檔對象(document),序列化規(guī)則如下(I)輸入?yún)?shù)的類型為簡單類型,則按照輸入?yún)?shù)對應(yīng)的Schema中定義的類型進(jìn) 行序列化,包括需要生成的結(jié)點(diǎn)名稱以及所在的名稱空間;(II)輸入?yún)?shù)的類型為服務(wù)數(shù)據(jù)對象(SD0)的類型,則按照SD0的序列化進(jìn)行, SD0數(shù)據(jù)對象在解析schema時已經(jīng)與complexType進(jìn)行了映射并對其進(jìn)行了緩存,SD0數(shù) 據(jù)對象在序列化時,完全按照schema定義以及WSDL定義的相應(yīng)style類型生成相應(yīng)的結(jié) 點(diǎn)名稱、屬性以及所屬的名稱空間。(c)序列化后的文檔對象作為SOAP Body的內(nèi)容添加到S0AP信封中;
(d)如果Web Service調(diào)用圖元設(shè)置了系按Map結(jié)構(gòu)進(jìn)行存儲的Header信息,以 輸入?yún)?shù)的序列化方式,把設(shè)定的Header信息序列化成文檔對象(document);(e)序列化后的Header信息作為SOAP Header的內(nèi)容添加到SOAP信封中;(f)如果Web Service調(diào)用圖元設(shè)置了按Map結(jié)構(gòu)進(jìn)行存儲的附件信息,把設(shè)定 的附件信息轉(zhuǎn)換成javax. activation. DataHandler對象,并作為SOAP Attachment添力口到 SOAP信封中;(g)根據(jù) Web Service 所在的 URL,建立 Http 連接;(h)設(shè)置 Http 連接的請求屬性,設(shè)置 Content-type、Content-length、SOAPAction 為正確的請求數(shù)據(jù)信息;(j)把S0AP信封發(fā)送到連接的輸出流中。(7)處理Web Service返回值,包括以下步驟(a)從Http連接的輸出流中取得返回的S0AP信封;(b)從S0AP信封中取得SOAP Body的內(nèi)容作為輸出參數(shù);(c)把輸出參數(shù)按服務(wù)數(shù)據(jù)對象(SD0)的定義反序列化規(guī)則進(jìn)行反序列化成 DataObject對象,并把反序列化后的值保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問;(8)解析返回SOAP Header信息,包括以下步驟(a)從S0AP信封中取得SOAP Header信息;(b) SOAP Header 按 Map 結(jié)構(gòu)進(jìn)行存儲;(c)遍歷SOAP Header下的結(jié)點(diǎn),結(jié)點(diǎn)名稱作為Map結(jié)構(gòu)的鍵(key);(d)遍歷鍵(key)結(jié)點(diǎn)的子結(jié)點(diǎn),把其文檔對象反序列化為服務(wù)數(shù)據(jù)對象(SD0), 作為Map結(jié)構(gòu)的值(value);(e)S0AP Header信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。(9)解析返回SOAPAttachment信息,包括以下步驟(a)從 S0AP 信封中取得 SOAPAttachment 信息;(b) SOAP Attachment 按 Map 結(jié)構(gòu)進(jìn)行存儲;(c)Map結(jié)構(gòu)的鍵(key)對應(yīng)附件的Content Id ;(d)Map結(jié)構(gòu)的值(value)對應(yīng)附件的詳細(xì)內(nèi)容;(e) SOAP Attachment信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。采用了上述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,由于其中提供了 動態(tài)調(diào)用外部Web Service的方法,針對不同Web Service調(diào)用,不再需要生成其WSDL對 應(yīng)的stub,減少了調(diào)用的操作步驟和對不同外部工具的依賴,真正做到了靈活的調(diào)用,同 時傳遞的數(shù)據(jù)采用標(biāo)準(zhǔn)的服務(wù)數(shù)據(jù)對象(SD0)進(jìn)行封裝,為異構(gòu)環(huán)境的數(shù)據(jù)傳遞奠定了良 好的基礎(chǔ),從而在系統(tǒng)的集成工作中不再需要維護(hù)Web Service工具生成的大量調(diào)用Web Service代碼,而且對于外部Web Service變化能夠快速適應(yīng),從而使Web Service的開發(fā)、 調(diào)用過程更加直觀、簡單和高效,提高了調(diào)用的效率,快捷方便,系統(tǒng)運(yùn)行效率較高,性能穩(wěn) 定可靠,降低了開發(fā)維護(hù)的成本;同時增強(qiáng)了系統(tǒng)可移植性和可擴(kuò)展性;不僅如此,該方法 還能夠快速回應(yīng)業(yè)務(wù)需求的變化和技術(shù)變化,能夠支撐建立高度模塊化而且又高度整合的 軟件系統(tǒng),適用范圍較為廣泛,為計算機(jī)構(gòu)件化軟件技術(shù)的進(jìn)一步發(fā)展奠定了堅實(shí)的基礎(chǔ)。在此說明書中,本發(fā)明已參照其特定的實(shí)施例作了描述。但是,很顯然仍可以作出各種修改和變換而不背離本發(fā)明的精神和范圍。因此,說明書和附圖應(yīng)被認(rèn)為是說明性的 而非限制性的。
權(quán)利要求
一種構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,所述的構(gòu)件化軟件系統(tǒng)中包括圖形化構(gòu)件開發(fā)平臺和與該圖形化構(gòu)件開發(fā)平臺相連接的構(gòu)件運(yùn)行平臺,其特征在于,所述的方法包括Web Service調(diào)用構(gòu)件開發(fā)處理操作和Web Service調(diào)用構(gòu)件運(yùn)行處理操作,所述的Web Service調(diào)用構(gòu)件開發(fā)處理操作,包括以下步驟(A1)系統(tǒng)的圖形化構(gòu)件開發(fā)平臺新建構(gòu)件包;(A2)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入外部的WSDL文件;(A3)所述的圖形化構(gòu)件開發(fā)平臺導(dǎo)入該外部的WSDL文件所依賴的XSD文件;(A4)所述的圖形化構(gòu)件開發(fā)平臺進(jìn)行XSD模式類型與服務(wù)數(shù)據(jù)對象之間的相互轉(zhuǎn)換;(A5)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的WSDL文件中的WebService相關(guān)元素;(A6)所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的XSD文件中定義的類型以及屬性信息;(A7)所述的圖形化構(gòu)件開發(fā)平臺在構(gòu)件編輯器中生成Web Service調(diào)用圖元;(A8)所述的圖形化構(gòu)件開發(fā)平臺對Web Service調(diào)用圖元設(shè)置調(diào)用參數(shù);(A9)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP頭信息;(A10)所述的圖形化構(gòu)件開發(fā)平臺添加SOAP附件信息;所述的Web Service調(diào)用構(gòu)件運(yùn)行處理操作,包括以下步驟(B1)系統(tǒng)將構(gòu)件包下的資源部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn)行環(huán)境中;(B2)所述的構(gòu)件運(yùn)行平臺加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,并將其中的模式定義形成服務(wù)數(shù)據(jù)對象;(B3)所述的構(gòu)件運(yùn)行平臺加載XSD文件到構(gòu)件運(yùn)行環(huán)境;(B4)所述的構(gòu)件運(yùn)行平臺將所述的服務(wù)數(shù)據(jù)對象序列化為文檔對象;(B5)所述的構(gòu)件運(yùn)行平臺將文檔對象反序列化為服務(wù)數(shù)據(jù)對象;(B6)所述的構(gòu)件運(yùn)行平臺發(fā)送Web Service請求;(B7)所述的構(gòu)件運(yùn)行平臺處理Web Service返回值;(B8)所述的構(gòu)件運(yùn)行平臺解析并返回SOAP頭信息;(B9)所述的構(gòu)件運(yùn)行平臺解析并返回SOAP附件信息。
2.根據(jù)權(quán)利要求1所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在 于,所述的構(gòu)件包為包含一定功能邏輯的物理單元,且該構(gòu)件包作為一個最小的部署單元 部署到所述的構(gòu)件運(yùn)行平臺的構(gòu)件運(yùn)行環(huán)境中,該構(gòu)件包中包含實(shí)現(xiàn)構(gòu)件功能的所有依賴 資源。
3.根據(jù)權(quán)利要求2所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在 于,所述的依賴資源包括WSDL文件、XSD文件、Java運(yùn)行需要的類文件。
4.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方 法,其特征在于,所述的導(dǎo)入外部的WSDL文件,包括以下步驟(11)所述的圖形化構(gòu)件開發(fā)平臺根據(jù)外部WebService所在的URL,把該URL所指定 的WSDL文件下載到本地;(12)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的WSDL文件,如果所下載的WSDL文件中 包含引用的其它WSDL文件,則將該其它WSDL文件一并下載到本地;(13)所述的圖形化構(gòu)件開發(fā)平臺將所下載的WSDL文件默認(rèn)保存到構(gòu)件包資源樹下的“接口”結(jié)點(diǎn)下。
5.根據(jù)權(quán)利要求4所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在 于,所述的WSDL文件中所包含引用的其它WSDL文件,為以下兩種情形中的一種(1)通過{http://schemas.xmlsoap. org/wsdl/} import 所引用的 WSDL 文件;(2)通過{http://schemas.xmlsoap. org/wsdl/} include 所弓|用的 WSDL 文件。
6.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方 法,其特征在于,所述的導(dǎo)入外部的WSDL文件所依賴的XSD文件,包括以下步驟(21)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有WSDL文件,如果WSDL文件中包含 引用的其它XSD文件,則把所引用的XSD文件下載到本地;(22)所述的圖形化構(gòu)件開發(fā)平臺分析所下載的所有XSD文件,如果XSD文件中包含引 用的其它XSD文件,則把所引用的XSD文件下載到本地;(23)所述的圖形化構(gòu)件開發(fā)平臺將所下載的XSD文件默認(rèn)保存到構(gòu)件包資源樹下的 “XML模式”結(jié)點(diǎn)下。
7.根據(jù)權(quán)利要求6所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在 于,所述的WSDL文件中所包含引用的其它XSD文件,為以下兩種情形中的一種(1)在WSDL文件中的類型定義部分所包含的通過{http //www. w3. org/2001/ XMLSchem} import 所引用的 XSD 文件;(2)在WSDL文件中的類型定義部分所包含的通過{http //www. w3. org/2001/ XMLSchem} include 所引用的 XSD 文件。
8.根據(jù)權(quán)利要求6所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在 于,所述的XSD文件中所包含引用的其它XSD文件,為以下兩種情形中的一種(1)通過{http://www.w3. org/2001/XMLSchem} import 所引用的 XSD 文件;(2)通過{http://www.w3. org/2001/XMLSchem} include 所引用的 XSD 文件。
9.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方 法,其特征在于,所述的圖形化構(gòu)件開發(fā)平臺進(jìn)行XSD模式類型與服務(wù)數(shù)據(jù)對象之間的相 互轉(zhuǎn)換,包括以下步驟(31)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象與XSD文件中定義的complexType對應(yīng);(32)所述的圖形化構(gòu)件開發(fā)平臺將服務(wù)數(shù)據(jù)對象的屬性與XSD文件中定義 complexType的屬性對應(yīng);(33)所述的圖形化構(gòu)件開發(fā)平臺判斷XSD文件中定義complexType的屬性類型是否為 復(fù)雜類型;(34)如果是,則該復(fù)雜類型對應(yīng)另一服務(wù)數(shù)據(jù)對象,并作為該另一服務(wù)數(shù)據(jù)對象的屬性。
10.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的WSDL文件中 的WebService相關(guān)元素,包括以下步驟(41)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“類型”結(jié)點(diǎn)下按XML模式的方式定義的數(shù)據(jù)類型;(42)按服務(wù)數(shù)據(jù)對象的規(guī)則將數(shù)據(jù)類型信息解析為服務(wù)數(shù)據(jù)對象;(43)將解析后的類型信息顯示在WSDL資源樹下的“類型”結(jié)點(diǎn)下;(44)所述的圖形化構(gòu)件開發(fā)平臺解析WSDL文件中的“端口類型”結(jié)點(diǎn)并分析出其中包 括的操作以及參數(shù)類型;(45)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行參數(shù)類型的解析,在解析參數(shù)個數(shù)時,根據(jù)WSDL文件 中定義的風(fēng)格的不同而采用不同解析方式;(46)解析后的端口類型信息顯示在WSDL資源樹下的“端口類型”結(jié)點(diǎn)下;(47)解析WSDL文件中的“服務(wù)”結(jié)點(diǎn),并解析出其包含的端口子結(jié)點(diǎn);(48)根據(jù)每個端口對應(yīng)的綁定找到相應(yīng)的端口類型,進(jìn)而顯示服務(wù)對應(yīng)的操作以及參 數(shù)信息;(49)將解析后的服務(wù)信息顯示在WSDL資源樹下的“服務(wù)”結(jié)點(diǎn)下。
11.根據(jù)權(quán)利要求10所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特 征在于,所述的按服務(wù)數(shù)據(jù)對象的規(guī)則將數(shù)據(jù)類型信息解析為服務(wù)數(shù)據(jù)對象,包括以下步 驟(421)如果數(shù)據(jù)類型為XSD原生類型,則將該數(shù)據(jù)類型解析為Java基本類型;(422)如果數(shù)據(jù)類型為復(fù)雜類型,則將稿數(shù)據(jù)類型解析為服務(wù)數(shù)據(jù)對象中的commonj. sdo. DataObject
12.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的圖形化構(gòu)件開發(fā)平臺在資源樹中概覽顯示所導(dǎo)入的XSD文件中 定義的類型以及屬性信息,包括以下步驟(51)所述的圖形化構(gòu)件開發(fā)平臺解析XSD文件中所包含的所有全局元素結(jié)點(diǎn)和全局 復(fù)雜類型結(jié)點(diǎn)信息;(52)將全局元素結(jié)點(diǎn)和全局復(fù)雜類型結(jié)點(diǎn)作為XML模式的子結(jié)點(diǎn)顯示在資源樹下的 “數(shù)據(jù)”結(jié)點(diǎn)下;(53)以服務(wù)數(shù)據(jù)對象的規(guī)則進(jìn)行類型的屬性解析,并作為子結(jié)點(diǎn)顯示在相應(yīng)的類型下。
13.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的構(gòu)件編輯器中生成Web Service調(diào)用圖元,包括以下步驟(61)在資源樹中WSDL結(jié)點(diǎn)的子結(jié)點(diǎn)“服務(wù)”結(jié)點(diǎn)列出服務(wù)下所有可以被調(diào)用的操作, 所述的圖形化構(gòu)件開發(fā)平臺根據(jù)用戶的拖放動作將相應(yīng)的操作拖放到構(gòu)件編輯器中,并生 成Web Service調(diào)用圖元;(62)所述的WebService調(diào)用圖元顯示出調(diào)用的操作以及Web Service服務(wù)所在的端 點(diǎn)地址;(63)所述的WebService調(diào)用圖元根據(jù)所選操作的類型信息生成調(diào)用的實(shí)際參數(shù)信 息,其中包括參數(shù)個數(shù)和參數(shù)類型;(64)所述的WebService調(diào)用圖元根據(jù)需要添加SOAP頭信息和附件信息。
14.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的對Web Service調(diào)用圖元設(shè)置調(diào)用參數(shù),包括以下步驟(71)所述的圖形化構(gòu)件開發(fā)平臺判斷輸入?yún)?shù)和輸出參數(shù)的類型;(72)如果輸入?yún)?shù)和輸出參數(shù)為簡單類型,則直接進(jìn)行賦值;(73)如果輸入?yún)?shù)和輸出參數(shù)為復(fù)雜類型,則通過XPath的方式對在復(fù)雜類型中定義 的各個屬性分別進(jìn)行賦值。
15.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的添加SOAP頭信息,包括以下步驟(81)將SOAP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(82)在該SOAP頭信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于SOAP頭信息下頭的結(jié)點(diǎn)名稱;(83)在該SOAP頭信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于SOAP頭信息下對應(yīng)鍵結(jié)點(diǎn)的值;(84)將該SOAP頭信息存儲的鍵和值按服務(wù)數(shù)據(jù)對象的規(guī)則序列化;(85)將序列化后的文檔對象作為SOAP頭信息添加到頭中。
16.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的添加SOAP附件信息,包括以下步驟(91)將SOAP附件信息按Map結(jié)構(gòu)進(jìn)行存儲;(92)在該SOAP附件信息存儲時,Map結(jié)構(gòu)中的鍵對應(yīng)于SOAP附件信息中的 ContentId ;(93)在該SOAP附件信息存儲時,Map結(jié)構(gòu)中的值對應(yīng)于SOAP附件信息中的詳細(xì)內(nèi)容;(94)遍歷所存儲的附件信息,并作為SOAP附件信息添加到SOAP中。
17.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的將構(gòu)件包下的資源部署到構(gòu)件運(yùn)行環(huán)境中,包括以下步驟(Cl)將構(gòu)件包下的所有構(gòu)件資源拷貝到構(gòu)件運(yùn)行環(huán)境所指定的目錄中;(C2)將構(gòu)件包下定義的Java編譯類文件以及頁面資源拷貝到應(yīng)用服務(wù)器指定的應(yīng)用 目錄中。
18.根據(jù)權(quán)利要求17所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征 在于,所述的構(gòu)件資源包括XSD文件和WSDL文件。
19.根據(jù)權(quán)利要求17所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征 在于,所述的頁面資源包括jsp文件和js文件。
20.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的加載WSDL文件到構(gòu)件運(yùn)行環(huán)境,包括以下步驟(Dl)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有WSDL文件;(D2)解析WSDL文件中類型結(jié)點(diǎn)下的模式結(jié)點(diǎn)并加載為服務(wù)數(shù)據(jù)對象的類型;(D3)加載WSDL文件中的服務(wù)、綁定、端口類型信息,并封裝為運(yùn)行期模型;(D4)判定WSDL文件對應(yīng)的風(fēng)格類型,并加載到WSDL運(yùn)行期模型中。
21.根據(jù)權(quán)利要求20所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征 在于,所述的風(fēng)格類型包括以下幾種(1)document/literal ;(2)document/literal/wrapper;(3)rpc/literal、rpc/encoded。
22.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征在于,所述的加載XSD文件到構(gòu)件運(yùn)行環(huán)境,包括以下步驟 (El)構(gòu)件運(yùn)行環(huán)境啟動時,遍歷導(dǎo)入的所有XSD文件; (E2)解析XSD文件模式結(jié)點(diǎn)下的類型信息,并加載成服務(wù)數(shù)據(jù)對象的類型。
23.根據(jù)權(quán)利要求22所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征 在于,所述的XSD文件模式結(jié)點(diǎn)下的類型信息包括元素類型和復(fù)雜類型。
24.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的將服務(wù)數(shù)據(jù)對象序列化為文檔對象,包括以下步驟(Fl)服務(wù)數(shù)據(jù)對象根據(jù)對應(yīng)的模式類型信息,按模式的定義序列化為文檔對象,該文 檔對象包括結(jié)點(diǎn)名稱和結(jié)點(diǎn)所在名稱空間;(F2)服務(wù)數(shù)據(jù)對象的屬性類型為服務(wù)數(shù)據(jù)對象,并按模式的定義對其屬性序列化為文 檔對象。
25.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的將文檔對象反序列化為服務(wù)數(shù)據(jù)對象,包括以下步驟(Gl)文檔對象根結(jié)點(diǎn)取得對應(yīng)的名稱空間信息;(G2)由名稱空間檢索對應(yīng)的服務(wù)數(shù)據(jù)對象;(G3)遍歷文檔對象的子結(jié)點(diǎn),找到服務(wù)數(shù)據(jù)對象對應(yīng)的同名屬性;(G4)如果該屬性為簡單類型,則直接進(jìn)行賦值;(G5)如果該屬性為復(fù)雜類型,則遞歸進(jìn)行文檔對象的反序列化。
26.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的發(fā)送Web Service請求,包括以下步驟(Hl)構(gòu)造SOAP信封;(H2)根據(jù)WSDL文件定義的風(fēng)格類型,把作為輸入?yún)?shù)的服務(wù)數(shù)據(jù)對象序列化成文檔 對象;(H3)序列化后的文檔對象作為SOAP體的內(nèi)容添加到SOAP信封中; (H4)如果Web Service調(diào)用圖元設(shè)置了頭信息,按輸入?yún)?shù)的序列化方式,把設(shè)定的 頭信息序列化成文檔對象;(H5)序列化后的頭信息作為SOAP頭的內(nèi)容添加到SOAP信封中; (H6)如果Web Service調(diào)用圖元設(shè)置了附件信息,把設(shè)定的附件信息轉(zhuǎn)換成javax. activation. DataHandler對象,并作為SOAP附件信息添加到SOAP信封中; (H7)根據(jù)Web Service所在的URL建立Http連接;(H8)設(shè)置Http連接的請求屬性,設(shè)置內(nèi)容類型、內(nèi)容長度、SOAP動作為正確的請求數(shù) 據(jù)信息;(H9)把SOAP信封發(fā)送到連接的輸出流中。
27.根據(jù)權(quán)利要求26所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的方法,其特征 在于,所述的處理Web Service返回值,包括以下步驟(11)從Http連接的輸出流中取得返回的SOAP信封;(12)從SOAP信封中取得SOAP體的內(nèi)容作為輸出參數(shù);(13)把輸出參數(shù)按服務(wù)數(shù)據(jù)對象定義的反序列化規(guī)則進(jìn)行反序列化成數(shù)據(jù)對象,并把 反序列化后的值保存到調(diào)用的上下文中。
28.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的解析并返回SOAP頭信息,包括以下步驟(Jl)從SOAP信封中取得SOAP頭信息;(J2) SOAP頭信息按Map結(jié)構(gòu)進(jìn)行存儲;(J3)遍歷SOAP頭信息下的結(jié)點(diǎn),結(jié)點(diǎn)名稱作為Map結(jié)構(gòu)的鍵;(J4)遍歷鍵結(jié)點(diǎn)的子結(jié)點(diǎn),把其文檔對象反序列化為服務(wù)數(shù)據(jù)對象,作為Map結(jié)構(gòu)的值;(J5)S0AP頭信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。
29.根據(jù)權(quán)利要求1至3中任一項所述的構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)WebService調(diào)用的 方法,其特征在于,所述的解析并返回SOAP附件信息,包括以下步驟(Kl)從SOAP信封中取得SOAP附件信息; (K2)將SOAP附件信息按Map結(jié)構(gòu)進(jìn)行存儲; (K3)將Map結(jié)構(gòu)的鍵對應(yīng)于附件的ContentId ; (K4)將Map結(jié)構(gòu)的值對應(yīng)于附件的詳細(xì)內(nèi)容;(K5)將SOAP附件信息保存到調(diào)用的上下文中,以供其它構(gòu)件資源訪問。
全文摘要
本發(fā)明涉及一種構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,所述的構(gòu)件化軟件系統(tǒng)中包括圖形化構(gòu)件開發(fā)平臺和與該圖形化構(gòu)件開發(fā)平臺相連接的構(gòu)件運(yùn)行平臺,其中該方法包括Web Service調(diào)用構(gòu)件開發(fā)處理操作和Web Service調(diào)用構(gòu)件運(yùn)行處理操作。采用該種構(gòu)件化軟件系統(tǒng)中實(shí)現(xiàn)Web Service調(diào)用的方法,使Web Service的開發(fā)、調(diào)用過程更加直觀、簡單和高效,快捷方便,系統(tǒng)運(yùn)行效率較高,性能穩(wěn)定可靠,降低了開發(fā)維護(hù)的成本;同時增強(qiáng)了系統(tǒng)可移植性和可擴(kuò)展性;還能夠快速回應(yīng)業(yè)務(wù)需求的變化和技術(shù)變化,能夠支撐建立高度模塊化而且又高度整合的軟件系統(tǒng),適用范圍較為廣泛,為計算機(jī)構(gòu)件化軟件技術(shù)的進(jìn)一步發(fā)展奠定了堅實(shí)的基礎(chǔ)。
文檔編號G06F9/44GK101853156SQ20101017198
公開日2010年10月6日 申請日期2010年5月12日 優(yōu)先權(quán)日2010年5月12日
發(fā)明者游青華, 王文斌, 王 鋒 申請人:上海普元信息技術(shù)股份有限公司