由于在項目中需要多次調(diào)用webservice服務(wù),本文主要總結(jié)了一下java調(diào)用WebService常見的6種方式,即:四種框架的五種調(diào)用方法以及使用AEAI ESB進(jìn)行調(diào)用的方法。
數(shù)通暢聯(lián)內(nèi)部員工
廣大計算機(jī)愛好者
Web Service也叫xml Web Service: WebService是一種可以接收從Internet或者Intranet上的其它系統(tǒng)中傳遞過來的請求,輕量級的獨(dú)立的通訊技術(shù)。是通過SOAP在Web上提供的軟件服務(wù),使用WSDL文件進(jìn)行說明,并通過UDDI進(jìn)行注冊。
XML:(Extensible Markup Language)擴(kuò)展型可標(biāo)記語言。面向短期的臨時數(shù)據(jù)處理、面向萬維網(wǎng)絡(luò),是Soap的基礎(chǔ)。
Soap:(Simple Object access PRotocol)簡單對象存取協(xié)議。是XML Web Service 的通信協(xié)議。當(dāng)用戶通過UDDI找到你的WSDL描述文檔后,他通過可以SOAP調(diào)用你建立的Web服務(wù)中的一個或多個操作。SOAP是XML文檔形式的調(diào)用方法的規(guī)范,它可以支持不同的底層接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一個 XML 文檔,用于說明一組 SOAP 消息以及如何交換這些消息。大多數(shù)情況下由軟件自動生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一個主要針對Web服務(wù)供應(yīng)商和使用者的新項目。在用戶能夠調(diào)用Web服務(wù)之前,必須確定這個服務(wù)內(nèi)包含哪些商務(wù)方法,找到被調(diào)用的接口定義,還要在服務(wù)端來編制軟件,UDDI是一種根據(jù)描述文檔來引導(dǎo)系統(tǒng)查找相應(yīng)服務(wù)的機(jī)制。UDDI利用SOAP消息機(jī)制(標(biāo)準(zhǔn)的XML/HTTP)來發(fā)布,編輯,瀏覽以及查找注冊信息。它采用XML格式來封裝各種不同類型的數(shù)據(jù),并且發(fā)送到注冊中心或者由注冊中心來返回需要的數(shù)據(jù)。
通過soapUI工具使用四種WebService框架來生成客戶端代碼進(jìn)行調(diào)用,或者使用Xfire的jar包中的的Client類進(jìn)行調(diào)用,無需生成客戶端代碼,還可以使用AEAI ESB工具中的soup調(diào)用組件進(jìn)行調(diào)用。
soapUI-3.6.1:
soapUI是一個開源測試工具,通過soap/http來檢查、調(diào)用、實(shí)現(xiàn)Web Service的功能/負(fù)載/符合性測試。該工具既可作為一個單獨(dú)的測試軟件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。
Axis:
axis全稱Apache EXtensible Interaction System 即阿帕奇可擴(kuò)展交互系統(tǒng)。Axis本質(zhì)上就是一個SOAP引擎,提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。
Axis2:
Axis2是下一代 Apache Axis。Axis2 雖然由 Axis 1.x 處理程序模型提供支持,但它具有更強(qiáng)的靈活性并可擴(kuò)展到新的體系結(jié)構(gòu)。
Cxf:
Apache CXF = Celtix + XFire,開始叫 Apache CeltiXfire,后來更名為 Apache CXF 了,以下簡稱為 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,并且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,并且可以根據(jù)實(shí)際項目的需要,采用代碼優(yōu)先(Code First)或者 WSDL 優(yōu)先(WSDL First)來輕松地實(shí)現(xiàn) Web Services 的發(fā)布和使用。
Xfire:
XFire是新一代的Java Web服務(wù)引擎,XFire使得在JavaEE應(yīng)用中發(fā)布Web服務(wù)變得輕而易舉。
AEAI ESB
企業(yè)服務(wù)總線(Enterprise Service BUS,ESB)主要作為企業(yè)信息系統(tǒng)的“龍骨”來集成各業(yè)務(wù)系統(tǒng),實(shí)現(xiàn)異構(gòu)系統(tǒng)的互聯(lián)互通。沈陽數(shù)通暢聯(lián)軟件技術(shù)有限公司推出的ESB產(chǎn)品命名為AEAI ESB。
AEAI ESB主要包含三個模塊:服務(wù)器ESBServer、設(shè)計器ESBDesigner、管理控制中心。ESBServer是AEAI ESB的運(yùn)行環(huán)境,基于定制的Tomcat 擴(kuò)展開發(fā),管理控制中心則是部署在ESBServer的Java Web應(yīng)用,基于開發(fā)平臺構(gòu)建的。ESBDesigner是基于Eclipse Plugin開發(fā)的圖形化、拖拽式的設(shè)計Web服務(wù)、消息流程的構(gòu)建工具。
創(chuàng)建web服務(wù)
使用AEAI ESB創(chuàng)建一個簡單的接口(具體方法參見AEAI ESB集成平臺技術(shù)手冊5.2.7):樣例中的web服務(wù)入?yún)槿齻€數(shù)字,出參為三個數(shù)字相加得到的和。
soapUI工具配置
在soapUI中進(jìn)行相關(guān)配置,如圖:
在附件中有Apache文件夾,將文件夾放到指定路徑下,在如下圖進(jìn)行配置
將四種框架的地址填寫進(jìn)對應(yīng)的位置,還有jdk的位置,注意Xfire需要ANT的支持。
在soapUI的菜單欄中選擇Tools中的Axis 1.x選項
在(1)處填寫需要調(diào)用的web服務(wù)的URL
在(2)處填寫生成的客戶端代碼的位置
點(diǎn)擊(3)處按鈕生成客戶端代碼
在對應(yīng)的路徑下找到代碼文件
將代碼拷貝到自己新建的 工程目錄下
注意:出現(xiàn)缺包的錯誤時,將Apache中對應(yīng)框架的文件家中的lib包導(dǎo)入即可,新建一個Test類,其中對應(yīng)的測試調(diào)用代碼如下:
public class Test { public static void main(String[] args)throws Exception { AddAllNum_ServiceLocator locator = new AddAllNum_ServiceLocator(); AddAllNumSoapBindingStub stub = (AddAllNumSoapBindingStub)locator.getAddAllNumPort(); System.out.println(stub.addNum("1", "2", "3")); } } |
運(yùn)行結(jié)果:
在soapUI的菜單欄中選擇Tools中的Axis 2選項,如圖:
在(1)處填寫調(diào)用的接口的URL
在(2)處填寫生成代碼的位置
在(3)處填寫包名
在(4)處注意通過adb模式進(jìn)行生成
點(diǎn)擊(5)處的按鈕生成客戶端代碼
生成出來的代碼以及文件都添加到新建的調(diào)用服務(wù)的工程中
將生成的客戶端代碼放入到新建的工程中,導(dǎo)入對應(yīng)框架的包
新建Test類,對應(yīng)的調(diào)用代碼如下:
public class Test { public static void main(String[] args) throws Exception{ AddAllNumStub stub = null; stub = new AddAllNumStub(); AddAllNumStub.AddNum addNum = new AddAllNumStub.AddNum(); addNum.setNum1("1"); addNum.setNum2("2"); addNum.setNum3("3"); System.out.println(stub.addNum(addNum).getResult()); } } |
運(yùn)行結(jié)果:
在soapUI的菜單欄中選擇Tools中的CXF選項,如圖:
在(1)處填寫需要調(diào)用的URL
在(2)處填寫生成的代碼文件的位置
在(3)處填寫代碼的包名
點(diǎn)擊(4)處的按鈕生成客戶端代碼
將生成的代碼放到新建的工程中,導(dǎo)入CXF的包后在AddAllNum_Service.java中出現(xiàn)錯誤,將出錯的地方注釋,如圖
創(chuàng)建Test類,測試調(diào)用接口
對應(yīng)的測試調(diào)用代碼如下:
public class Test { public static void main(String[] args) throws Exception { URL wsdlLocation = new URL("http://localhost:9090/TestWebServices/services/AddAllNum?wsdl"); AddAllNum_Service addAllNum_Service = new AddAllNum_Service(wsdlLocation); AddAllNum addAllNum = addAllNum_Service.getAddAllNumPort(); String result = addAllNum.addNum("2","3","4"); System.out.println(result); } } |
運(yùn)行結(jié)果:
第一種調(diào)用方式:生成客戶端代碼進(jìn)行調(diào)用
在soapUI的菜單欄中選擇Tools中的XFire1.x選項,如圖:
在(1)處填入需要調(diào)用的web服務(wù)的URL
在(2)處填入生成客戶端代碼的位置
在(3)處填入生成的客戶端代碼的包名
在(4)處注意需要使用jaxb模式生成
點(diǎn)擊(5)處的按鈕生成客戶端代碼
將生成的代碼放到到新建工程下,導(dǎo)入Apache文件夾下的xfire-lib目錄下的包
創(chuàng)建Test類,對應(yīng)的調(diào)用方法:
public static void main(String[] args) { AddAllNumClient addAllNumClient = new AddAllNumClient(); String result = addAllNumClient.getAddAllNumPort().addNum("1", "2","2"); System.out.println(result); } |
運(yùn)行結(jié)果:
第二種調(diào)用方式:通過WSDl創(chuàng)建一個動態(tài)的客戶端
新建工程,引入XFire對應(yīng)的jar包(Apache目錄下的xfire-lib目錄中的包),注意此時需要在接口服務(wù)端的AddNum文件中添加一段代碼
@SOAPBinding(style=Style.RPC) |
重新部署工程,如下:
在新建的工程中的Test類中的調(diào)用,如下圖:
對應(yīng)的調(diào)用代碼,如下:
public class Test { public static void main(String[] args) throws MalformedURLException, Exception { String url = "http://localhost:9090/TestWebServices/services/AddAllNum?wsdl"; Client client = new Client(new URL(url)); String num1 = "2"; String num2 = "3"; String num3 = "4"; Object[] result = client.invoke("addNum",new Object[]{num1,num2,num3}); System.out.println(result[0]); } } |
運(yùn)行結(jié)果:
首先在接口工程上右鍵,設(shè)置ESB應(yīng)用
選擇WS引用,將WSDL的地址添加進(jìn)去,解析名稱、生成代理
在MF服務(wù)目錄下創(chuàng)建http消息流程TestSoupWeb
選擇數(shù)據(jù)適配器
在JavaInvoker1組件中選擇擴(kuò)展代碼,如圖:
public void invoke() throws AdapteException{ AddNum addNum = (AddNum) this.xgetVariable("addNum").getValue(); addNum.setNum1("1"); addNum.setNum2("2"); addNum.setNum3("3"); } |
SoapInvoker1組件選擇如圖:
然后HttpResponse節(jié)點(diǎn)選擇響應(yīng)內(nèi)容如圖:
在瀏覽器調(diào)用HttpRequest節(jié)點(diǎn)中的URL
運(yùn)行結(jié)果:
Apache目錄:四種Web服務(wù)框架以及Ant工具
WebService目錄:Web服務(wù)接口
Test目錄:文檔中涉及的四種框架五種調(diào)用的樣例客戶端工程
Sqls目錄:AEAI ESB需要使用的數(shù)據(jù)庫文件
Jdk目錄:存放了soapUI配置時需要用到的JDK
WebService服務(wù)調(diào)用方法介紹文檔及相關(guān)介質(zhì) 下載
新聞熱點(diǎn)
疑難解答