1. 程式人生 > >呼叫WebService的幾種方式

呼叫WebService的幾種方式

一、概覽

方式1:

HttpClient:可以用來呼叫webservie服務,也可以抓取網頁資料

版本1:HttpClient3.0.x

版本2:HttpClient4.x.x(目前最新4.5.2)

這2個版本的使用方式不一樣;變動較大

方式2:純java(自帶API)      jws

方式3:cxf框架

方式4:axis2框架

準備工作:

1.瞭解wsimport        java自帶的一個命令(建議使用jdk7,穩定支援)

作用:將wsdl檔案生成本地代理(java程式碼),方便呼叫

語法  wsimport [opations] <wsdl_uri>
    - wsdl_uri:wsdl 的統一資源識別符號
    - d  :指定要輸出的檔案的位置
    - s  :表示要解析java的原始碼 ,預設解析出的是class位元組碼 
    - p  : 指定輸出的包名
 
1.獲取服務路徑:比如
 http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL


2.獲取wsdl檔案.建議使用JDK1.6以上的版本的wsimport命令


進入dos的桌面:
方式1:wsimport http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
這種預設只會生成class,且會生成預設的包
方式2:生成原始碼,指定包和路徑
wsimport -s ./ -p cn.aa http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL


3.可以把class檔案打成jar包 jar cvf  test.jar  打包目錄

4.放在你的專案中進行呼叫:

  1. public static void main(String[] args) {  
  2.         MobileCodeWS mobileCodeWs=new MobileCodeWS();  
  3.         MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();  
  4.         String tel=mobileCodeWSSoap.getMobileCodeInfo("183735xxxx",null);  
  5.         System.out.println(tel);  
  6.     }  


2.規範瞭解

JAVA 中共有三種WebService 規範,分別是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。

1. Jaxws(掌握)

JAX-WS  的全稱為 Java API for XML-Based Webservices ,早期的基於SOAP 的JAVA 的Web 服務規範JAX-RPC(Java API For XML-RemoteProcedure Call)目前已經被JAX-WS 規範取代。從java5開始支援JAX-WS2.0版本,Jdk1.6.0_13以後的版本支援2.1版本,jdk1.7

支援2.2版本。

 Jaxws開發的webservice傳輸soap協議。

2JAXM&SAAJ(瞭解)

JAXM(JAVA API For XML Message)主要定義了包含了傳送和接收訊息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是與JAXM 搭配使用的API,為構建SOAP 包和解析SOAP 包提供了重要的支援,支援附件傳輸等,JAXM&SAAJ 與JAX-WS 都是基於SOAP 的Web 服務,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向物件,實現起來你基本上不需要關心SOAP 的任何細節

3.  JAX-RS(掌握)

JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,由於推出的較晚,該規範(JSR 311,目前JAX-RS 的版本為1.0)並未隨JDK1.6 一起發行。

Rest定義可以自行搜尋

 jax-RS可以釋出 rest風格webservice,因為rest的webservice不採用soap傳輸,直接採用http傳輸,可以返回xml或json,比較輕量。

以後可能會流行Rest風格的


二、簡單例子

1.httpClient3.x.x   

此方式不需要wsimport命令

  1. // 通過Http-Client 框架來模擬實現 Http請求--get  
  2.     public static String getMobileCodeInfo1(String mobileCode, String userID)  
  3.             throws HttpException, IOException {  
  4.         HttpClient client = new HttpClient();  
  5.         GetMethod getMethod=new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="  
  6.                 + mobileCode + "&userID=" + userID);  
  7.         //執行,得到訊息碼  
  8.         int code = client.executeMethod(getMethod);  
  9.         System.out.println("訊息碼:"+code);  
  10.         String result="";  
  11.         if (code==HttpURLConnection.HTTP_OK) {  
  12.             //得到執行結果  
  13.              result = getMethod.getResponseBodyAsString();  
  14.             System.out.println(result);  
  15.         }  
  16.        return result;  
  17.     }  
  18.     // 通過Http-Client 框架來模擬實現 Http請求--post  
  19.     // 需要匯入3個jar包,本demo的jar包版本是3.1.0  
  20.     // 目前最新的是4.5.2,使用方式也發生了變化  
  21.     public static String getMobileCodeInfo2(String mobileCode, String userID)  
  22.             throws HttpException, IOException {  
  23.         // 輸入服務網址  
  24.         HttpClient client = new HttpClient();  
  25.         // GetMethod  
  26.         PostMethod post = new PostMethod(  
  27.                 "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");  
  28.         // 設定引數  
  29.         post.setParameter("mobileCode", mobileCode);  
  30.         post.setParameter("userID", userID);  
  31.         // client.setTimeout(newTimeoutInMilliseconds);  
  32.         // 執行,返回一個結果碼  
  33.         int code = client.executeMethod(post);  
  34.         System.out.println("結果碼:" + code);  
  35.         // 獲取xml結果  
  36.         String result = post.getResponseBodyAsString();  
  37.         System.out.println("結果:" + result);  
  38.         //釋放連線  
  39.         post.releaseConnection();  
  40.         return result;  
  41.     }  
  42.     // Post請求 :通過Http-Client 框架來模擬實現 Http請求  
  43.     //從xml中獲取請求引數  
  44.     //SOAP1.1方式  
  45.     //問題:soap怎麼定義,這裡已經返回接結果,但是沒有手機號資訊,也就返回的結果匹配,不知道為什麼  
  46.     //估計是配置檔案有問題  
  47.     //soap1.1  
  48.     @Test  
  49.     public void soap() throws Exception{  
  50.         HttpClient client=new HttpClient();  
  51.         PostMethod postMethod=new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
  52.         //3.設定請求引數  
  53.           postMethod.setRequestBody(new FileInputStream("D:/soap.xml")); //檔名自定義  
  54.           //修改請求的頭部  
  55.           postMethod.setRequestHeader("Content-Type", "text/xml; charset=utf-8");  
  56.         //4.執行請求 ,結果碼  
  57.         int code=client.executeMethod(postMethod);  
  58.         System.out.println("結果碼:"+code);  
  59.         //5. 獲取結果  
  60.         String result=postMethod.getResponseBodyAsString();  
  61.         System.out.println("Post請求的結果:"+result);  
  62.     }  
  63.     public static void main(String[] args) throws IOException {  
  64.         // getMobileInfo("13476699xxx", "");  
  65.         getMobileCodeInfo1("13476699xxx", "");//  
  66. //      getMobileCodeInfo2("13476699xxx", "");//   
  67.         //soap,利用xml傳輸引數  
  68.     }  
其中:請求引數封裝在soap.xml中

請求規範服務方會提供給你的

soap.xml請求內容如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <soap:Envelopexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  3.   <soap:Body>
  4.     <getMobileCodeInfoxmlns="http://WebXml.com.cn/">
  5.       <mobileCode>1347669xxxx</mobileCode>
  6.       <userID></userID>
  7.     </getMobileCodeInfo>
  8.   </soap:Body>
  9. </soap:Envelope>
httpClient4.x.x不做演示,感興趣的可以去查查,資料很多


2.java自帶API實現

     2.1 類釋出

          2.1.1 使用預設設定

  1. @WebService  
  2. //預設服務名會加上Service  
  3. public class PhoneInfoWS {  
  4. 相關推薦

    spring mvc 實現遠端服務呼叫方式

    org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 實現遠端服務呼叫 (1)httpinvoker方式 伺服器客戶端都是spring時推薦這種方式 服務端 必須要實現 bean實體類

    遠端呼叫方式

          在分散式服務框架中。最基礎的問題就是遠端服務是怎麼通訊的。首先來看看計算機系統網路通訊的基本原理。網路通訊須要做的就是將流從一臺計算機傳輸到另外一臺計算機,基於傳輸協議和網路IO來實現。當中傳輸協議有tcp、udp等等。tcp、udp都是在基於Socket概念上為某類應用場景而擴展出的傳輸協議。網

    函式宣告的方式,函式宣告與函式表示式的區別,函式呼叫方式

    函式宣告的幾種方式 三種 : 函式宣告(1),函式表示式(2~5),Function構造器(6) 1.function func1(a){}//函式宣告 2.var func2=function(b){}//函式表示式 3.var func3=function func4(

    python和C語言互相呼叫方式

    1 2 3 4 5 6 7 8 9 版權申明:本文為博主窗戶(Colin Cai)原創,歡迎

    呼叫WebService方式

    一、概覽 方式1: HttpClient:可以用來呼叫webservie服務,也可以抓取網頁資料 版本1:HttpClient3.0.x 版本2:HttpClient4.x.x(目前最新4.5.2) 這2個版本的使用方式不一樣;變動較大

    java開發webservice方式(轉)

    java開發webservice的幾種方式(轉) webservice的應用已經越來越廣泛了,下面介紹幾種在Java體系中開發webservice的方式,相當於做個記錄。 1.Axis2 Axis是apache下一個開源的webservice開發元件,出現的算是比較早了,也

    關於JAVA呼叫C++的方式和一些問題 UnsatisfiedLinkError

    關於JAVA呼叫C++的幾種方式和一些問題 java呼叫c++有幾種方式,1.JNA方式,2,JNative 方式,3.JNI 方式。: 1.JNA方式 public interface MyCLibrary extends Library {

    實現webservice方式

    1. 概念瞭解 WebService是兩個系統的遠端呼叫,使兩個系統進行資料互動,如應用:天氣預報服務、銀行ATM取款、使用郵箱賬號登入各網站等。 WebService之間的呼叫是跨語言的呼叫。Java、.Net、php,傳送Http請求,使用的資料格式是XML格式。

    Java呼叫Restful API介面方式

      2018年01月16日 22:18:40 Exceed Oneself 閱讀數:1968 摘要:最近有一個需求,為客戶提供一些Restful API 介面,QA使用postman進行測試,但是postman的測試介面與java呼叫的相似但並不相同,於是想自己

    C#呼叫C++類庫的方式

    1、  直接呼叫C++類庫中的公共方法 使用DllImport特性對方法進行呼叫,比如一個C++類庫SampleCppWrapper.dll中的公共方法: extern "C" __declspec(dllexport) int __stdcall Add(int n1, int

    C++ 呼叫com的方式

    1. 使用tlb 檔案:  #import "MyCom.tlb" CoInitialize(NULL); MyCom_iPtr ptr(__uuidof(MyCom));    //MyCom為實現類, 它實現了介面MyCom_i;    ptr->func();

    ios 呼叫私有方法的方式

    // 獲取例項方法 - (void)getMethods { int outCount = 0; Person *p = [Person new]; Method *methods = class_copyMethodList([p class], &

    cxf呼叫服務的方式

    客戶端匯入的包 方式一 JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClien

    java開發webservice方式

    webservice的應用已經越來越廣泛了,下面介紹幾種在Java體系中開發webservice的方式,相當於做個記錄。 1.Axis2 Axis是apache下一個開源的webservice開發元件,出現的算是比較早了,也比較成熟。這裡主要介紹Axis+eclipse開發

    Eclipse安裝svn插件的方式 轉帖....

    如果 version name feature help sin 鏈接 exe 文件 Eclipse安裝svn插件的幾種方式 1.在線安裝: (1).點擊 Help --> Install New Software... (2).在彈出的窗口中點擊add按鈕,輸

    解決瀏覽器跨域的方式

    doc cor 求和 對象 跨域 http onf 從服務器 console 1、什麽是跨域問題 在頁面中使用js訪問其他網站的數據時,就會出現跨域問題,比如在網站中使用ajax請求其他網站的天氣、快遞或者其他數據接口時,以及hybrid app中請求數據,

    前端跨域方式

    div ner dev 修改 ati hash 標簽 nbsp 端口 跨域問題的直接原因是瀏覽器存在同源策略,瀏覽器同源指的是:兩個頁面的協議、端口和主機相同,則兩個頁面具有相同的源。IE下滿足協議、主機相同,就認為是同源。 想象一下,如果沒有同源策略,誰都可以修改你站點

    Python 與 C/C++ 交互的方式

    pythonpython作為一門腳本語言,其好處是語法簡單,很多東西都已經封裝好了,直接拿過來用就行,所以實現同樣一個功能,用Python寫要比用C/C++代碼量會少得多。但是優點也必然也伴隨著缺點(這是肯定的,不然還要其他語言幹嘛),python最被人詬病的一個地方可能就是其運行速度了。這這是大部分腳本語言

    php中實現頁面跳轉的方式

    腳本 timeout location clas replace asc idt lee 實現 親測,not復制粘貼 PHP中實現頁面跳轉有一下幾種方式,看了幾個人寫的不是很條理,自己整理一下 在PHP腳本代碼中實現 <?php header("locati

    Java 修改編碼格式的方式

    格式 text cnblogs 修改 .com pac 方式 src -1 1、工作空間 workspase Window→Preferences→General→Workspace→Text file encoding→other→UTF-8 2、項目編碼格式 右鍵項目