呼叫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.放在你的專案中進行呼叫:
- public static void main(String[] args) {
- MobileCodeWS mobileCodeWs=new MobileCodeWS();
- MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();
- String tel=mobileCodeWSSoap.getMobileCodeInfo("183735xxxx",null);
-
System.out.println(tel);
- }
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
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命令
- // 通過Http-Client 框架來模擬實現 Http請求--get
- public static String getMobileCodeInfo1(String mobileCode, String userID)
- throws HttpException, IOException {
- HttpClient client = new HttpClient();
- GetMethod getMethod=new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="
- + mobileCode + "&userID=" + userID);
- //執行,得到訊息碼
- int code = client.executeMethod(getMethod);
- System.out.println("訊息碼:"+code);
- String result="";
- if (code==HttpURLConnection.HTTP_OK) {
- //得到執行結果
- result = getMethod.getResponseBodyAsString();
- System.out.println(result);
- }
- return result;
- }
- // 通過Http-Client 框架來模擬實現 Http請求--post
- // 需要匯入3個jar包,本demo的jar包版本是3.1.0
- // 目前最新的是4.5.2,使用方式也發生了變化
- public static String getMobileCodeInfo2(String mobileCode, String userID)
- throws HttpException, IOException {
- // 輸入服務網址
- HttpClient client = new HttpClient();
- // GetMethod
- PostMethod post = new PostMethod(
- "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");
- // 設定引數
- post.setParameter("mobileCode", mobileCode);
- post.setParameter("userID", userID);
- // client.setTimeout(newTimeoutInMilliseconds);
- // 執行,返回一個結果碼
- int code = client.executeMethod(post);
- System.out.println("結果碼:" + code);
- // 獲取xml結果
- String result = post.getResponseBodyAsString();
- System.out.println("結果:" + result);
- //釋放連線
- post.releaseConnection();
- return result;
- }
- // Post請求 :通過Http-Client 框架來模擬實現 Http請求
- //從xml中獲取請求引數
- //SOAP1.1方式
- //問題:soap怎麼定義,這裡已經返回接結果,但是沒有手機號資訊,也就返回的結果匹配,不知道為什麼
- //估計是配置檔案有問題
- //soap1.1
- @Test
- public void soap() throws Exception{
- HttpClient client=new HttpClient();
- PostMethod postMethod=new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");
- //3.設定請求引數
- postMethod.setRequestBody(new FileInputStream("D:/soap.xml")); //檔名自定義
- //修改請求的頭部
- postMethod.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
- //4.執行請求 ,結果碼
- int code=client.executeMethod(postMethod);
- System.out.println("結果碼:"+code);
- //5. 獲取結果
- String result=postMethod.getResponseBodyAsString();
- System.out.println("Post請求的結果:"+result);
- }
- public static void main(String[] args) throws IOException {
- // getMobileInfo("13476699xxx", "");
- getMobileCodeInfo1("13476699xxx", "");//
- // getMobileCodeInfo2("13476699xxx", "");//
- //soap,利用xml傳輸引數
- }
請求規範服務方會提供給你的
soap.xml請求內容如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <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/">
- <soap:Body>
- <getMobileCodeInfoxmlns="http://WebXml.com.cn/">
- <mobileCode>1347669xxxx</mobileCode>
- <userID></userID>
- </getMobileCodeInfo>
- </soap:Body>
- </soap:Envelope>
2.java自帶API實現
2.1 類釋出
2.1.1 使用預設設定
- @WebService
- //預設服務名會加上Service
- public class PhoneInfoWS {
-
相關推薦
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、項目編碼格式 右鍵項目