【WebService】使用CXF開發服務端與客戶端

前言

        基於現階段的Demo項目整理的CXF開發服務端與客戶端的基本步驟與解析。java

WebService

WebService是什麼

1. 基於Web的服務:服務器端整出一些資源讓客戶端應用訪問(獲取數據)web

2. 抽象的說,是一個跨語言、跨平臺的規範spring

3. 實際的說,是多個跨平臺、跨語言的應用間通訊整合的方案apache

以各個網站顯示天氣預報功能爲例: 服務器

         氣象中心的管理系統將收集的天氣信息並將數據暴露出來(經過WebService Server), 而各大站點的應用就去調用它們獲得天氣信息並以不一樣的樣式去展現(WebService Client)。網站提供了天氣預報的服務,但其實它們什麼也沒有作,只是簡單了調用了一下氣象中心服務器上的一個服務接口而已。框架

4. WebService的優勢:可以解決跨平臺,跨語言,以及遠程調用之間的問題。frontend

5. WebService的應用場合ssh

      a. 同一家公司的新舊應用之間maven

      b. 不一樣公司的應用之間,例如電商和物流之間的應用相互調用ide

      c.一些提供數據的內容聚合應用:天氣預報、股票行情

WebService預備知識

幾個重要術語

1.WSDL(web service definition language)

webservice定義語言, 對應.wsdl文檔, 一個webservice會對應一個惟一的wsdl文檔, 定義了客戶端與服務端發送請求和響應的數據格式和過程。

2.SOAP(simple object access protocal)

一種簡單的、基於HTTP和XML的協議, 用於在WEB上交換結構化的數據,在webservice中分爲請求消息和響應消息。

3.SEI(WebService EndPoint Interface)

webService服務器端用來處理請求的接口

4.CXF(Celtix + XFire)

一個apache的用於開發webservice服務器端和客戶端的框架

WebService開發

組成:一、服務端開發

           二、客戶端開發

使用CXF開發WebService服務器端口

首先說明開發步驟,而後詳細解析。

開發步驟:

  1. 新建maven項目,jre使用1.7(這裏用此Demo項目說明)
  2. 添加cxf依賴包(本項目中已添加,在下面列出)
  3. 根據規範,新建接口類,(本項目中是PersonService)
  4. 新建實現類(本項目中是PersonServiceImpl)
  5. 新建主類(本項目已經整合進SSH中)
  6. 調用接口地址: 以?wsdl結尾

解析(對應開發步驟):

  1. 以前已經說明,再也不敘述
  2. 在pom.xml中引入依賴以下:
<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-core</artifactId>
        <version>3.1.5</version>
    </dependency>
     
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.5</version>
    </dependency>
     
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>3.1.5</version>
    </dependency>
  1. .PersonService中的註解解析

@WebService 此註解用來標明此java類定義了personWebService的接口

  1. PersonServiceImpl的註解解析

@Service 註解表示會被spring管理,自動註冊到spring容器中

@WebService(endpointInterface ="cn.yangjieyu.service.PersonService")

endpointInterface屬性是指服務接口全路徑, 指定作SEI(Service EndPoint Interface)服務端點接口

@Component("personServiceImpl")

表示這個類是一個組件,會被spring管理

  1. 本項目中沒有主類,是將WebService與SSH整合,添加了cxf-servlet.xml配置文件

Jaxws:endpoint標籤訂義了提供服務者,address屬性表示具體的接口路徑。

jaxws:inInterceptors和jaxws:outInterceptors指系統日誌的入攔截器和出攔截器。

  1. 右擊項目,Run as ->Run on Server 即啓動項目,

訪問地址:http://localhost:8080/ssh2/webservice/,能夠看到Available SOAP services.

能夠點擊上圖中對應的WSDL訪問具體WebService接口。 效果以下:

下面是Demo主類,不在本項目中

發佈WebService的Demo主類以下:

package com.fzhiy.webservice;

import com.fzhiy.webservice.impl.HelloWorldImpl;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import org.apache.cxf.interceptor.LoggingInInterceptor;

import org.apache.cxf.interceptor.LoggingOutInterceptor;

public class Server {

              public static void main(String[] args) {

                            System.out.println("web service start");

                            HelloWorld implementor = new HelloWorldImpl();

                            String address = "http://localhost:8082/helloWorld";

//                        Endpoint.publish(address, implementor); // JDK實現

                            JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();

                            factoryBean.setAddress(address); // 設置暴露地址

                            factoryBean.setServiceClass(HelloWorld.class); // 接口類

                            factoryBean.setServiceBean(implementor); // 設置實現類

                            // 添加請求消息攔截器

                            factoryBean.getInInterceptors().add(new LoggingInInterceptor());

                            // 添加響應消息攔截器

                            factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());

                            factoryBean.create();

                            System.out.println("web service started");

              }

}

使用CXF開發WebService客戶端

這裏簡述開發步驟:

  1. 新建Maven項目做爲模擬客戶端
  2. 根據cxf提供的wsdl2java工具請求wsdl接口url生成代碼(前提:cxf已經配置好了Path)
  3. 在dos窗口進入客戶端項目路徑,使用命令wsdl2java http://localhost:8080/ssh2/webservice/personWebService?wsdl

      隨後在項目中生成了相應代碼

      4.編寫主類,運行

相關文章
相關標籤/搜索