- 浏览: 50424 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
CXF旨在为服务创建必要的基础设施,它的整体架构主要由以下几个部分组成:
1.Bus
它是C X F架构的主干,为共享资源提供了一个可配置的场所,作用非常类似于S p r i n g的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展,可以方便地容纳自己的资源,或替换现有的资源。默认Bus实现是基于Spring的,通过依赖注入,将运行时组件串起来。Bus的创建由BusFactory负责,默认是 SpringBusFactory,对应于默认Bus实现。在构造过程中,SpringBusFactory会搜索META-INF/cxf(就包含在 CXF的Jar中)下的所有Bean配置文件,根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。
2.消息传递和拦截器(Interceptor)
CXF建立于一个通用的消息层之上,主要由消息、拦截器和拦截器链(InterceptorChain)组成。CXF是以消息处理为中心的,熟悉 JSP/Servlet的开发者可以将拦截器视为CXF架构中的“Filter”,拦截器链也与“FilterChain”类似。通过拦截器,开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个:handleMessage和handleFault,分别对应消息处理和错误处理。在开发拦截器的时候需要注意两点:
拦截器不是线程安全的,不建议在拦截器中定义实例变量并使用它。这一点跟JSP/Servlet中对于Filter的处理是一样的;
不要调用下一个拦截器的handleMessage或handleFault,这个工作由InterceptorChain来完成。
3.前端(Front End)
它为CXF提供了创建服务的编程模型,当前主要的前端就是JAX-WS。
4.服务模型
CXF中的服务通过服务模型来表示。它主要有两部分:ServiceInfo和服务本身。ServiceInfo作用类似WSDL,包含接口信息、绑定、端点(EndPoint)等信息;服务则包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建,它通过ServiceFactory来完成。
5.绑定(Binding)
绑定提供了在传输之上映射具体格式和协议的方法,主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。
6.传输(Transport)
为了向绑定和前端屏蔽传输细节,CXF提供了自己的传输抽象。其中主要有两个对象:Conduit和Destination。前者是消息发送的基础,后者则对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver,以便在消息发送和接收时获得通知。
CXF的拦截器是CXF功能最主要的扩展点。通过自定义的Interceptor,可以改动请求和响应的一些消息处理,其中最基本的原理还是一个动态代理。
Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块执行修改的情况下,动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Interceptor中对消息执行特殊处理,实现了很多主要功能模块,例如:日志记录,Soap消息处理,消息的压缩处理。
如果你想对CXF执行 扩展,建议你先从interceptor开始。
为了更好的学习和运用 CXF,最好先阅读官方的用户手册:
http://cwiki.apache.org/CXF20DOC/index.html
一、基本原理
下面看看CFX Interceptor在整个请求响应的处理流程 中所处的位置。
二、CFX Interceptor的核心API
先看拦截器核心包org.apache.cxf.interceptor的说明:Core interceptor interfaces which form the basis for message processing chains in CXF.
翻译:CXF消息处理链最基本的拦截器接口。
一下多个 的API的介绍和翻译来自互联网:
Interceptor
定义两个要领 ,一个处理消息 handleMessage, 一个是处理不正确 handleFault。别看Interceptor这么基本 ,这里须要 提醒留心的是,在执行具体的Interceptor的这两个要领中,千万别调用Interceptor内部的成员变量。这是由于Interceptor是面向消息来执行处理的,每个Interceptor都有可能运行在不同的线程中,如果调用了Interceptor中的内部成员变量,就有在Interceptor中造成临界资源的访问的情况,而这时的Interceptor也就不是线程安全的Interc eptor了。
在CXF中最常运用的Interceptor都放在cxf-rt-core中的org.apache.cxf.interceptor中,有兴趣的朋友可以研究一下。
InterceptorChain
单个的Interceptor功能有限,CXF要实现一个SOAP消息处理,须要将许许多多的Interceptor组合在一起运用。因此设计了 InterceptorChain,在我看了InterceptorChain就像是一个Interceptor的小队长。小队长有调配安置Interceptor的权力(add,remove),也有控制消息处理的权力(doInterceptor,pause,resume,reset,abort),同时也有交付不正确处理的权力( {getset}FaultObserver)。更有意思的是为灵活控制Interceptor的处理消息顺序(doInterceptStartingAt,doInterceptorStartingAfter),这也是InterceptorChain比较难理解的地点。
有兴趣的朋友可以跟踪一下,CXF的Client与Server之间通讯是走过哪些Interceptor,这些Interceptor是如何被调用的。
Fault
定义了CXF中的不正确 消息。
InterceptorProvider
这里定义了Interceptor的后备保证 部队。我们可以在InterceptorProvider中配置 In,Out,InFault,OutFault 后备小分队,添加我们所希望添加的Interceptor。而InterceptorChain会根据这些后备小分队,组建自己的小分队实例,完成具体的作战功能任务。
AbstractAttributedInterceptorProvider
InterceptorProvider实现的抽象类,由于这个类来继承了HashMap,我们可以像这个类中存储一些属性信息。
AbstractBasicInterceptorProvider
与AbstractAttributedInterceptorProvider不同,这个Interceptor只是基本实现了InterceptorProvider的功能,并不提供对其属性存储的扩展。
Message
由于Interceptor是针对Message来执行处理的,当你打开Message这个类文件时,你会发觉在Message中定义了很多常量,同时你还可以从Message中获取到很多与Message操作有关的信息。可以获取配置的对象有InterceptorChain Exchange Destination,还有获取配置 Content的泛型接口,是不是感觉Message和Bus差不多,都成了大杂货铺,一切与消息处理有关的信息都可以放在Message中。我想这也是咱CXF以Message处理为中心的设计思想的具体表现吧。
Exchange
和Message打交道就离不开Exchange。Exchange建立In/Out,InFault/OutFault Message 之间的联系。你可以从Exchange中获取到与消息传输有关的Conduit,Destination的信息,同时也可以配置和Session有关 的其他信息,以及知道能不能是OneWay的消息。
AbstractFeature
为了简化配置Interceptor的复杂操作,在这里配置了AbstractFeature,通过Feature我们可以向Bus,Client,Endpoint配置不同功能的Interceptor组。这样可以极大减轻我们配置文件的体积。
官方API网址:http://cxf.apache.org/docs/cxf-architecture.html
以上官方API地址以现发布时间为准 文档属于API翻译版,如有翻译错误,请大家见谅!
2013年5月20日15:15:34
[size=medium][size=x-small][/size][/size]
1.Bus
它是C X F架构的主干,为共享资源提供了一个可配置的场所,作用非常类似于S p r i n g的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展,可以方便地容纳自己的资源,或替换现有的资源。默认Bus实现是基于Spring的,通过依赖注入,将运行时组件串起来。Bus的创建由BusFactory负责,默认是 SpringBusFactory,对应于默认Bus实现。在构造过程中,SpringBusFactory会搜索META-INF/cxf(就包含在 CXF的Jar中)下的所有Bean配置文件,根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。
2.消息传递和拦截器(Interceptor)
CXF建立于一个通用的消息层之上,主要由消息、拦截器和拦截器链(InterceptorChain)组成。CXF是以消息处理为中心的,熟悉 JSP/Servlet的开发者可以将拦截器视为CXF架构中的“Filter”,拦截器链也与“FilterChain”类似。通过拦截器,开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个:handleMessage和handleFault,分别对应消息处理和错误处理。在开发拦截器的时候需要注意两点:
拦截器不是线程安全的,不建议在拦截器中定义实例变量并使用它。这一点跟JSP/Servlet中对于Filter的处理是一样的;
不要调用下一个拦截器的handleMessage或handleFault,这个工作由InterceptorChain来完成。
3.前端(Front End)
它为CXF提供了创建服务的编程模型,当前主要的前端就是JAX-WS。
4.服务模型
CXF中的服务通过服务模型来表示。它主要有两部分:ServiceInfo和服务本身。ServiceInfo作用类似WSDL,包含接口信息、绑定、端点(EndPoint)等信息;服务则包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建,它通过ServiceFactory来完成。
5.绑定(Binding)
绑定提供了在传输之上映射具体格式和协议的方法,主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。
6.传输(Transport)
为了向绑定和前端屏蔽传输细节,CXF提供了自己的传输抽象。其中主要有两个对象:Conduit和Destination。前者是消息发送的基础,后者则对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver,以便在消息发送和接收时获得通知。
CXF的拦截器是CXF功能最主要的扩展点。通过自定义的Interceptor,可以改动请求和响应的一些消息处理,其中最基本的原理还是一个动态代理。
Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块执行修改的情况下,动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Interceptor中对消息执行特殊处理,实现了很多主要功能模块,例如:日志记录,Soap消息处理,消息的压缩处理。
如果你想对CXF执行 扩展,建议你先从interceptor开始。
为了更好的学习和运用 CXF,最好先阅读官方的用户手册:
http://cwiki.apache.org/CXF20DOC/index.html
一、基本原理
下面看看CFX Interceptor在整个请求响应的处理流程 中所处的位置。
二、CFX Interceptor的核心API
先看拦截器核心包org.apache.cxf.interceptor的说明:Core interceptor interfaces which form the basis for message processing chains in CXF.
翻译:CXF消息处理链最基本的拦截器接口。
一下多个 的API的介绍和翻译来自互联网:
Interceptor
定义两个要领 ,一个处理消息 handleMessage, 一个是处理不正确 handleFault。别看Interceptor这么基本 ,这里须要 提醒留心的是,在执行具体的Interceptor的这两个要领中,千万别调用Interceptor内部的成员变量。这是由于Interceptor是面向消息来执行处理的,每个Interceptor都有可能运行在不同的线程中,如果调用了Interceptor中的内部成员变量,就有在Interceptor中造成临界资源的访问的情况,而这时的Interceptor也就不是线程安全的Interc eptor了。
在CXF中最常运用的Interceptor都放在cxf-rt-core中的org.apache.cxf.interceptor中,有兴趣的朋友可以研究一下。
InterceptorChain
单个的Interceptor功能有限,CXF要实现一个SOAP消息处理,须要将许许多多的Interceptor组合在一起运用。因此设计了 InterceptorChain,在我看了InterceptorChain就像是一个Interceptor的小队长。小队长有调配安置Interceptor的权力(add,remove),也有控制消息处理的权力(doInterceptor,pause,resume,reset,abort),同时也有交付不正确处理的权力( {getset}FaultObserver)。更有意思的是为灵活控制Interceptor的处理消息顺序(doInterceptStartingAt,doInterceptorStartingAfter),这也是InterceptorChain比较难理解的地点。
有兴趣的朋友可以跟踪一下,CXF的Client与Server之间通讯是走过哪些Interceptor,这些Interceptor是如何被调用的。
Fault
定义了CXF中的不正确 消息。
InterceptorProvider
这里定义了Interceptor的后备保证 部队。我们可以在InterceptorProvider中配置 In,Out,InFault,OutFault 后备小分队,添加我们所希望添加的Interceptor。而InterceptorChain会根据这些后备小分队,组建自己的小分队实例,完成具体的作战功能任务。
AbstractAttributedInterceptorProvider
InterceptorProvider实现的抽象类,由于这个类来继承了HashMap,我们可以像这个类中存储一些属性信息。
AbstractBasicInterceptorProvider
与AbstractAttributedInterceptorProvider不同,这个Interceptor只是基本实现了InterceptorProvider的功能,并不提供对其属性存储的扩展。
Message
由于Interceptor是针对Message来执行处理的,当你打开Message这个类文件时,你会发觉在Message中定义了很多常量,同时你还可以从Message中获取到很多与Message操作有关的信息。可以获取配置的对象有InterceptorChain Exchange Destination,还有获取配置 Content的泛型接口,是不是感觉Message和Bus差不多,都成了大杂货铺,一切与消息处理有关的信息都可以放在Message中。我想这也是咱CXF以Message处理为中心的设计思想的具体表现吧。
Exchange
和Message打交道就离不开Exchange。Exchange建立In/Out,InFault/OutFault Message 之间的联系。你可以从Exchange中获取到与消息传输有关的Conduit,Destination的信息,同时也可以配置和Session有关 的其他信息,以及知道能不能是OneWay的消息。
AbstractFeature
为了简化配置Interceptor的复杂操作,在这里配置了AbstractFeature,通过Feature我们可以向Bus,Client,Endpoint配置不同功能的Interceptor组。这样可以极大减轻我们配置文件的体积。
官方API网址:http://cxf.apache.org/docs/cxf-architecture.html
以上官方API地址以现发布时间为准 文档属于API翻译版,如有翻译错误,请大家见谅!
2013年5月20日15:15:34
[size=medium][size=x-small][/size][/size]
发表评论
-
JM总结
2017-01-11 10:41 5321、系统权限 时间戳,分配的key进行md5,动态的带过来 ... -
kafka
2016-05-26 15:25 360############################# S ... -
nginx+keepalive实现热切换部署
2015-09-04 20:53 0http://blog.csdn.net/e421083458 ... -
java中wait和sleep的区别
2015-03-01 21:26 0通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线 ... -
Synchronized和Static Synchronized区别
2015-03-01 18:50 0通过分析这两个用法的分析,我们可以理解java中锁的概念。 ... -
spring各版本下载导航
2015-02-11 14:29 0http://repo.spring.io/release/o ... -
参考博文
2015-02-06 14:59 0http://blog.csdn.net/ghsau/ar ... -
Struts2面试题
2015-02-06 11:15 0什么是Struts2Apache Struts2 ... -
Spring面试问题
2015-02-06 11:11 0什么是Spring?Spring是一个反转控制IOC和AO ... -
Java Collection集合面试题
2015-02-06 11:08 0Java集合Collection框架是什么?列出集合框架的一 ... -
Java企业系列面试题(集合篇)
2015-02-06 11:06 018 。什么是Java集合框 ... -
Java企业系列面试题(线程篇)
2015-02-06 11:05 011 。进程process和线程thread之间的区别是什么 ... -
Java企业系列面试题(基础篇)转
2015-02-06 11:04 0Java是一种基于类和面向对象的计算机编程语言。 面向对象的 ... -
多线程常见面试题
2015-02-06 11:00 0你有线程T1,T2和T3,你将如何确保线程T2运行后T1后, ... -
在Java中Lock接口比synchronized块的优势是什么
2014-12-18 18:21 3307http://blog.csdn.net/fw0124/a ... -
java join的用法
2014-12-18 18:13 559转自http://blog.csdn.net/anh ... -
解读dbcp自动重连那些事
2014-11-11 16:19 653数据库链接 常见的问题: 1. 数据库意外重启后 ... -
连接池未关闭问题的发现与解决
2014-11-11 16:18 1064最近项目上线,但是大下午的客服反应项目登录页面很慢,SA发 ... -
Log4j.properties配置详解
2014-11-10 17:40 571一、Log4j简介Log4j有三个主要的组件:Loggers ... -
spring aop中的propagation的7种配置的意思
2014-06-04 10:40 5161.前言。 在声明式的事务处理中,要配置一个切面,即一组方法 ...
相关推荐
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-2.2.10"版本是该框架的一个历史版本,发布于较早的时期。在本文中,我们将详细介绍如何安装和配置Apache CXF ...
在了解Apache CXF的文件目录结构以及所需JAR包之前,我们首先需要理解CXF的基本工作原理。 Apache CXF主要由以下几个组件构成: 1. **Bus**:这是CXF的核心,负责管理服务、消息处理器和其他组件。 2. **Endpoint**...
这个"apache-cxf-2.0.9-src"压缩包包含了CXF框架的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或者贡献代码到开源项目。 CXF这个名字是"CXF = XFire + Celtix"的组合,两个早期的Web服务框架合并而...
这个"apache-cxf-2.5.0.zip"压缩包包含了CXF框架的2.5.0版本,这是一个在2011年发布的稳定版本。CXF允许开发者以多种方式创建和消费Web服务,包括使用Java API for RESTful Web Services (JAX-RS) 和 Java API for ...
通过这个实例,初学者可以快速理解CXF的工作原理和基本操作。 接下来是CXF对Interceptor(拦截器)的支持。拦截器是一种强大的机制,可以在消息的发送和接收过程中插入自定义逻辑。它们可以用于日志记录、安全检查...
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和 Representational State Transfer(RESTful)应用程序。"apache-cxf-2.7.3"是该框架的一个特定版本,发布于2012年,提供了一系列功能和...
这个"apache-cxf-2.7.16.zip"开发工具包包含了CXF框架的版本2.7.16的所有组件和资源,便于开发者在项目中使用或学习。 CXF的核心功能是支持Web服务的实现,包括SOAP(Simple Object Access Protocol)和RESTful...
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个"apache-cxf-3.0.6-src.tar"文件是一个源代码压缩包,包含了Apache CXF 3.0.6版本的所有源代码。用户可以通过解压此文件来...
Apache CXF 是一个开源的Java框架,主要用于构建和部署Web服务。这个压缩包"apache-cxf-2.7.10"是Apache CXF的2.7.10版本,包含了该版本的所有组件和资源,使得开发者能够方便地在自己的项目中集成和使用CXF的功能。...
Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。这个"apache-cxf-3.1.8-src.zip"压缩包包含了CXF项目的源代码,是理解CXF工作原理、进行定制...
8. **WebService开发指南pdf**:这是一份全面的Web服务开发指南,可能详细阐述了Web服务的原理、标准、设计模式以及使用Apache CXF的步骤和技巧。它可能会帮助读者深入理解Web服务开发的各个方面,并提供实用的CXF...
这个名为"apache-cxf-2.7.3.rar"的压缩包包含了CXF框架的2.7.3版本,这是一个广泛使用的版本,提供了丰富的功能和良好的社区支持。在这个版本中,你可以找到用于创建、部署和消费Web服务的各种工具和库。 CXF的主要...
Apache CXF 是一个开源的Java框架,用于构建和部署Web服务。这个"apache-cxf-3.2.6.zip"压缩包包含了Apache CXF 3.2.6版本的所有组件和资源,使得开发者能够轻松地在Java环境中实现WebService接口开发。 Apache CXF...
5. **src目录**:包含了源代码,对于深入理解CXF的工作原理和进行自定义扩展非常有帮助。 6. **LICENSE和NOTICE文件**:记录了Apache CXF的许可信息和第三方库的版权信息。 使用Apache CXF进行Web服务开发,通常...
Apache CXF是一个开源的Web服务框架,它在Java社区中被广泛应用,特别是在构建SOAP和RESTful服务时。CXF源自两个著名的项目:XFire和 Celtix,它们在2006年合并形成了现在的Apache CXF。CXF这个名字代表了"Client ...
它是CXF框架的前身之一,在2006年XFire项目与Apache CX框架合并后形成了如今广泛使用的Apache CXF框架。XFire因其简单易用的特点,在当时成为了许多开发者学习WebService开发的首选框架。 #### 二、XFire与...
在"apache-cxf-3.2.0-src.zip"压缩包中,你可以找到CXF框架的源代码,这对于开发者来说非常有价值,因为它允许深入理解框架的工作原理,进行自定义扩展,或者对框架进行调试和优化。以下是这个版本可能包含的一些...