CXF学习(1)——CXF框架

文章目录

  • 一、简介
  • 二、详解

一、简介

Apache CXF是开源的,CXF是两个项目的结合:由IONA技术公司(现在是Progress的一部分)开发的Celtix和由Codehaus主持的团队开发的XFire,合并是由人们在Apache软件基金会共同完成的。CXF的名字来源于"Celtix"和"XFire"的首字母。
CXF是一个开源Service框架,支持多种协议:SOAP、XML/HTTP、RestfulHTTP和CORBA,同时可以和Spring集成。
下面是CXF的结构,看一看出CXF由以下几种组件构成

  • bus 总线
  • frontend 前端
  • messaging and interceptors 消息传递和拦截器
  • service model 服务模式
  • data bindings 数据绑定
  • protocol bindings 协议绑定
  • transport 传输

CXF学习(1)——CXF框架_第1张图片

二、详解


总线(BUS)
是CXF架构的主干,为共享资源提供了一个可配置的场所,作用非常类似于Spring的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展,可以方便地容纳自己的资源,或替换现有的资源。默认Bus实现是基于Spring的,通过依赖注入,将运行时组件串起来。Bus的创建由BusFactory负责,默认是 SpringBusFactory,对应于默认Bus实现。
在构造过程中,SpringBusFactory会搜索META-INF/cxf(就包含在 CXF的Jar中)下的所有Bean配置文件,根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。


消息传递和拦截器(messaging and interceptors )
CXF建立于一个通用的消息层之上,主要由消息、拦截器和拦截器链(InterceptorChain)组成。CXF是以消息处理为中心的,熟悉 JSP/Servlet的开发者可以将拦截器视为CXF架构中的“Filter”,拦截器链也与“FilterChain”类似。通过拦截器,开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个:handleMessage和handleFault,分别对应消息处理和错误处理。在开发拦截器的时候需要注意两点:
1)拦截器不是线程安全的,不建议在拦截器中定义实例变量并使用它。这一点跟JSP/Servlet中对于Filter的处理是一样的;
2)不要调用下一个拦截器的handleMessage或handleFault,这个工作由InterceptorChain来完成。


前端(Front End)
它为CXF提供了创建服务的编程模型,当前主要的前端就是JAX-WS。


服务模式(Service Model )
CXF中的服务通过服务模型来表示。它主要有两部分:ServiceInfo和服务本身。ServiceInfo作用类似WSDL,包含接口信息、绑定、端点(EndPoint)等信息;服务则包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建,它通过ServiceFactory来完成。


前端(Front End)
绑定提供了在传输之上映射具体格式和协议的方法,主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。


传输(Transport)
为了向绑定和前端屏蔽传输细节,CXF提供了自己的传输抽象。其中主要有两个对象:Conduit和Destination。前者是消息发送的基础,后者则对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver,以便在消息发送和接收时获得通知。

流程图:
CXF学习(1)——CXF框架_第2张图片
客户端:
CXF学习(1)——CXF框架_第3张图片
服务器
CXF学习(1)——CXF框架_第4张图片

你可能感兴趣的:(WebService)