下面给大家介绍一下Interceptor的一个使用实例,如果通过Interceptor来获取CXF的性能数据。
我们知道CXF通过Interceptor处理着各种不同不样的消息信息,如果我们能在这些消息中设置时间戳信息,那我们就可以很容易地获取到这些消息在 不同地阶段处理所耗费的时间信息,通过对这些时间戳信息的处理,我们可以很容易就获取到CXF运行时的性能数据了。
接下来我们看看CXF中管理模块是如何来实现设置时间戳信息的。
首先我们简单回顾一下CXF的消息处理流机制:
对于CXF来说消息就像是水流一样流过一个一个的过滤器(Interceptor)。消息可以按照流入流出的方向分为InMessage和OutMessage;在消息处理过程中可能会出现这样那样的错误,而这些错误信息根据其流入流出方向分为InFaultMessage和OutFaultMessage。这些进出的消息通过Exchange相互关联起来。 这样的设计给我带来一个很大的好处就是我们客户端还是在服务器端可以复用相同的Interceptor,这给设计和使用以及配置Interceptor带来了很大得方便。
如何从Interceptor中获取性能数据?
所有的Interceptor需要实现 public void handleMessage(Message message) throws Fault; 这一方法,而Message就是我们前面提到的大杂货铺。我们只需要找到消息处理的合适时机设置好对应的时间戳信息MessageHandlingTimeRecorder,并把时间戳信息寄存在Message中就完成了一大半的基础工作了。同时为了对把这些时间信息进行统计分析,这里我们设计了一个CounterRepository,Interceptor可以通过CounterRepository提供的记时方法increaseCounter(ObjectName on, MessageHandlingTimeRecorder mhtr)实现计数功能。
接下来的就是我们如何设计我们的Perfromance Interceptors了。这里需要大家能对消息的流入流出情况有一个比较清楚的认识,这里包括了消息一般都需要经过哪些阶段 Phase的处理。客户端和服务器端对于流入流出消息的都是如何进行处理的,还有就是对于Request/Response的消息与Oneway的消息其处理流程也不太相同。在这里我就不一一罗列了。有兴趣的朋友可以看看
代码。
分享到:
相关推荐
总之,Apache CXF的Interceptor和Feature是强大的工具,它们帮助我们在不改变服务核心逻辑的情况下,轻松地扩展和定制服务行为。通过正确使用和结合这两种机制,我们可以实现更高效、更安全、更易于维护的服务架构。...
标题:“CXF拦截器(Interceptor)的使用” 描述:“讲解了cxf实现拦截器的原因、核心API及使用方法” 在深入探讨CXF拦截器的使用之前,我们首先需要理解其在CXF框架中的核心作用与价值。Apache CXF是一个开源框架,...
1. 创建拦截器:首先,我们需要创建自定义拦截器类,实现`org.apache.cxf.interceptor.Interceptor`接口或者其子接口,如`org.apache.cxf.interceptor.ClientInterceptor`或`org.apache.cxf.interceptor....
提供的压缩包文件名"WebService_CXF_Interceptor_Client_2"和"Webservice_CXF_Interceptor_Server_2"可能包含与CXF Web服务客户端和服务器端拦截器相关的示例代码或配置。通过查看这些文件,你可以更深入地理解如何...
你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.interceptor.MessageObserver`接口来自定义拦截器,并在CXF服务配置中进行添加。 2. CXF WebService中传递复杂类型对象: CXF允许在Web服务中...
这里的Interceptor就和Filter、Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供代码的内聚性。以HelloWorldService为例子。 参照网址:...
CXF提供了丰富的功能,包括服务端和客户端的拦截器(Interceptor)机制,使得开发者能对服务调用进行自定义处理,如权限控制和登录校验。本文将深入探讨"CXF拦截器-权限控制-登录校验"这一主题。 首先,我们需要...
import org.apache.cxf.interceptor.LoggingMessage; import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org....
你可以继承`org.apache.cxf.interceptor.FaultInterceptor`或`org.apache.cxf.interceptor.AbstractFaultInterceptor`类,并重写其`handleMessage`方法来插入自己的逻辑。然后,你需要在服务端或客户端的配置中注册...
拦截器是CXF框架中的一种重要机制,它们允许我们在消息被处理之前或之后插入自定义逻辑,例如认证、日志记录、事务管理等,其中权限检查是常见应用场景之一。 要创建自定义拦截器,我们需要遵循以下步骤: 1. **...
同时,`org.apache.cxf.interceptor.security.BasicAuthInterceptor`拦截器处理了实际的身份验证过程,它会检查收到的请求是否包含正确的认证信息。 工具方面,CXF提供了多种工具帮助开发者管理和调试服务,如CXF的...
ssh2-interceptor拦截器(权限管理).
3. **Spring集成**:在Spring3.2中,我们可以使用`<cxf:bus>`和`<cxf:interceptor>`标签将自定义拦截器注册到CXF Bus中。这样,Spring容器会管理拦截器的生命周期,并在需要时注入其他依赖。 4. **拦截器链**:CXF...
本篇将深入探讨CXF框架中的拦截器(Interceptor)及其在"webservice的cxf框架拦截器demo"中的应用。 拦截器在CXF中是一种强大的工具,它允许开发者在消息发送或接收的过程中插入自定义的行为。这在处理认证、日志...
【标题】:“Cxf例子Cxf例子我自己写的” 在IT领域,Apache CXF是一个非常流行的开源框架,用于构建和开发Web服务。CXF允许开发者利用Java编程语言来创建和使用Web服务,支持SOAP、RESTful等多种通信模式。本示例是...
例如,你可以创建一个实现了`org.apache.cxf.interceptor.FaultObserver`或`org.apache.cxf.interceptor.FaultInInterceptor`接口的拦截器类,然后在Spring配置文件中声明并添加到CXF的拦截器链中: ```xml ...
在这种情况下,寻找可靠的第三方资源获取CXF的jar包是必要的。CXF的jar包包含了运行和开发基于CXF的Web服务所需的所有类和库,包括核心服务、WS-*协议实现、数据绑定、以及HTTP传输等组件。 在压缩包“cxf3.1.1”中...
在“lib”目录下的文件,很可能是CXF框架的各种依赖库,包括但不限于以下组件: - CXF的核心库,提供基本的Web服务功能。 - JAXB(Java Architecture for XML Binding)库,用于XML数据和Java对象之间的转换。 - JAX...
接下来是CXF对Interceptor(拦截器)的支持。拦截器是一种强大的机制,可以在消息的发送和接收过程中插入自定义逻辑。它们可以用于日志记录、安全检查、性能监控等。在2.1.4版本中,你可以学习如何定义和配置拦截器...