webService-----CXF之一

概覽:

      CXF是一個開源的WS開發框架,支持以Frontend的方式編程,支持JAX-WS和JAX-RS標準。支持多協議,如:SOAP,XML、HTTP,RESTfulHTTP,CORBA,支持多傳輸協議如:HTTP,JMS,JBI。主要是以下幾個方面:

  1. 支持 WS標準:CXF 支持多種WS標準,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
  2. Frontends:CXF 支持多種“Frontend”編程模型,CXF 實現了 JAX-WS API (遵循 JAX-WS 2.X TCK 版本),它也包含一個“simple frontend”允許客戶端和 EndPoint 的創建,而不需要 聲明註解。CXF 既支持 WSDL 優先開發,也支持從 Java 的代碼優先開發模式。
  3. 容易使用: CXF 設計得更加直觀與容易使用。有大量簡單的 API 用來快速地構建代碼優先的 WS,支持 JAX-WS API ,支持 Spring 2.X 更加簡化的 XML 配置方式,等等。
  4. 支持二進制和遺留協議:CXF 的設計是一種可插撥的架構,既可以支持 XML ,也可以支持非 XML 的類型綁定,比如:JSON 和 CORBA。

 

項目目標

總要:

  • 高性能
  • 可擴展
  • 簡單且容易使用

支持多種標準

  • 支持 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;
  • 支持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;
  • 支持 WSDL 1.1 、2.0;
  • 支持 MTOM;

多種傳輸方式、Bindings、Data Bindings 和 Format

  • Bindings: SOAP, REST/HTTP
  • Data bindings: 支持JAXB 2.x, Aegis, XMLBeans, SDO
  • Formats: XML, JSON, FastInfoset
  • Transports:傳輸支持 HTTP, Servlet, JMS
  • 擴展 API 允許爲CXF增加綁定,以增加對其它消息格式的支持,比如CORBA/IIOP

靈活部署

  • 輕量級容器:可在 Tomcat 或基於 Spring 的容器中部署 Services;
  • 集成 JBI:可以在如 ServiceMix, OpenESB or Petals 等等的 JBI 容器中將它部署爲一個服務引擎;
  • 集成 J2EE:可以在 J2EE 應用服務器中部署 Services,比如:Geronimo、JOnAS、JBoss、WAS 和 WL server,等等主流application server.
  • 獨立的 Java C/S。

支持多種編程語言

  • 全面支持 JAX-WS 2.X   C/S編程模型;
  • 支持 JAX-WS 2.X 同步,異步,單向API;
  • 支持 JAX-WS 2.X 動態調用接口(DII) API;
  • 支持 wrapped and non-wrapped 風格;
  • 支持 XML messaging API;
  • 支持 JavaScript 和 ECMAScript 4 XML (E4X) ,客戶端與服務端均支持;
  • 支持 CORBA;
  • 支持 SCA; (EclipseLink.Tanscany,不知道支持這些不。待查)
  • 支持 JBI ;

代碼生成

  • Java to WSDL;
  • WSDL to Java;
  • XSD to WSDL;
  • WSDL to XML;
  • WSDL to SOAP;
  • WSDL to Service;

 

 

 

 

爲什麼選擇CXF?

對WS開發而言,開發人員有很多選擇。那麼值得一問的問題是爲什麼我們選擇CXF呢?沒有什麼特別的順序,我們介紹一下爲什麼選擇CXF。

 

一,JAX-WS支持。

      CXF實現了JAX-WS的API,它使開發人員構建WS變得很容易。JAX-WS包括許多不同的方面:

  • 從WSDL生成JAVA代碼及從JAVA代碼中生成WSDL。
  • 提供API讓開發者創建服務端的簡單消息。
  • 提供原生的API讓開發者發送XML消息到服務端。
  •  更多......

二,Spring集成。

       Spring是CXF典型的成員。CXF支持Spring 2.0的XML標記符號,使得聲明Spring支持的內置的客戶端加入應用程序很簡單。

 

三,支持數據綁定。

      Aegis Databinding (2.0.x) 是我們自己的數據綁定庫,它使得從代碼開發的WS真的很容易。不像JAXB,根本不用聲明。同時支持很多數據類型,比如:Lists,Maps,Dates,等等都直接支持(right out of the box)。如果你正在構建一個一個典型的WS,你要做的真的很少,它就會完成跑起來。

 

四,RESTful服務支持。

    CXF藉助聲明 HTTP Binding支持RESTful的WS。使用URI模板和聲明就能綁定服務操作到任意的URL/verb中。比如,你可以用@Get@HttpResource("/customers/{id}")來聲明一個getCustom方法。然後CXF就會在這個URL上監聽GET請求,用{id}來定位一個服務參數。

 五,WS-*支持。

       CXF支持一系列的WS規範,包括WS-Addressing,WS-Policy,WS-ReliableMessaging及WS-Security。

 

六,Apache Licenced。

       因爲它在Apache支持下,使得它支持所有應用 。(不明白是麻意思,太吹了吧。)

 

 

如何開發一個服務?

CXF提供了很多種構建WS的選擇,這個嚮導給你一個快速的關於這些選擇的預覽,讓你很快熟悉CXF。

     主要內容是:

  • 不同類型的服務;
  • JAX-WS   JAVA中聲明服務;
  • JAX-WS   WSDL中聲明服務;
  • JAX-WS  提供者;
  • 簡單Frontend編程;
  • javascript

不同類型的服務

        CXF主要支持三種不同類型的服務:

  • SOAP本頁主要講創建SOAP方式的WS。
  • REST-ful 在這個地方描述: here.
  • CORBA

JAX-WS在JAVA中聲明服務

JAX-WS包括一系列的聲明,讓開發人員可以用聲明的方式構建服務。這些聲明在一個單獨的類中,包括一系列的操作。

這兒有個例子:

@WebService
public class Hello {
  public String sayHi(String name) {
    return "Hello " + name;
  }
}

JAX-WS包括很多其它聲明:

  • @WebMethod- 允許開發給方法重命名,擴展服務等等。
  • @WebParam- 允許開發人員重命名參數名,命名空間名,操作方向(輸入,輸出)等等。
  • @WebResult - 允許開發人員 更改服務調用的返回值。

數據從XML轉換成JAVA對象,反之亦然(學個詞vice versa),主要通過JAXB data-binding.

WS通過一或二種方式發佈:

  • JAX-WS  endpoint API
  • CXF  XML配置文件方式,比如<jaxws:endpoint ... />

JAX-WS在WSDL中聲明服務:

如果有現成的WSDL文件或者準備先寫WSDL文件,然後生成代碼,CXF提供很多工具:

注意:CXF約束WSDL支持WSI-BP,而非完全的WSDL1.1標準。

 

JAX-WS提供者:

 

JAX-WS提供者支持開發都創建基於消息級別的WS,而不是基於操作級別的WS。invoke操作既支持有效消息也支持包裝過的消息。比如 SOAP body和Soap envelope.

這兒有個例子:

 

@WebServiceProvider
public class HelloProvider {
  public Source invoke(Source request) {
    return ....;
  }
}

 

服務發佈還是通過前面說的二種方式。更多信息參看: Developing a JAX-WS Service

 

Simple Frontend方式:

有時候開發人員不想使用聲明,也不想使用JAX-WS的API,CXF提供了一種Simple Frontend的方式,幾乎允許開發人員使用任何類變成一個服務而沒有太多其它工作要做。

CXF使用JAXB作爲缺省的數據綁定方式,但開發人員也可以使用aegis數據綁定方式。

服務發佈的時候還是前面說的二種方式。不再重複說了。

javascript

CXF provides a Javascript module which allows you to build services in Javascript with the Java Rhino library. One advantage of this is that you can use E4X to interact more easily with the XML. For more information see the JavaScript page.

 

如何開發一個客戶端?

     

 

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