WebService服務調用方法介紹

1 背景概述

因爲在項目中須要屢次調用webservice服務,本文主要總結了一下java調用WebService常見的6種方式,即:四種框架的五種調用方法以及使用AEAI ESB進行調用的方法。
java

2 預期讀者

  1. 數通暢聯內部員工web

  2. 廣大計算機愛好者數據庫

3 名詞解釋

Web Service也叫XML Web Service: WebService是一種能夠接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通信技術。是經過SOAP在Web上提供的軟件服務,使用WSDL文件進行說明,並經過UDDI進行註冊。
XML:(Extensible Markup Language)擴展型可標記語言。面向短時間的臨時數據處理、面向萬維網絡,是Soap的基礎。
Soap:(Simple Object Access Protocol)簡單對象存取協議。是XML Web Service 的通訊協議。當用戶經過UDDI找到你的WSDL描述文檔後,他經過能夠SOAP調用你創建的Web服務中的一個或多個操做。SOAP是XML文檔形式的調用方法的規範,它能夠支持不一樣的底層接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 文件是一個 XML 文檔,用於說明一組 SOAP 消息以及如何交換這些消息。大多數狀況下由軟件自動生成和使用。
UDDI (Universal Description, Discovery, and Integration) 是一個主要針對Web服務供應商和使用者的新項目。在用戶可以調用Web服務以前,必須肯定這個服務內包含哪些商務方法,找到被調用的接口定義,還要在服務端來編制軟件,UDDI是一種根據描述文檔來引導系統查找相應服務的機制。UDDI利用SOAP消息機制(標準的XML/HTTP)來發布,編輯,瀏覽以及查找註冊信息。它採用XML格式來封裝各類不一樣類型的數據,而且發送到註冊中心或者由註冊中心來返回須要的數據。

瀏覽器

4 實現思路

經過soapUI工具使用四種WebService框架來生成客戶端代碼進行調用,或者使用Xfire的jar包中的的Client類進行調用,無需生成客戶端代碼,還能夠使用AEAI ESB工具中的soup調用組件進行調用。
服務器

5 實現步驟

5.1 工具材料

  • soapUI-3.6.1:網絡

soapUI是一個開源測試工具,經過soap/http來檢查、調用、實現Web Service的功能/負載/符合性測試。該工具既可做爲一個單獨的測試軟件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用。框架

  • Axis:maven

axis全稱Apache EXtensible Interaction System 即阿帕奇可擴展交互系統。Axis本質上就是一個SOAP引擎,提供建立服務器端、客戶端和網關SOAP操做的基本框架。工具

  • Axis2:測試

Axis2是下一代 Apache Axis。Axis2 雖然由 Axis 1.x 處理程序模型提供支持,但它具備更強的靈活性並可擴展到新的體系結構。

  • Cxf:

Apache CXF = Celtix + XFire,開始叫 Apache CeltiXfire,後來改名爲 Apache CXF 了,如下簡稱爲 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,而且提供了多種 Binding 、DataBinding、Transport 以及各類 Format 的支持,而且能夠根據實際項目的須要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的發佈和使用。

  • Xfire:

XFire是新一代的Java Web服務引擎,XFire使得在JavaEE應用中發佈Web服務變得垂手可得。

  • AEAI ESB

企業服務總線(Enterprise Service BUS,ESB)主要做爲企業信息系統的「龍骨」來集成各業務系統,實現異構系統的互聯互通。瀋陽數通暢聯軟件技術有限公司推出的ESB產品命名爲AEAI ESB。
AEAI ESB主要包含三個模塊:服務器ESBServer、設計器ESBDesigner、管理控制中心。ESBServer是AEAI ESB的運行環境,基於定製的Tomcat 擴展開發,管理控制中心則是部署在ESBServer的Java Web應用,基於開發平臺構建的。ESBDesigner是基於Eclipse Plugin開發的圖形化、拖拽式的設計Web服務、消息流程的構建工具。

5.2 前置條件

  • 建立web服務

使用AEAI ESB建立一個簡單的接口(具體方法參見AEAI ESB集成平臺技術手冊5.2.7):樣例中的web服務入參爲三個數字,出參爲三個數字相加獲得的和。

wKiom1ZNMWfgOEWEAABo1qKNSvs304.png

  • soapUI工具配置

在soapUI中進行相關配置,如圖:

wKioL1ZNMdOhEDVfAAHjAv4LDVY877.png


wKiom1ZNMYCgi50qAAHqbkf6AWI323.png


在附件中有Apache文件夾,將文件夾放到指定路徑下,在以下圖進行配置

wKiom1ZNMabjmEoVAAIx1OxhinY118.png


將四種框架的地址填寫進對應的位置,還有jdk的位置,注意Xfire須要ANT的支持。

5.3 方法步驟

5.3.1 Axis框架

在soapUI的菜單欄中選擇Tools中的Axis 1.x選項

wKiom1ZNMcHDt9geAAHwKnxSyXw646.png


在(1)處填寫須要調用的web服務的URL
在(2)處填寫生成的客戶端代碼的位置
點擊(3)處按鈕生成客戶端代碼

wKioL1ZNMjXQQULdAAEbMIGsY4U358.png


在對應的路徑下找到代碼文件

wKiom1ZNMfeAxiUGAAIOSkolvfo825.png


將代碼拷貝到本身新建的 工程目錄下

wKioL1ZNMpKQi6PQAADaJo5Mdlg284.png


注意:出現缺包的錯誤時,將Apache中對應框架的文件家中的lib包導入便可,
新建一個Test類,其中對應的測試調用代碼以下:

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"));
    }
 
}
 

運行結果:

wKiom1ZNMmDjL6lxAAIAkTM-oK4538.png

5.3.2 Axis2框架

在soapUI的菜單欄中選擇Tools中的Axis 2選項,如圖:

wKioL1ZNMsvzLIPsAAIHjS4YH6M700.png


在(1)處填寫調用的接口的URL
在(2)處填寫生成代碼的位置
在(3)處填寫包名
在(4)處注意經過adb模式進行生成
點擊(5)處的按鈕生成客戶端代碼

wKiom1ZNMpHRVHL7AAEHCEnEiWQ421.png


生成出來的代碼以及文件都添加到新建的調用服務的工程中

wKioL1ZNMwDhXkLmAAGiruwIPZo598.png


將生成的客戶端代碼放入到新建的工程中,導入對應框架的包

wKiom1ZNMsaB3Yl1AADqev6kSfw873.png


新建Test類
,對應的調用代碼以下:

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());
    }
}
 

運行結果:

wKioL1ZNMzuB4eM6AAITZAMEyAc077.png

5.3.3 Cxf框架

在soapUI的菜單欄中選擇Tools中的CXF選項,如圖:

wKioL1ZNM1bg4GcHAAH-8POuP6s509.png


在(1)處填寫須要調用的URL
在(2)處填寫生成的代碼文件的位置
在(3)處填寫代碼的包名
點擊(4)處的按鈕生成客戶端代碼

wKiom1ZNMxuyJgNtAAExa4G8nrY098.png


將生成的代碼放到新建的工程中,導入CXF的包後在AddAllNum_Service.java中出現錯誤,將出錯的地方註釋,如圖

wKioL1ZNM4ShZjGkAAMwGRjw_rA898.png

建立Test類,測試調用接口

wKioL1ZNM6Oym9CxAAKTucouVvU869.png


對應的測試調用代碼以下:

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);
    }
}

運行結果:

wKiom1ZNM27zKRQcAAMmiCMMN-0411.png 

5.3.4 Xfire框架

  • 第一種調用方式:生成客戶端代碼進行調用

在soapUI的菜單欄中選擇Tools中的XFire1.x選項,如圖:

wKioL1ZNM9nx3pB6AAIJa_OeUIc594.png


在(1)處填入須要調用的web服務的URL
在(2)處填入生成客戶端代碼的位置
在(3)處填入生成的客戶端代碼的包名
在(4)處注意須要使用jaxb模式生成
點擊(5)處的按鈕生成客戶端代碼

wKiom1ZNM56QmyX8AAEOvl6AaQo610.png


將生成的代碼放到到新建工程下,導入Apache文件夾下的xfire-lib目錄下的包

wKioL1ZNNAvSC1mcAADDcHdtcT4935.png


建立Test類,對應的調用方法:


    public static void main(String[] args) {
        AddAllNumClient addAllNumClient = new AddAllNumClient();
        String result = addAllNumClient.getAddAllNumPort().addNum("1", "2","2");
        System.out.println(result);
    }

運行結果:

wKioL1ZNNG_QWnB6AAHgIKZpmwY547.png


  • 第二種調用方式:經過WSDl建立一個動態的客戶端

新建工程,引入XFire對應的jar包(Apache目錄下的xfire-lib目錄中的包),注意此時須要在接口服務端的AddNum文件中添加一段代碼

@SOAPBinding(style=Style.RPC)

從新部署工程,以下:

wKioL1ZNNR_hknpaAAGWTPXc4j0013.png


在新建的工程中的Test類中的調用,以下圖:

wKiom1ZNNN6gpPuRAADMTiNbFLM848.png


對應的調用代碼,以下:

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]);
    }
}

運行結果:

wKioL1ZNNUmAKjYOAAH6QBGoJ0c343.png

5.3.5 Aeai Esb調用

首先在接口工程上右鍵,設置ESB應用

wKiom1ZNNQzz3i1vAACpK1gP3Do075.png


選擇WS引用,將WSDL的地址添加進去,解析名稱、生成代理

wKiom1ZNNRzDh4MSAACxgyCeu4M970.png


在MF服務目錄下建立http消息流程TestSoupWeb

wKiom1ZNNTHSi2B-AACRVTJKvik134.png


選擇數據適配器

wKioL1ZNNZmyPgQrAAGQUv21Eeo959.png


在JavaInvoker1組件中選擇擴展代碼,如圖:


public void invoke() throws AdapteException{
        AddNum addNum = (AddNum) this.xgetVariable("addNum").getValue();
        addNum.setNum1("1");
        addNum.setNum2("2");
        addNum.setNum3("3");
    }
 

SoapInvoker1組件選擇如圖:

wKioL1ZNNbqh6VBYAAC8hvOppQA079.png


而後HttpResponse節點選擇響應內容如圖:

wKiom1ZNNXexFy4gAACuhmVbuZg255.png


在瀏覽器調用HttpRequest節點中的URL

wKiom1ZNNYmgFqg8AAHyVPATmpw532.png


運行結果:


wKiom1ZNNZvQ0yj7AADE6CVij7c050.png

6 附件及說明

Apache目錄:四種Web服務框架以及Ant工具
WebService目錄:Web服務接口
Test目錄:文檔中涉及的四種框架五種調用的樣例客戶端工程
Sqls目錄:AEAI ESB須要使用的數據庫文件
Jdk目錄:存放了soapUI配置時須要用到的JDK

WebService服務調用方法介紹文檔及相關介質                下載

相關文章
相關標籤/搜索