一、有关调用CXF拦截器
1、拦截器概述
Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块进行修改的情况下,动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Interceptor中对消息进行特殊处理,实现了很多重要功能模块,例如:日志记录,Soap消息处理,消息的压缩处理。
在Interceptor定义了两个方法,一个处理消息 handleMessage, 一个是处理错误 handleFault。别看Interceptor这么简单,这里需要提醒注意的是,在实行具体的Interceptor的这两个方法中,千万别调用Interceptor内部的成员变量。这是由于Interceptor是面向消息来进行处理的,每个Interceptor都有可能运行在不同的线程中,如果调用了Interceptor中的内部成员变量,就有在Interceptor中造成临界资源的访问的情况,而这时的Interceptor也就不是线程安全的Interceptor了。
单个的Interceptor功能有限,CXF要实现一个SOAP消息处理,需要将许许多多的Interceptor组合在一起使用。因此设计了 InterceptorChain,在我看了InterceptorChain就像是一个Interceptor的小队长。 小队长有调配安置Interceptor的权力(add,remove),也有控制消息处理的权力(doInterceptor,pause,resume,reset,abort),同时也有交付错误处理的权力( {get|set}FaultObserver)。更有意思的是为灵活控制Interceptor的处理消息顺序(doInterceptStartingAt,doInterceptorStartingAfter),这也是InterceptorChain比较难理解的地方。
2、拦截器部署
①编写interceptor,在编写自己的拦截器时通常需要继承AbstractSoapInterceptor和AbstractPhaseInterceptor<Message>其中一个。但是两者有所区别:如果继承AbstractSoapInterceptor,则在你编写的拦截器中处理消息的方法(handleMessage)中处理的是消息为SoapMessage;如果继承AbstractPhaseInterceptor<Message>,则在你编写的拦截器中处理消息的方法(handleMessage)中处理的消息为Message。
②编写完interceptor后,需要在Spring XML中配置加载拦截器,配置如下:
通常需要用的拦截器有如下:一般消息的输入/输出,错误消息的输入/输出,以日志为例,配置如下:
注意:在实现自己的拦截器中要注意构造函数,在构造函数中我们要调用父级的构造函数(子类总会调用父类的构造器 //默认是调用无参数的构造器。)并且需要指定该拦截器在哪个阶段被激发(例:super(Phase.RECEIVE)—在接受到数据时),如不指定在什么时候激发,即使配置完成,拦截器也不会被激发发挥作用。这里会多次强调。
二、有关CXF 中的Handler
1、概述
熟悉AXIS编写WebService接口的人对Handler应用比较熟悉,在进行对接口的日志、安全等处理时常用到Handler。在CXF中也有Handler这个功能。
在Handler中可以通过SOAPMessageContext获取到SOAPEnvelope,因此在Handler中也可以进行添加日志、用户授权处理、其他安全方面的处理例如:数字签名、加密等,当然这些是基于XML加密和签名实现的。
2、Handler的部署
①编写Handler。在编写Handler时,通常需要继承实现SOAPHandler<SOAPMessageContext>接口,在继承实现这个接口时,会引入多个常用的方法,其中publicboolean handleMessage(SOAPMessageContext context)和publicboolean handleFault(SOAPMessageContext context)最为常用,第一个为对消息的处理,第二个为对错误消息的处理。
②编写完成Handler后,需要在Spring配置文件中添加Handler,是他能够在系统运行是能够运营。配置如下:
三、CXF拦截器和Handler的区别
两者没有太多差别,都是在消息处理的某些阶段处理对应的消息包。Handler是JAXWS中定义的扩展接口,而Interceptor是CXF 内部消息处理的核心部件。Interceptor可以调用Handler,而Handler不能调用Interceptor。例如CXF中有一个SOAPHandlerInterceptor就负责调用对应的SOAPHandler。
四、在CXF中有关继承intercepter的注意事项:
a)如果要实现一个自己的interceptor,需要继承CXF 中interceptor的抽象类,常用抽象类有AbstractSoapInterceptor和AbstractPhaseInterceptor<Message>在具体实现中可以根据自己的具体需要继承其中的一个。
B)在实现自己的拦截器中,根据需要继承其中一个,但是要注意构造函数,在构造函数中我们要调用父级的构造函数(子类总会调用父类的构造器 //默认是调用无参数的构造器。)并且需要指定该拦截器在哪个阶段被激发(例:super(Phase.RECEIVE)—在接受到数据时)。
相关推荐
在IT行业中,开发Web服务是常见的任务之一,用于构建分布式系统和实现跨平台的数据交换。MyEclipse作为一款强大的Java集成开发环境,提供了便捷的工具支持来创建、调试和部署Web服务。本篇文章将深入探讨如何使用...
用myeclipse如何建立webservice实例详解 图解
本项目基于Maven,采用Spring MVC和Apache CXF框架,实现了一个完整的WebService服务器,同时还涉及到了Interceptor(拦截器)和Sitemesh技术。下面我们将深入探讨这些技术及其在项目中的应用。 首先,Maven是一个...
本示例主要探讨如何在Android应用中利用kotlin的协程(Coroutines)和ksoap2库来实现对WebService的调用,并解决在API 30及以上版本中Handler过时的问题。 一、ksoap2库介绍 ksoap2是一个轻量级的开源库,专为...
Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细)
【WSDL详解(Webservice)】 Web服务描述语言(Web Services Description Language,简称WSDL)是一种基于XML的应用,主要用于描述Web服务的接口和其通信细节。WSDL文档定义了一组服务访问点,允许客户端通过这些点与...
【知识点详解】 Webservice是一种基于互联网的、能够进行互操作的应用程序接口标准,它允许不同系统之间交换数据和服务。在本文中,我们将深入探讨如何使用MyEclipse开发Webservice的实例,特别关注XFire框架。 1....
APS调用WEBservice方法详解已经通过测试,可以放心使用。
### WebService服务搭建详解 在本篇文章中,我们将详细介绍如何使用Apache Axis2来搭建WebService服务。Axis2是一款功能强大、灵活且高效的WebService框架,广泛应用于Java应用中的远程服务调用场景。本文旨在帮助...
WebService的核心技术包括SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)。本篇文章将详细介绍如何通过客户端...
在IT行业中,VB6.0(Visual Basic 6.0)是微软公司开发的一款经典编程环境,用于构建Windows桌面应用程序。而Web Service是一种基于互联网的、采用标准XML(Extensible Markup Language)进行通信的软件系统,它允许...
Java WebService是基于标准的SOAP(Simple Object Access Protocol)协议,用于实现不同系统间的数据交换。在本实例中,我们将详细讲解如何使用Java代码和XFire框架创建和测试一个简单的Web服务。 首先,XFire是一...
### WebService开发过程详解 #### 一、概述 本文将详细介绍如何使用Eclipse集成开发环境(IDE)结合Tomcat服务器及Axis框架来开发一个简单的WebService应用。对于初学者来说,这是一个很好的入门指南,通过本教程...
09.WebService核心技术之SOAP协议深入详解.
整个过程涉及了从创建业务逻辑封装到Web服务标准化的多个层面,要求开发人员对EBS架构有深入的理解,同时熟悉PL/SQL编程和Oracle Integration Repository的配置。这对于提升企业的信息化水平、优化业务流程具有重要...
由于它独立于平台且采用开放标准,因此能够促进不同操作系统和编程语言之间的互操作性。 **工作原理:SOAP(简单对象访问协议)** 在WebService的工作流程中,客户端通过HTTP协议向服务端发送一个SOAP包。SOAP包...
5. **调用天气预报Webservice**:天气预报Webservice通常提供特定的URL和方法,如GET或POST请求,以及需要传递的参数,如城市名。在Android中,我们可以通过Ksoap2的 SoapSerializationEnvelope 和 HttpTransportSE ...
【Java与.NET开发WebService详解大全】 在IT领域,WebService是一种基于标准协议(如SOAP和WSDL)的跨平台、跨语言的通信机制,允许不同系统间的应用进行交互。本篇文章将详细探讨使用Java和.NET(VB.NET为例)开发...