webservice hello world

Web service是一個平臺獨立的跨語言、跨平臺,低耦合的,自包含的、基於SOAP(simple object access protocal)協議的可編程的web的應用程序,可遠程接口訪問。可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程序,用於開發分佈式的互操作的應用程序。

####1、WebService術語
再寫helloworld之前,我們先來介紹一下webService裏面的術語:

1) WSDL
網絡服務描述語言是Web Service的描述語言,它包含一系列描述某個web service的定義。後面我們會根據helloworld來分析它的結構層次,來了解webService的實現原理。

2) SOAP
SOAP(simple object access protocal),簡單對象訪問協議是交換數據的一種協議規範,是一種輕量的、簡單的、基於XML(標準通用標記語言下的一個子集)的協議,它被設計成在WEB上交換結構化的和固化的信息。

3) SEI

SEI(webservice endpoint interface),服務端口接口。基於SOAP的Java Web服務儘管可以只由單獨的Java類來實現,但是遵從最佳實踐原則,首先應該定義一個Java接口類,在此接口內聲明Web服務需要完成或實現的業務方法。通常這類接口被稱爲"SEI",即服務端點接口(Service Endpoint Interface)。

我們先來基於JDK的實現一個Webserivce的Helloworld,然後再來分析一下,Webservice的實現原理。

####2、創建Webservice-service項目

1) 項目結構

這裏寫圖片描述

2) UserService.Java

@WebService
public interface UserService {

    void sayHi(String username);

}

3) UserServiceImpl.Java

@WebService
public class UserServiceImpl implements UserService {

    @WebMethod
    public void sayHi(String username) {
        System.out.println("hi, " + username);
    }

}

4) Publish.Java

public class Publish {

    public static void main(String[] args) {
        String url = "http://localhost:8080/demo/hello";
        Endpoint.publish(url, new UserServiceImpl());
        System.out.println("webservice publish service success...");
    }

}

5) 發佈服務

啓動publish.Java文件。然後進入http://:8080/demo/hello?wsdl就會出現以下畫面:

這裏寫圖片描述

這個webservice遠程客戶端調用服務的基礎。如果你也能訪問那麼說明你的服務發佈成功了,我們後面再來分析這個xml文件。

####3、創建Webservice-client項目

1) 創建Webservice-client項目

使用maven創建webservice-client空項目,然後進入${webservice-client}/src/main/java.打開命令窗口,輸入wsimport -keep http://localhost:8080/demo/hello?wsdl就會生成客戶端調用代碼
調用。生成的項目結構圖如下:

這裏寫圖片描述

2) 調用遠程服務

添加test類UserServiceTest.Java進行遠程服務調用測試

public class UserServiceTest {

    public static void main(String[] args) {
        UserServiceImplService userService =  new UserServiceImplService();
        String hiWord = userService.getUserServiceImplPort().sayHi("carl");
        System.out.println(hiWord);
    }

}

運行結果如下:

這裏寫圖片描述

####4、分析WSDL

頂級元素爲definitions元素,表示這個是webservice的描述語言,然後裏面有以下幾種子元素:

#####1、types
Type(消息類型):數據類型定義的容器,它使用某種類型系統(如 XSD).首先我們來看一下types元素

這裏寫圖片描述

然後我們再打開schemaLocation裏面的地址:

這裏寫圖片描述

我們可以看到在type元素中定義了遠程服務暴露接口中

  1. 調用方法所需參數
  2. 調用方法的返回值類型

#####2、message
message:通信數據的抽象類型化定義,它由一個或者多個 part 組成.
這裏寫圖片描述
我們可以看到message元素中持有調用方法請求參數與返回值類型的引用。

#####3、portType
Port Type(端口類型):特定端口類型的具體協議和數據格式規範。
這裏寫圖片描述

#####4、binding
**Binding:**特定端口類型的具體協議和數據格式規範。
這裏寫圖片描述

#####5、service
Service:相關端口的集合,包括其關聯的接口、操作、消息等

這裏寫圖片描述

####5、請求流程

其實熟悉Spring IOC的朋友可以看出來,這個和Spring的bean配置是不是很類型。Webservice的調用調用就是操作暴露服務的Service的Service這個容器。然後再調用服務的port.就可以獲取到遠程服務,這樣就進行遠程調用了。

這裏寫圖片描述

請求的消息格式類型於:

<soap:…..>
	<sayHello>
	     <arg0>carl</arg0>
	</sayHello>
</soap>

然後返回的消息體類型於:

<sayHelloResponse>
	<return>hi, carl</return>
</sayHelloResponse>

這就是webservice的請求的整個過程了,現在清晰了嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章