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