一種web服務代理的自動生成方法
【專利摘要】本發(fā)明提供一種WEB服務代理的自動生成方法,包括:獲取源服務端WEB服務描述語言WSDL地址;根據(jù)所述WSDL地址生成源WEB服務的客戶端代碼和服務端代碼;編譯上述代碼,構建WEB服務。通過本發(fā)明提供的一種WEB服務代理的自動生成方法,用于解決傳統(tǒng)開發(fā)代理服務周期長、成本高、易出錯的問題,提高效率。
【專利說明】—種WEB服務代理的自動生成方法
【技術領域】
[0001]本發(fā)明涉及計算機領域,特別是涉及一種面向服務的體系結構 (Service-Oriented Architecture, SOA)實施過程中WEB服務代理的自動生成方法。
【背景技術】
[0002]目前,SOA實施過程中,為了系統(tǒng)和高效的管理服務,普遍采用的方法是將服務接 入到服務總線中。而將服務接入總線時需要進行服務二次封裝,即服務代理。目前這些過 程只能通過人力開發(fā)WEB服務完成,開發(fā)使用的技術有CXF、0RACLE的BEPL、AXSI2等,其缺 點很明顯:開發(fā)周期長、人力成本高、易出錯。
[0003]所以,有必要提出一種WEB服務的自動化生成的方法來優(yōu)化這一過程,提高生產效率。
【發(fā)明內容】
[0004]本發(fā)明的目的在于提供一種WEB服務代理的自動生成方法,用于解決傳統(tǒng)開發(fā)代 理服務周期長、成本高、易出錯的問題,提高效率。
[0005]為了解決以上技術問題,本發(fā)明提供一種WEB服務代理的自動生成方法,包括:獲 取源服務端WEB服務描述語言WSDL地址;根據(jù)所述WSDL地址生成源WEB服務的客戶端代 碼和服務端代碼;編譯上述代碼,構建WEB服務。
[0006]進一步地,獲取源服務端WSDL地址通過以下方式獲取:直接獲取,通過外部程序 在指定一個包含URL的字符串或包含多個URL的清單中獲?。换蛘?,通過服務定義的WSDL 文件,通過配置文件方式在服務運行時指定代理服務源服務端WSDL地址。
[0007]進一步地,通過調用JAX-WS服務代碼生成工具,根據(jù)所述WSDL地址生成源WEB服 務的客戶端代碼和服務端代碼。
[0008]進一步地,通過調用JAX-WS服務代碼生成工具,根據(jù)所述WSDL地址生成源WEB服 務的客戶端代碼和服務端代碼,具體包括:
[0009]調用JAX-WS服務代碼生成工具,根據(jù)所述WSDL地址生成源WEB服務的客戶端代 碼,該客戶端代碼包括簡單對象訪問協(xié)議SOAP消息的封裝類,服務接口以及客戶端工廠 類;
[0010]利用客戶端代碼生成用于發(fā)布代理服務的服務端代碼,具體方法如下:調用客戶 端代碼中的服務接口,通過Java字符串拼裝生成服務端代碼。
[0011]進一步地,通過調用ANT工具編譯上述代碼,構建WEB服務。
[0012]進一步地,所述方法進一步包括:在根據(jù)所述WSDL地址生成源WEB服務的客戶端 代碼和服務端代碼之前,先配置代理服務構建環(huán)境。
[0013]進一步地,所述方法進一步包括:部署并發(fā)布WEB服務,通過調用ANT工具將構建 好的WEB服務部署至J2EE容器。
[0014]與現(xiàn)有傳統(tǒng)服務代理(封裝)開發(fā)相比,本發(fā)明提供的一種WEB服務代理的自動生成方法,只需要提供源WEB服務的WSDL (WEB服務描述語言)地址即可自動生成代理服務, 不再需要人力開發(fā),不會出錯;生成的WEB服務符合J2EE5規(guī)范中的JAX-WS2.0規(guī)范,服務 總線的選擇更加多樣,J2EE容器均可部署;支持批量代理,允許導入多個WSDL地址,一次生 成多個服務代理,高效率;自動部署發(fā)布服務,免去部署的時間,即時獲取代理WEB服務的 WSDL地址,即可使用。
【專利附圖】
【附圖說明】
[0015]此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本發(fā)明的一部分,本發(fā) 明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
[0016]圖1是本發(fā)明提供的一種WEB服務代理的自動生成方法的流程圖。
[0017]圖2是本發(fā)明在生成代理服務前環(huán)境配置生成的目錄結構與文件樹。
[0018]圖3是本發(fā)明生成的代理服務原理圖。
【具體實施方式】
[0019]為了使本發(fā)明所要解決的技術問題、技術方案及有益效果更加清楚、明白,以下結 合附圖和實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用 以解釋本發(fā)明,并不用于限定本發(fā)明。
[0020]在本發(fā)明中,WEB服務代理的自動生成涉及幾個部分J2EE容器、ANT工具、JAX-WS 服務代碼生成工具。其中:
[0021]J2EE容器,包括JBOSS,Weblogic,GlassFish等,這些均可以作為服務總線;另外, 由于生成代理服務是JAX-WS2.0,所以要求支持的J2EE版本5以上。
[0022]ANT工具是由Apache軟件基金會所提供,是一個將軟件編譯、測試、部署等步驟聯(lián) 系在一起加以自動化的一個工具,大多用于Java環(huán)境中的軟件開發(fā)。在本發(fā)明中,該工具 用來編譯和構建代理服務。
[0023]JAX-WS 服務代碼生成工具,包括 JAX-WS RI 的 wsimport、CXF 的 wsdl2java 等。
[0024]如圖1所示,本發(fā)明提供的一種WEB服務代理的自動生成方法,包括:
[0025]步驟1:獲取源服務端WSDL (WEB服務描述語言)地址。其中,獲取源服務端WSDL 地址可以通過以下方式獲取:
[0026]直接獲取,通過外部程序在指定一個包含URL的字符串或包含多個URL的清單中 獲??;或者,
[0027]通過服務定義的WSDL文件,通過配置文件方式在服務運用時提供WSDL地址給代 理服務源服務端。
[0028]步驟2:配置代理服務構建環(huán)境。在該步驟中,主要用來生成代理服務編譯和構建 所需要的配置文件以及工程目錄,具體目錄結構與文件見圖2。
[0029]步驟3:根據(jù)所述WSDL地址生成源WEB服務的客戶端代碼和服務端代碼;具體的 實現(xiàn)方法如下:
[0030]生成調用源WEB服務的客戶端代碼。調用JAX-WS服務代碼生成工具,根據(jù)所述 WSDL地址生成源WEB服務的客戶端代碼,該客戶端代碼包括SOAP (Simple Object Access Protocol簡單對象訪問協(xié)議)消息的封裝類,服務接口以及客戶端工廠類。[0031]生成用于發(fā)布代理服務的服務端代碼。具體方法如下:利用客戶端代碼生成用于發(fā)布代理服務的服務端代碼。調用客戶端代碼中的服務接口,通過Java字符串拼裝 (StringBuffer等)生成服務端代碼,然后使用文件流寫到硬盤上。具體拼裝思路是:由于代理服務需要提供源端相同的接口,所以服務端必須要實現(xiàn)服務接口,該服務接口在生成客戶端時生成,實際上就是根據(jù)源端WSDL地址生成的客戶端的服務接口。具體實現(xiàn)如下:
[0032]a、定義類所在的包(例如:基礎包?服務英文名稱(com.base.ws.srvname)),以及通過import關鍵字引入需要用到的包、類或接口等(包括:上述步驟3生成的客戶端包、ejb 的標注(javax.ejb.Remote 等)、jws 的標注(javax.jws.WebMethod 等));
[0033]b、生成類簽名,包括定義類名(例如:服務英文名稱ESBProxy (srvnameESBProxy))、添加ejb標注(例如:iRemote等ejb標注)、添加jws標注(例如@ WebService等)、通過implements關鍵字實現(xiàn)步驟3中生成的服務接口 ;
[0034]C、生成類成員屬性,主要是定義客戶端屬性(形式為:private服務接口 proxy=new 工廠類()? getXXXPort ());
[0035]d、實現(xiàn)步驟3中生成的服務接口的webservice方法,方法簽名直接沿用接口的方法簽名,方法的內部實現(xiàn)即調用類成員屬性,訪問服務提供方(形式為return proxy.方法名(入?yún)?或proxy.方法名(入?yún)?)。
[0036]如圖3所示,代理服務內部邏輯實際上將訪問代理服務的請求通過源服務的客戶端轉發(fā)給源服務,響應則正好相反。WEB服務消費方只看的到代理服務暴露的接口,其按照接口封裝SOAP消息發(fā)送請求(I請求)給代理服務,代理服務獲取到請求后,(2請求)調用源服務的客戶端,將該請求(3請求)發(fā)送給源服務。而源服務端對請求的SOAP消息做處理后,響應(4響應)的消息發(fā)送回代理服務端,并由代理服務端返回給服務消費方。因為做的是透明代理,所以三個請求,三個響應并無不同。
[0037]步驟4:編譯上述代碼,構建WEB服務。具體的實現(xiàn)方法如下:調用ANT工具編譯上述代碼,構建WEB服務。[0038]步驟5:部署并發(fā)布WEB服務。調用ANT工具將構建好的WEB服務部署至J2EE容器,發(fā)布WEB服務。
[0039]在步驟I中,當源服務端WSDL地址的獲取是通過服務定義的WSDL文件,通過配置文件方式在服務運用時提供WSDL地址給代理服務源服務端時,實際上是對服務提供方即源服務做了松耦合的處理,將源服務WSDL地址提供推后到了服務運行時。在該模式中, 源服務的地址不在硬編碼在程序中,而是由配置決定(例如:java的properties文件、數(shù)據(jù)庫,另外,為了提高性能,可以在內存中做一個緩存),這樣在接口沒有變動的前提下,不管源服務端在網(wǎng)絡上做如何變動,代理服務均不需要做變動。
[0040]上述說明示出并描述了本發(fā)明的一個優(yōu)選實施例,但如前所述,應當理解本發(fā)明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、 修改和環(huán)境,并能夠在本文所述發(fā)明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應在本發(fā)明所附權利要求的保護范圍內。
【權利要求】
1.一種WEB服務代理的自動生成方法,其特征在于,包括:獲取源服務端WEB服務描述 語言WSDL地址;根據(jù)所述WSDL地址生成源WEB服務的客戶端代碼和服務端代碼;編譯上述 代碼,構建WEB服務。
2.如權利要求1所述的方法,其特征在于,獲取源服務端WSDL地址通過以下方式獲取: 直接獲取,通過外部程序在指定一個包含URL的字符串或包含多個URL的清單中獲?。换?者,通過服務定義的WSDL文件,通過配置文件方式在服務運用時提供WSDL地址給代理服務 源服務端。
3.如權利要求1所述的方法,其特征在于,通過調用JAX-WS服務代碼生成工具,根據(jù)所 述WSDL地址生成源WEB服務的客戶端代碼和服務端代碼。
4.如權利要求3所述的方法,其特征在于,通過調用JAX-WS服務代碼生成工具,根據(jù)所 述WSDL地址生成源WEB服務的客戶端代碼和服務端代碼,具體包括:調用JAX-WS服務代碼生成工具,根據(jù)所述WSDL地址生成源WEB服務的客戶端代碼,該 客戶端代碼包括簡單對象訪問協(xié)議SOAP消息的封裝類,服務接口以及客戶端工廠類;利用客戶端代碼生成用于發(fā)布代理服務的服務端代碼,具體方法如下:調用客戶端代 碼中的服務接口,通過Java字符串拼裝生成服務端代碼。
5.如權利要求1所述的方法,其特征在于,通過調用ANT工具編譯上述代碼,構建WEB 服務。
6.如權利要求1所述的方法,其特征在于,所述方法進一步包括:在根據(jù)所述WSDL地 址生成源WEB服務的客戶端代碼和服務端代碼之前,先配置代理服務構建環(huán)境。
7.如權利要求1所述的方法,其特征在于,所述方法進一步包括:部署并發(fā)布WEB服 務,通過調用ANT工具將構建好的WEB服務部署至J2EE容器。
【文檔編號】H04L29/08GK103581310SQ201310507350
【公開日】2014年2月12日 申請日期:2013年10月24日 優(yōu)先權日:2013年10月24日
【發(fā)明者】冀晉星 申請人:深圳市遠行科技有限公司