專利名稱:服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于服務(wù)客戶端自動(dòng)構(gòu)建技術(shù)領(lǐng)域,特別是涉及一種服務(wù)客戶端自動(dòng)構(gòu)建
系統(tǒng)。
背景技術(shù):
當(dāng)下主流的服務(wù)客戶端自動(dòng)構(gòu)建工具主要包括Apache Axis提供的WSDL2Java 命令行工具以及微軟的Visual Studio.NET的自帶圖形化工具。這些工具提供了Web服 務(wù)調(diào)用代碼生成系統(tǒng),但不能為用戶提供服務(wù)檢索功能,用戶需要自己閱讀服務(wù)描述文檔 (WSDL)查找需要的服務(wù),并使用操作名、參數(shù)名、參數(shù)類型等信息進(jìn)行所生成代碼的使用。 由于WSDL文檔結(jié)構(gòu)復(fù)雜,不適于人讀,這使得服務(wù)使用的門檻依然很高,并且使用效率低 下。當(dāng)獲得的服務(wù)描述文檔很多時(shí),這樣的方式更有可能成為服務(wù)使用效率的瓶頸。
而當(dāng)前的各類服務(wù)發(fā)現(xiàn)系統(tǒng),如搜索引擎與UBR(UDDI BusinessRegistries),服 務(wù)發(fā)現(xiàn)網(wǎng)站(XMethods, Strikelron, BindingPoint)等。雖然可以提供部分服務(wù)的在線測 試頁面,但是不能生成用于構(gòu)建基于服務(wù)軟件的代碼,對(duì)于服務(wù)使用幫助不大。
發(fā)明內(nèi)容
本發(fā)明目的在于針對(duì)現(xiàn)有技術(shù)的不足,提出一種便于查找服務(wù)的高效服務(wù)客戶端 自動(dòng)構(gòu)建系統(tǒng)。
本發(fā)明的技術(shù)方案為包括有以下三個(gè)部分,
存儲(chǔ)模塊,用于持久存儲(chǔ)服務(wù)信息; 服務(wù)發(fā)現(xiàn)模塊,用于提供服務(wù)檢索接口 ,根據(jù)服務(wù)檢索接口接受的查詢請(qǐng)求信息 檢索存儲(chǔ)模塊中的相應(yīng)服務(wù)信息,展示檢索結(jié)果并為檢索到的相應(yīng)服務(wù)信息建立檢索結(jié)果 索引; 服務(wù)調(diào)用代碼生成模塊,用于從服務(wù)發(fā)現(xiàn)模塊接收檢索結(jié)果索引,按照檢索結(jié)果
索引從存儲(chǔ)模塊中提取相應(yīng)服務(wù)信息,并填入代碼模板生成服務(wù)調(diào)用代碼。 而且,所述存儲(chǔ)模塊采用中間件存儲(chǔ)模式存儲(chǔ)服務(wù)信息,即將服務(wù)信息內(nèi)容分解
為一項(xiàng)以上元素后分項(xiàng)存儲(chǔ)。 而且,存儲(chǔ)模塊中建立服務(wù)表、操作表和參數(shù)表,將服務(wù)信息內(nèi)容分解為服務(wù)元 素、操作元素和參數(shù)元素后分別存儲(chǔ)到服務(wù)表、操作表和參數(shù)表。 而且,所述存儲(chǔ)模塊建立WSDL解析機(jī)制,用于實(shí)現(xiàn)WSDL文檔所含服務(wù)信息到按中
間件存儲(chǔ)模式存儲(chǔ)的轉(zhuǎn)換,所述轉(zhuǎn)換包括以下步驟, 步驟一,讀取WSDL文檔的根元素,構(gòu)建一個(gè)Definition對(duì)象; 步驟二,使用Definition的子元素Types生成標(biāo)準(zhǔn)的Java對(duì)象Schema向量; 步驟三,獲得在WSDL文檔中定義的所有Service對(duì)象,提取每個(gè)Service對(duì)象的
服務(wù)元素信息填入服務(wù)表;提取每個(gè)Service對(duì)象的端口集合得到相應(yīng)綁定信息,從綁定
信息中取得每個(gè)端口的操作集合和操作的地址信息,作為操作元素信息填入操作表;再對(duì)每個(gè)操作進(jìn)行處理,得到每個(gè)操作相關(guān)的參數(shù)信息并填入?yún)?shù)表。 本發(fā)明為改進(jìn)了現(xiàn)有服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),將服務(wù)發(fā)現(xiàn)功能和服務(wù)調(diào)用代碼 生成功能融合為一,提高了服務(wù)支持水平。服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)具備了服務(wù)發(fā)現(xiàn)功能, 就可以直接為用戶檢索到的服務(wù)產(chǎn)生調(diào)用代碼。用戶不必再對(duì)服務(wù)描述文檔(WSDL)進(jìn)行 人工閱讀與查找需要的服務(wù)功能,然后記錄下服務(wù)的各類信息來進(jìn)行代碼的使用。本發(fā)明 還提出采用中間件存儲(chǔ)模式存儲(chǔ)服務(wù)信息,將所有服務(wù)信息內(nèi)容按元素劃分進(jìn)行存儲(chǔ),進(jìn) 一步提高了服務(wù)發(fā)現(xiàn)效率。采用中間件存儲(chǔ)模式可以進(jìn)行屬性擴(kuò)展,所以生成的代碼可以 比直接通過WSDL生成的代碼具備更多特征,比如支持多語言等。本發(fā)明提出可在存儲(chǔ)模塊 中內(nèi)建WSDL解析機(jī)制,用于自動(dòng)實(shí)現(xiàn)將WSDL文檔所含服務(wù)信息按中間件存儲(chǔ)模式存儲(chǔ),以 便根據(jù)客戶需要從任意WSDL文檔中進(jìn)行高效率的服務(wù)發(fā)現(xiàn)。
圖1為本發(fā)明實(shí)施例的中間件存儲(chǔ)模式示意圖;
圖2為本發(fā)明實(shí)施例的系統(tǒng)結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例的生成代碼示意圖。
具體實(shí)施例方式
參見附圖2,本發(fā)明提出的服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)包括有以下三個(gè)部分,(一) 存儲(chǔ)模塊,用于持久存儲(chǔ)服務(wù)信息; 具體實(shí)施時(shí),存儲(chǔ)模塊可以用多種方式實(shí)現(xiàn)存儲(chǔ),如內(nèi)存中的對(duì)象或物理文件,也 可以使用數(shù)據(jù)庫與XML ;服務(wù)信息內(nèi)容也可以用多種結(jié)構(gòu)被存儲(chǔ)管理,例如直接用目前本 領(lǐng)域常用的WSDL文檔。為了提高響應(yīng)查詢請(qǐng)求信息的速度,保障檢索結(jié)果準(zhǔn)確性,本發(fā)明 提供了進(jìn)一步技術(shù)方案所述存儲(chǔ)模塊采用中間件存儲(chǔ)模式存儲(chǔ)服務(wù)信息,即將服務(wù)信息 內(nèi)容分解為一項(xiàng)以上元素后分項(xiàng)存儲(chǔ)。按照中間件存儲(chǔ)模式存儲(chǔ)服務(wù)信息,條理化結(jié)構(gòu)化 地存儲(chǔ)管理服務(wù)信息所含內(nèi)容,既便于支持服務(wù)檢索接口的高級(jí)查詢,還能快速響應(yīng)查詢 請(qǐng)求信息,也便于在服務(wù)檢索接口清晰地展示檢索結(jié)果。更重要的是,中間件存儲(chǔ)模式的目 標(biāo)是能夠支持不同的應(yīng)用,服務(wù)發(fā)現(xiàn)模塊和服務(wù)調(diào)用代碼生成模塊都能方便地從存儲(chǔ)模塊 調(diào)用服務(wù)信息。在以分布式數(shù)據(jù)庫技術(shù)實(shí)現(xiàn)存儲(chǔ)模塊時(shí),中間件存儲(chǔ)模式具有支持分布式 計(jì)算,提供跨網(wǎng)絡(luò)、硬件和OS平臺(tái)的交互優(yōu)勢,支持實(shí)現(xiàn)大規(guī)模的服務(wù)使用資源共享。
參見附圖1,本發(fā)明實(shí)施例在存儲(chǔ)模塊中建立服務(wù)表、操作表和參數(shù)表,將服務(wù) 信息內(nèi)容分解為3項(xiàng)元素,即服務(wù)元素(Service)、操作元素(Operation)和參數(shù)元素 (parameter)后,然后分別存儲(chǔ)到服務(wù)表、操作表和參數(shù)表。中間件存儲(chǔ)模式將服務(wù)定義為 包括多個(gè)屬性的元組,這些屬性可以包括服務(wù)調(diào)用所需要的信息、服務(wù)語義信息、服務(wù)屬性 的其他語言表示信息、用戶自定義屬性、服務(wù)包含的操作集合,如附圖1中的服務(wù)表記載的 服務(wù)信息包括服務(wù)ID、服務(wù)名稱、命名空間、服務(wù)地址、服務(wù)中文名、相關(guān)概念等;類似的, 操作定義為操作各屬性元組,以及所含有的輸入輸出參數(shù)集合,操作表記載的操作信息包 括操作的操作ID、操作名稱、so即action、綁定協(xié)議、傳輸方式、端口地址、服務(wù)ID等;參數(shù) 定義為參數(shù)各屬性元組,參數(shù)表記載的參數(shù)信息包括參數(shù)名稱、參數(shù)類型、參數(shù)排列方式、 所屬參數(shù)ID、參數(shù)數(shù)據(jù)類型、是否復(fù)雜參數(shù)、操作ID等。圖中PK表述主鍵,F(xiàn)K1表示外鍵。
4具體實(shí)施時(shí),可以選擇其它元素劃分方式,按照更多項(xiàng)元素類別存儲(chǔ)服務(wù)信息內(nèi)容。
本發(fā)明實(shí)施例的中間件存儲(chǔ)模式可以視為WSDL在結(jié)構(gòu)上的簡化與結(jié)構(gòu)化,其與 WSDL模式的關(guān)系如下第一,除去Definition元素,使用服務(wù)元素作為根元素,將命名空 間信息存儲(chǔ)于Service元素中;第二,除去Message元素,使用參數(shù)元素的參數(shù)類型標(biāo)識(shí)參 數(shù)屬于操作的輸入還是輸出;第三,使用參數(shù)元素替代Part與DataType,使用的屬性標(biāo)識(shí) 是否為復(fù)雜類型。使用嵌套引用的方法標(biāo)識(shí)從屬的父參數(shù),以支持復(fù)雜數(shù)據(jù)類型;第四,將 Port,Binding的信息合并存儲(chǔ)操作元素中,即將服務(wù)的抽象與具體信息進(jìn)行融合。某些情 況下操作可能被多個(gè)端口支持,所以可能會(huì)出現(xiàn)少許數(shù)據(jù)冗余;第五,支持屬性擴(kuò)展,本模 式中所有元素均可以進(jìn)行屬性擴(kuò)展,比如語義信息,漢語標(biāo)注信息均可以存儲(chǔ)入中間件存 儲(chǔ)模式,這些信息可以支持系統(tǒng)生成更加豐富的代碼。因此,本發(fā)明實(shí)施例在存儲(chǔ)模塊建立 WSDL解析機(jī)制,用于實(shí)現(xiàn)WSDL文檔所含服務(wù)信息到按中間件存儲(chǔ)模式存儲(chǔ)的自動(dòng)轉(zhuǎn)換,所 述轉(zhuǎn)換包括以下步驟步驟一,讀取WSDL文檔的根元素,構(gòu)建一個(gè)Definition對(duì)象;步驟 二,使用Definition的子元素Types生成標(biāo)準(zhǔn)的Java對(duì)象Schema向量;步驟三,獲得在 WSDL文檔中定義的所有Service對(duì)象,提取每個(gè)Service對(duì)象的服務(wù)元素信息填入服務(wù)表; 提取每個(gè)Service對(duì)象的端口 (PortType)集合得到相應(yīng)綁定(Binding)信息,從綁定信息 中取得每個(gè)端口的操作(Operation)集合和操作的地址信息,作為操作元素信息填入操作 表;再對(duì)每個(gè)操作進(jìn)行處理,得到每個(gè)操作相關(guān)的參數(shù)信息并填入?yún)?shù)表。以上各英文標(biāo)識(shí) 為WSDL文檔和Java語言的標(biāo)準(zhǔn)用語,可以參見相關(guān)標(biāo)準(zhǔn) Types-數(shù)據(jù)類型定義的容器,它使用某種類型系統(tǒng)( 一般地使用XMLSchema中的 類型系統(tǒng))。 WSDL4J技術(shù)構(gòu)建與WSDL模式相對(duì)應(yīng)的對(duì)象
Definition-WSDL的f艮元素。 Operation-對(duì)服務(wù)中所支持的操作的抽象描述, 一般單個(gè)Operation描述了一個(gè) 訪問入口的請(qǐng)求/響應(yīng)消息對(duì)。 PortType-對(duì)于某個(gè)訪問入口點(diǎn)類型所支持的操作的抽象集合,這些操作可以由 一個(gè)或多個(gè)服務(wù)訪問點(diǎn)來支持。 Binding-特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范的綁定。 Port-定義為協(xié)議/數(shù)據(jù)格式綁定與具體Web訪問地址組合的單個(gè)服務(wù)訪問點(diǎn)。 Service-相關(guān)服務(wù)訪問點(diǎn)的集合。 建立這種機(jī)制后,本發(fā)明提出的服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)可以收錄WSDL文檔后 自動(dòng)轉(zhuǎn)換存儲(chǔ),便于擴(kuò)展服務(wù)使用支持范圍。具體實(shí)施時(shí),也可以建立更多樣的轉(zhuǎn)換機(jī)制, 例如采用DOM技術(shù)將Xml文件轉(zhuǎn)換為中間件存儲(chǔ)模式的服務(wù)信息。 可以在存儲(chǔ)模塊中對(duì)已存儲(chǔ)的服務(wù)信息建立服務(wù)索引,例如對(duì)中間件的各個(gè)元素 的屬性值與服務(wù)信息構(gòu)建倒排索引。如果使用數(shù)據(jù)庫存儲(chǔ)服務(wù)信息信息,可以直接使用數(shù) 據(jù)庫的視圖功能,將整個(gè)中間件存儲(chǔ)模式建為一個(gè)視圖,支持對(duì)視圖進(jìn)行檢索。服務(wù)索引也 可以不直接使用中間件信息進(jìn)行構(gòu)建,在索引文件中保存服務(wù)的編號(hào)即可將服務(wù)索引與服 務(wù)相聯(lián),這使得本系統(tǒng)可以使用任何復(fù)雜的服務(wù)發(fā)現(xiàn)策略。 存儲(chǔ)模塊的具體實(shí)現(xiàn)可以由本領(lǐng)域技術(shù)人員運(yùn)用現(xiàn)有數(shù)據(jù)庫技術(shù)和Java技術(shù)完 成軟件建設(shè),本發(fā)明不予贅述。
( 二 )服務(wù)發(fā)現(xiàn)模塊,用于提供服務(wù)檢索接口 ,根據(jù)服務(wù)檢索接口接受的查詢請(qǐng)求 信息檢索存儲(chǔ)模塊中的相應(yīng)服務(wù)信息,展示檢索結(jié)果并為檢索到的相應(yīng)服務(wù)信息建立檢索 結(jié)果索引; 服務(wù)發(fā)現(xiàn)模塊可以采用現(xiàn)有檢索技術(shù)方便的實(shí)現(xiàn),只需根據(jù)服務(wù)檢索接口接受的 查詢請(qǐng)求信息檢索存儲(chǔ)模塊中的相應(yīng)服務(wù)信息即可。若存儲(chǔ)模塊建立了服務(wù)索引,使用服 務(wù)索引文件對(duì)服務(wù)進(jìn)行檢索更加方便高效,用戶可以使用中間件中各元素的所有屬性進(jìn)行 查詢。服務(wù)檢索接口以列表的方式呈現(xiàn)服務(wù)信息,列表的每個(gè)元素呈現(xiàn)可視化的整個(gè)服務(wù) 信息,用戶可以很方便的看到服務(wù)是否滿足需要。為了方便生成用戶需要的服務(wù)調(diào)用代碼, 服務(wù)發(fā)現(xiàn)模塊根據(jù)用戶點(diǎn)選的列表項(xiàng)目建立檢索結(jié)果索引,并傳送到服務(wù)調(diào)用代碼生成模 塊。檢索結(jié)果索引包含用戶點(diǎn)選的列表項(xiàng)目對(duì)應(yīng)服務(wù)信息在存儲(chǔ)模塊中的地址,可以直接 采用服務(wù)索引文件的相關(guān)內(nèi)容。(三)服務(wù)調(diào)用代碼生成模塊,用于從服務(wù)發(fā)現(xiàn)模塊接收檢索結(jié)果索引,按照檢索
結(jié)果索引從存儲(chǔ)模塊中提取相應(yīng)服務(wù)信息,并填入代碼模板生成服務(wù)調(diào)用代碼。 服務(wù)調(diào)用代碼生成模塊的代碼生成部分與現(xiàn)有服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)相符,提
供代碼模板,填入的代碼來源于按照檢索結(jié)果索引從存儲(chǔ)模塊中提取的相應(yīng)服務(wù)信息。圖
3提供了本發(fā)明實(shí)施例的一個(gè)檢索結(jié)果,以便實(shí)施參考 生成的代碼為工廠模式,主要包括三種類結(jié)構(gòu),服務(wù)類、操作父類、具體操作類。
服務(wù)類服務(wù)類為操作工廠,通過操作名產(chǎn)生操作對(duì)象;
操作父類本類為虛類,使用虛方法定義SOAP調(diào)用; 具體操作類繼承操作父類,使用私有變量定義SOAP調(diào)用所需要的參數(shù)以及輸入 輸出參數(shù),并使用Getter和Setter提供這些參數(shù)的共有接口 。對(duì)操作父類中SOAP調(diào)用進(jìn) 行重寫。圖3提供了三個(gè)操作子類操作類1、操作類2、操作類3。
各圖內(nèi)元素含義如下 操作工廠的createoperation():產(chǎn)生操作對(duì)象的方法;
操作父類的invoke ():操作調(diào)用的虛方法,需要子類具體實(shí)現(xiàn);
操作子類的invoke ():操作父類的對(duì)應(yīng)虛方法具體實(shí)現(xiàn); 操作類的禾厶有成員so即action、 so即address、 par咖eterl、 par咖eter2、 parameter3 :用于標(biāo)志操作所需要的各個(gè)參數(shù); 操作類的共有成員getparameterl、 getparameter2、 getparameter3、
setparameterl、 setparameter2、 setparameter3 :各個(gè)參數(shù)對(duì)應(yīng)的公共接口 ,用于對(duì)參數(shù)賦
值或者獲取參數(shù)的值。
實(shí)施例的生成代碼過程如下 第一步初始化中間件內(nèi)存對(duì)象; 第二步生成代碼流程如下 讀取服務(wù)對(duì)象,以服務(wù)名產(chǎn)生文件夾。
以服務(wù)名產(chǎn)生服務(wù)類(操作工廠)文件; 產(chǎn)生操作父類; 產(chǎn)生操作父類中服務(wù)調(diào)用虛方法; For Each Operation in Service do
Begin 使用操作名產(chǎn)生服務(wù)類中創(chuàng)建操作對(duì)象代碼; 使用操作名產(chǎn)生操作子類; 產(chǎn)生操作調(diào)用所需參數(shù)的私有變量定義代碼; For Each Input Parameter in Operation do Begin 產(chǎn)生輸入輸出參數(shù)的私有變量定義代碼; 產(chǎn)生輸入輸出參數(shù)的公共接口 ; End 產(chǎn)生操作子類中的服務(wù)調(diào)用方法; 寫入操作子類文件。 End 寫入操作父類文件以及服務(wù)文件。
權(quán)利要求
一種服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),其特征在于包括有以下三個(gè)部分,存儲(chǔ)模塊,用于持久存儲(chǔ)服務(wù)信息;服務(wù)發(fā)現(xiàn)模塊,用于提供服務(wù)檢索接口,根據(jù)服務(wù)檢索接口接受的查詢請(qǐng)求信息檢索存儲(chǔ)模塊中的相應(yīng)服務(wù)信息,展示檢索結(jié)果并為檢索到的相應(yīng)服務(wù)信息建立檢索結(jié)果索引;服務(wù)調(diào)用代碼生成模塊,用于從服務(wù)發(fā)現(xiàn)模塊接收檢索結(jié)果索引,按照檢索結(jié)果索引從存儲(chǔ)模塊中提取相應(yīng)服務(wù)信息,并填入代碼模板生成服務(wù)調(diào)用代碼。
2. 如權(quán)利要求1所述服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),其特征在于所述存儲(chǔ)模塊采用中間 件存儲(chǔ)模式存儲(chǔ)服務(wù)信息,即將服務(wù)信息內(nèi)容分解為一項(xiàng)以上元素后分項(xiàng)存儲(chǔ)。
3. 如權(quán)利要求2所述服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),其特征在于存儲(chǔ)模塊中建立服務(wù)表、 操作表和參數(shù)表,將服務(wù)信息內(nèi)容分解為服務(wù)元素、操作元素和參數(shù)元素后分別存儲(chǔ)到服 務(wù)表、操作表和參數(shù)表。
4. 如權(quán)利要求3所述服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),其特征在于所述存儲(chǔ)模塊建立WSDL 解析機(jī)制,用于實(shí)現(xiàn)WSDL文檔所含服務(wù)信息到按中間件存儲(chǔ)模式存儲(chǔ)的轉(zhuǎn)換,所述轉(zhuǎn)換包 括以下步驟,步驟一,讀取WSDL文檔的根元素,構(gòu)建一個(gè)Definition對(duì)象; 步驟二,使用Definition的子元素Types生成標(biāo)準(zhǔn)的Java對(duì)象Schema向量; 步驟三,獲得在WSDL文檔中定義的所有Service對(duì)象,提取每個(gè)Service對(duì)象的服務(wù) 元素信息填入服務(wù)表;提取每個(gè)Service對(duì)象的端口集合得到相應(yīng)綁定信息,從綁定信息 中取得每個(gè)端口的操作集合和操作的地址信息,作為操作元素信息填入操作表;再對(duì)每個(gè) 操作進(jìn)行處理,得到每個(gè)操作相關(guān)的參數(shù)信息并填入?yún)?shù)表。
全文摘要
本發(fā)明提供了一種服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng),其特征在于包括有以下三個(gè)部分存儲(chǔ)模塊,用于持久存儲(chǔ)服務(wù)信息;服務(wù)發(fā)現(xiàn)模塊,用于提供服務(wù)檢索接口,根據(jù)服務(wù)檢索接口接受的查詢請(qǐng)求信息檢索存儲(chǔ)模塊中的相應(yīng)服務(wù)信息,展示檢索結(jié)果并為檢索到的相應(yīng)服務(wù)信息建立檢索結(jié)果索引;服務(wù)調(diào)用代碼生成模塊,用于從服務(wù)發(fā)現(xiàn)模塊接收檢索結(jié)果索引,按照檢索結(jié)果索引從存儲(chǔ)模塊中提取相應(yīng)服務(wù)信息,并填入代碼模板生成服務(wù)調(diào)用代碼。本發(fā)明提供的服務(wù)客戶端自動(dòng)構(gòu)建系統(tǒng)具備了服務(wù)發(fā)現(xiàn)功能,就可以直接為用戶檢索到的服務(wù)產(chǎn)生調(diào)用代碼,提高了服務(wù)支持水平。
文檔編號(hào)G06F9/44GK101739249SQ200810197588
公開日2010年6月16日 申請(qǐng)日期2008年11月11日 優(yōu)先權(quán)日2008年11月11日
發(fā)明者彭智勇, 曾承, 歐偉杰, 王科 申請(qǐng)人:武漢大學(xué)