1. 程式人生 > >使用CXF開發簡單的Web Service-HelloWorld(二)

使用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文件。