Web Service工作原理及實例
一、Web Service基本概念
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格式來封裝各種不同類型的數據,並且發送到註冊中心或者由註冊中心來返回需要的數據。
二、調用原理
◆ Web服務提供者設計實現Web服務,並將調試正確後的Web服務通過Web服務中介者發佈,並在UDDI註冊中心註冊; (發佈)
◆ Web服務請求者向Web服務中介者請求特定的服務,中介者根據請求查詢UDDI註冊中心,爲請求者尋找滿足請求的服務; (發現)
◆ Web服務中介者向Web服務請求者返回滿足條件的Web服務描述信息,該描述信息用WSDL寫成,各種支持Web服務的機器都能閱讀;(發現)
◆ 利用從Web服務中介者返回的描述信息生成相應的SOAP消息,發送給Web服務提供者,以實現Web服務的調用;(綁定)
◆ Web服務提供者按SOAP消息執行相應的Web服務,並將服務結果返回給Web服務請求者。(綁定)
三、調用方式:
webservice 的調用有3種方式
1). httpget
2). httppost
3). httpsoap
soap 的優點是 可以傳遞結構化的 數據,而前兩種不行。
btw, soap 最終也是使用 HTTP 傳送 XM
Webservice實例
一、使用CXF開發Web Service服務端:
- package com.ywx;
- import javax.jws.WebService;
- @WebService
- public interface HelloWorld {
- String sayHi(String name);
- }
3、寫一個這個方法的實現類,方法也需要使用@WebService修飾,並指定其中的參數中,如下指定了所需要實現的接口、並指定服務名稱。
- package com.ywx.impl;
- import java.util.Date;
- import javax.jws.WebService;
- import com.ywx.HelloWorld;
- @WebService(endpointInterface="com.ywx.HelloWorld",serviceName="HelloWorldWs")//指定webservice所實現的接口以及服務名稱
- public class HellowWorlds implements HelloWorld{
- @Override
- public String sayHi(String name) {
- return name+"您好!現在時間是:"+new Date();
- }
- }
- package com.ywx.lee;
- import javax.xml.ws.Endpoint;
- import com.ywx.HelloWorld;
- import com.ywx.impl.HellowWorlds;
- public class ServiceMain {
- public static void main(String args[]){
- HelloWorld hw = new HellowWorlds();
- //調用Endpoint的publish方法發佈Web Service
- Endpoint.publish("192.168.1.7/vashon", hw);
- System.out.println("Web Service暴露成功!");
- }
- }
然後運行瀏覽器,輸入:http://192.168.1.7/vashon?wsdl 查看結果,如果成功生成如下wsdl文檔則表示Web Service暴露成功。
二、使用CXF開發Web Service客戶端:
- package com.ywx.test;
- import java.rmi.RemoteException;
- import com.ywx.HelloWorldProxy;
- public class TestService {
- public static void main(String args[]){
- HelloWorldProxy h = new HelloWorldProxy();
- try {
- String s = h.sayHi("yangwenxue");
- System.out.println("調webservice:"+s);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
- }
運行結果(傳入一個參數,調用Web Service返回的字符串結果如下):