在web服務中,存在三個角色:服務提供者、服務請求者和服務中介,三者之間的關係如圖1-1所示:(摘錄自:
實現乙個完整的web服務包括以下步驟:
◆ web服務提供者設計實現web服務,並將除錯正確後的web服務通過web服務中介者發布,並在uddi註冊中心註冊; (發布)
◆ web服務請求者向web服務中介者請求特定的服務,中介者根據請求查詢uddi註冊中心,為請求者尋找滿足請求的服務; (發現)
◆ web服務中介者向web服務請求者返回滿足條件的web服務描述資訊,該描述資訊用wsdl寫成,各種支援web服務的機器都能閱讀;(發現)
◆ 利用從web服務中介者返回的描述資訊(wsdl)生成相應的soap訊息,傳送給web服務提供者,以實現web服務的呼叫;(繫結)
◆ web服務提供者按soap訊息執行相應的web服務,並將服務結果返回給web服務請求者。(繫結)
圖1-1
web service
的體系結構
注:wsdl的作用就是乙個web服務說明書。服務請求者根據此wsdl生成相應的soap訊息,服務提供者在收到soap請求訊息後,
進行服務的繫結。
以下**是在web.xml中的servlet配置
紅色**部分很重要,會在web容器啟動的時候載入相應的servlet。綠色部分為該服務的外部介面。以此找到相應的jax-ws.xml檔案(如下所示)
進而繫結到相關的相應的實現類cn.ujn.service.userservice中。客戶端傳送的soap請求訊息訊息體body中包含有客戶端所請求的方法名和引數資訊。
以下為客戶端封裝的soap訊息體(以json方式與服務端進行資料傳輸)(soap rerquest envelope):--
以下為soap1.1協議呼叫web服務
/**
* 通過soap1.1協議呼叫web服務
* * text/xml 這是基於soap1.1協議
* * @param wsdl wsdl路徑
* @param method方法名
* @param namespace命名空間
* @param headerparameters 頭引數
* @param bodyparameters 體引數
* @param isbodyparametersns 體引數是否有命名空間
* @return string
* @throws exception
*/public static string invokebysoap11(string wsdl, string method,
string namespace, mapheaderparameters,
mapbodyparameters, boolean isbodyparametersns)
throws exception
}//拼裝訊息體
// 輸入引數
if (bodyparameters != null) else }}
//測試用
system.out.println(sb.tostring());
//寫入soap訊息(相對於客戶端來說,使用的是out.write())
out.write(sb.tostring().getbytes());
//獲取伺服器端的相應
int code = conn.getresponsecode();
if (code == 200)
}conn.disconnect();
return soapofresult == null ? null : soapofresult.tostring();
}
注:在客戶端傳送soap請求訊息後便處於阻塞狀態。直至服務端返回狀態碼。
以下為服務端進行響應(soap response envelope):--
1客戶端接收到服務端發來的json資料後會進行相應的解析操作。如下:
// 將soap協議進行解析(dom解析只能用於解析xml文件型別,而soap訊息就是採用xml資料格式)
document doc = xmlutil.string2doc(result);
element ele = (element) doc.getelementsbytagname("return").item(0);
方法中使用到的string2doc()方法體如下:
public static document string2doc(string str)
try catch (exception e)
return document;
}
根據返回結果,客戶端再進行相應的處理。
以上是web服務的基本工作原理。在此感謝實驗室徐師兄的技術支援。
web service的執行過程
webservice執行過程 1.客戶通過wsdl的描述生成soap,通過http傳送到伺服器 2.伺服器解析soap,提取輸入資料,執行請求的函式,返回資料 3.把2的返回資料封裝成soap,傳送給客戶端 4.客戶端解析soap,並根據wsdl的描述封裝成響應物件 在webservice中,wsd...
Web Service執行過程的總結
web service執行過程的總結 前面幾篇部落格我們搞了2個dome,讓我們對webservice服務發布,呼叫 執行 有一定的了解,今天我們再系統的梳理下webservice執行過程。1.首先我們在webservice伺服器端開發webservice介面,然後用類實現介面,最後發布webser...
lambda高階高階 延遲執行
前面的整理我們也已經說到了,使用lambda表示式的主要原因是,將 的執行延遲到乙個合適的時間點。在使用lambda表示式的時候務必記住一點就是說lambda表示式都是延遲執行的。延遲執行 的原因有很多,具體的如下。1,在另外乙個執行緒中執行 2,多次執行 3,在某個演算法的正確時間點上執行 比如排...