使用CXF開發簡單的Web Service-HelloWorld(二)

上篇博文我們介紹了Web Service的基本概念,瞭解它的基本概念之後,我們這篇博文介紹一個開源的WebService框架-Apache CXF,並實現一個HelloWorld實例。

一、開始之前

SOA目前已經成爲了人人皆知的熱點,SOA是面向服務的架構,SOA的重點在於服務的重用,即Service1+Service2+Service3,所有的組件都是“即插即用”的。SOA是由IBM提倡的架構,希望以“組裝電腦”的方式開發軟件。SOA涉及到兩個重要的技術:

  1. 各種提供服務的組件(web service)
  2. 企業服務總線(Enterprise Service Bus ——> ESB )(後面的博文介紹)

二、CXF介紹

CXF號稱是SOA框架,也是Apache旗下的開源框架,由Celtix + XFire這兩門經典的框架合成,是一套非常流行的web service框架。提供了對 JAX-WS 全面的支持,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,並且可以根據實際項目的需要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的發佈和使用。對於CXF的功能特性,以及支持標準,傳輸方式,不再過多的介紹,大家看一下網上的內容即可。

CXF下載地址:

下載地址

安裝CXF+配置:

  1. 下載CXF,將壓縮包解壓
  2. 找到bin目錄,例如:D:\apache-cxf-2.5.9\bin,將這個目錄配置到電腦的環境變量的path下。
  3. 驗證是否成功。
    在命令界面dos下,輸入wsdl2java,例如:
    這裏寫圖片描述

可以看到有相應的信息輸出,就是我們的命令缺少參數而已,表明可以執行這個命令,已經成功。

三、開發Web Service

1、開發準備

  1. jdk安裝
  2. eclipse開發環境
  3. CXF安裝+配置

2、服務器端

萬事俱備只欠東風,我們先開發服務器端。

1、目錄:
這裏寫圖片描述

每個WebService組建需要2個部分:接口和實現類。

2、服務器端的代碼:

接口:HelloWorld

package com.tgb.ws;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(String name);
}

實現類:

package com.tgb.ws.impl;

import java.util.Date;
import javax.jws.WebService;
import com.tgb.ws.HelloWorld;

@WebService(endpointInterface="com.tgb.ws.HelloWorld",
serviceName="HelloWorldWs")
public class HelloWorldWs implements HelloWorld {

    @Override
    public String sayHi(String name) {
        return name + ".您好" + "現在時間是:" 
        + new Date();
    }
}

接口和實現我們都寫好了,下面我們暴露我們的服務:

package service;

import javax.xml.ws.Endpoint;

import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;

public class ServerMain {

    public static void main(String[] args) {

        HelloWorld hw = new HelloWorldWs();

        //調用EndPoint的publish方法發佈WebService
        //調用Endpoint的publish方法發佈web service 第一個參數爲ip地址 ,第二v參數就是服務的提供者  
        Endpoint.publish("http://192.168.3.3:8989/crazyit", hw);

        System.out.println("WebService調用成功了");
    }
}

運行main方法,我們就可以發現我們暴露的服務了:
這裏寫圖片描述

由上圖我們已經成功的暴露服務,我們使用了WebService的註解,但是好像我們到現在還沒有使用CXF, 爲什麼呢?

因爲WebService是java的規範,CXF是WebService的實現。

3、服務器端小結

開發服務器端的步驟,總共分爲三步:
(1)開發一個Web Service業務接口。
該接口要用@WebService修飾
(2)開發一個Web Service實現類
實現類也需要用@WebService修改
(3)使用EndPoint類的靜態方法來發布WebService

3、客戶端

1、目錄
這裏寫圖片描述

2、使用CXF生成客戶端代碼
首先,新建java項目,在命令行窗口中,切換到此java項目src目錄。使用CXF的命令,wsdl2java+服務暴露地址?wsdl
這裏寫圖片描述

[注]生成客戶端代碼時,服務器端一定要運行,否則會保持,如下圖:
這裏寫圖片描述

3、客戶端代碼:

package client;

import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;

public class ClientMain {

    public static void main(String[] args) {
        HelloWorldWs hw = new HelloWorldWs();
        HelloWorld helloWorld = hw.getHelloWorldWsPort();
        System.out.println(helloWorld.sayHi("HelloWorld"));

    }
}

運行客戶端,如下圖:
這裏寫圖片描述

好的,恭喜你,我們已經成功的調用了我們的服務。

4、客戶端小結:

使用CXF開發Web Service客戶端得步驟也分三步:
(1)調用CXF提供的wsdl2java工具
WSDL-Web Service Definition Language任何語言實現了Web Service,都需要提供、並暴露WSDL文檔。
(2)找到wsdl2java所生成類中,一個繼承了Service的類。
該類的實例可當成工廠使用。
(3)調用Service子類的實例的getxxxPort方法,返回webService的代理。

總結:

恭喜你,使用CXF開發Web Service的簡單實例到此結束。

源碼下載

下篇博文,我們深入的講解WSDL文檔。

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