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提供很多工具:

  • The command line
  • The Maven Plugin
  • With the WSDL2Java API

注意: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.

如何开发一个客户端?

     

相关推荐