提示:下面有代码请耐心阅读,代码以图片形式展现,个别图片由于尺寸的原因显示不清,可以点击图片在新窗口中打开以进行查看.
推荐文章:
简历群发器设计以及代码实现JDK6HTTP+DOM4j
Spring2.5注释语法(上)——Spring2.5注释驱动的IoC
Spring 2.5:Spring MVC中的新特性
注意:源码已经提供下载,解压缩之后先看readme.
1. 概述
CXF 继承了 Celtix XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding DataBindingTransport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
Apache CXF
是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAPXML/HTTPRESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTPJMS 或者 JBICXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
 
2.功能特性
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
1.
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAPBasic ProfileWS-AddressingWS-PolicyWS-ReliableMessaging WS-Security
2.Frontends
CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。
3.
容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。
4.
支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON CORBA
5.
支持多种标准:
 a.支持 JAX-WS JAX-WSAJSR-181 SAAJ
 b.
支持 SOAP 1.11.2WS-I BasicProfileWS-SecurityWS-AddressingWS-RM WS-Policy
 c.
支持 WSDL 1.1 2.0
 d.
支持 MTOM
6.
多种传输方式、BindingsData Bindings Format: 
 a.BindingsSOAPREST/HTTP
 b.Data Bndings
:目前支持 JAXB 2.0Aegis 两种,默认是 JAXB 2.0XMLBeansCastor JiBX 数据绑定方式将在 CXF 2.1 版本中得到支持;
 c.
格式(Format):XMLJSON
 d.
传输方式:HTTPServletJMS Jabber
 e.
可扩展的 API 允许为 CXF 增加其它的 Bindings,以能够支持其它的消息格式,比如:CSV 和固定记录长度。
7.
灵活部署
 a.轻量级容器:可在 Tomcat 或基于 Spring 的容器中部署 Services
 b.
集成 JBI:可以在如 ServiceMix, OpenESB or Petals 等等的 JBI 容器中将它部署为一个服务引擎;
 c.
集成 SCA:可以部署在如 Tuscany 之类的 SCA 容器中;
 d.
集成 J2EE:可以在 J2EE 应用服务器中部署 Services,比如:GeronimoJOnASJBossWebSphere Application Server WebLogic Application Server,以及 Jetty Tomcat
 e.
独立的 Java 客户端/服务器。
8.
支持多种编程语言
 a.全面支持 JAX-WS 2.0 客户端/服务器编程模型;
 b.
支持 JAX-WS 2.0 synchronousasynchronous one-way API's
 c.
支持 JAX-WS 2.0 Dynamic Invocation Interface (DII) API
 d.
支持 wrapped and non-wrapped 风格;
 e.
支持 XML messaging API
 f.
支持 JavaScript ECMAScript 4 XML (E4X) ,客户端与服务端均支持;
 g
通过 Yoko 支持 CORBA
 h.
通过 Tuscany 支持 SCA
 i.
通过 ServiceMix 支持 JBI
9.
代码生成
 a.Java to WSDL
 b.WSDL to Java

 c.XSD to WSDL

 d.WSDL to XML

 e.WSDL to SOAP

 f.WSDL to Service
 
3. 轻松与Spring集成
3.1 服务端
1. 定义WebService所需暴露的接口 : 接口中只有一个方法public String vote,只需在接口定义处添加@WebService注明此接口将要提供服务.
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第1张图片
 
2. 编写接口实现类 :vote 方法中判断username入参是否为Michael,如果是将返回重复投票
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第2张图片
3. 服务器端配置文件 : 需要注意两个地方,CXF所需的配置文件importSpring容器中,但所需的3个配置文件并不在工程里,而是在Spring容器初始化时自动创建,这里需要显示的将其import进来;
 
定义了一个Webservice的端点,其中id是其存放在Spring容器中的标识, implementor用于标注实现类, address提供服务的地址.
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第3张图片
 4.web.xml 配置 : web.xml中只需定义Spring容器的监听器,CXFServletCXFServlet mapping
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第4张图片
3.2 客户端
1. 客户端配置文件(仅供客户端使用Spring框架): 和服务器端得配置一样,也需要import相关CXF配置文件到Spring容器;同时还要使用定义客户端的bean,其中id为其存在Spring容器中的标识, serviceClassWebService暴露接口的完全限定名, address为提供服务的地址.
 
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第5张图片
2. 客户端调用(使用Spring容器): 只需创建Sping容器根据ID获取ISurveyService并调用所需方法
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第6张图片
3. 客户端调用(java语言客户端): 初始化代理工厂并将接口类型和服务地址设置近工厂类,就可获得所需服务
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第7张图片
3.3WSDL
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第8张图片
 
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第9张图片
下面将包结构和运行环境贴出来
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第10张图片
 
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第11张图片
其实最庞大的是他依赖的包
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第12张图片
Apache CXF2+Spring2.5轻松实现WebService[附源码]_第13张图片