- 浏览: 932307 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
CXF的Interceptor在每个请求响应之前或响应之后,做一些事情。这里的Interceptor就和Filter、Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供代码的内聚性。下面我们就看看CXF的Interceptor是怎么样工作的。
我们还是使用上一篇文章的工程,做一些添加与修改!
1、客户端的拦截器
在UserServiceClient.java添加拦截器
package com.wy.object.client; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.wy.object.Users; import com.wy.object.entry.User; import com.wy.object.server.IUserService; /** * 调用UserService客户端 * * @author Administrator * */ public class UserServiceClient { public static void main(String[] args) { // 调用WebService JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IUserService.class); factory.setAddress("http://localhost:8080/WebServiceCXF/services/IUserService"); // 拦截器 factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); IUserService service = (IUserService) factory.create(); //string System.out.println("@@@@@@@@@@@@@Client getUserByName@@@@@@@@@@@@@@"); User user = service.getUserByName("Jack"); System.out.println("Client: "+ user); user.setAddress("China-BeiJing"); //object JavaBean service.setUser(user); //传递集合的包装对象 List System.out.println("#############Client getUsers###################"); Users users = service.getUsers(4); System.out.println("Client: "+ users); List<User> tempUsers = new ArrayList<User>(); for (User u : users.getUsers()) { System.out.println("Client: "+ u); u.setName("Jack" + new Random().nextInt(100)); u.setAddress("Chian-BeiJing # " + new Random().nextInt(100)); tempUsers.add(u); } users.getUsers().clear(); users.getUsers().addAll(tempUsers); service.setUsers(users); //传递集合的包装对象 Array System.out.println("$$$$$$$$$$$$Client getUserArray$$$$$$$$$$$$$$$"); users = service.getUserArray(4); User[] userArr = new User[4]; int i = 0; for (User u : users.getUserArr()) { System.out.println("Client: "+ u); u.setName("Jack" + new Random().nextInt(100)); u.setAddress("Chian-ShenZhen # " + new Random().nextInt(100)); userArr[i] = u; i++; } users.setUserArr(userArr); service.setUserArray(users); //传递集合的包装对象 Map System.out.println("------------Client getUserMap----------------"); users = service.getUserMap(); System.out.println("Client: "+ users.getMaps()); users.getMaps().put("ABA", userArr[0]); service.setUserMap(users); } }
2、 刚才是客户端添加Interceptor,现在我们自己编写一个Interceptor,这个Interceptor需要继承 AbstractPhaseInterceptor,实现handleMessage和一个带参数的构造函数。然后在服务器端添加这个 Interceptor。
package com.wy.object.interceptor; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; @SuppressWarnings("unchecked") public class MessageInterceptor extends AbstractPhaseInterceptor { public MessageInterceptor(String phase) { super(phase); } @Override public void handleMessage(Message msg) throws Fault { System.out.println("############handleMessage##########"); System.out.println(msg); if (msg.getDestination() != null) { System.out.println(msg.getId() + "#" + msg.getDestination().getMessageObserver()); } if (msg.getExchange() != null) { System.out.println(msg.getExchange().getInMessage() + "#" + msg.getExchange().getInFaultMessage()); System.out.println(msg.getExchange().getOutMessage() + "#" + msg.getExchange().getOutFaultMessage()); } } }
发布服务和添加自定义拦截器的代码:
package com.wy.object; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import org.apache.cxf.phase.Phase; import com.wy.object.interceptor.MessageInterceptor; import com.wy.object.server.IUserService; import com.wy.object.server.impl.UserService; public class DeployInterceptorUserService { @SuppressWarnings("unchecked") public static void main(String[] args) throws InterruptedException { // 发布WebService JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); // 设置Service Class factory.setServiceClass(IUserService.class); factory.setAddress("http://localhost:8080/WebServiceCXF/services/IUserService"); // 设置ServiceBean对象 factory.setServiceBean(new UserService()); // 添加请求和响应的拦截器,Phase.RECEIVE只对In有效,Phase.SEND只对Out有效 factory.getInInterceptors().add(new MessageInterceptor(Phase.RECEIVE)); factory.getOutInterceptors().add(new MessageInterceptor(Phase.SEND)); factory.create(); System.out.println("Server start ......"); Thread.sleep(1000 * 60); System.out.println("Server exit "); System.exit(0); } }
DeployInterceptorUserService.java与DeployUserService.java在发布服务的略有不同:
以前发布WebService是用Endpoint的push方法。
这里用的是JaxWsServerFactoryBean和客户端调用的代码JaxWsProxyFactoryBean。
发表评论
-
WebService CXF --- 传输文件MTOM
2011-12-25 14:06 13182一、几个相关的概念 ... -
WebService CXF JAXB角色及简单使用
2011-12-24 22:23 3654WebService传递XML文档,当然也可以传递JSON对象 ... -
WebService CXF SOAP基本结构
2011-12-24 18:20 2084SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP ... -
WebService CXF WSDL描述
2011-12-24 18:16 1295原文http://www.ibm.com/develo ... -
Sping3+CXF Web应用
2011-12-24 00:21 1492一、准备环境 Apache Cxf 2.4.5 ... -
WebService CXF下的Service(URL, QName, WebServiceFeature[]) is undefined
2011-09-21 21:11 2698Service(URL, QName, WebServiceF ... -
WebService CXF 如何设置 timeout
2011-05-21 09:31 4377由于用CXF构建的webservice使用的是spring配置 ... -
让Apache CXF 支持传递java.sql.Timestamp和java.util.HashMap类型
2011-05-02 12:46 2483让Apache CXF 支持传递java.sql.Timest ... -
WebService CXF中传递复杂类型对象
2011-05-02 12:07 12977前面一篇文章介绍的都是传递简单的字符串,现在开始介绍传递复杂类 ... -
WebService CXF --- 由WSDL文件开发Client端
2011-04-30 17:49 3869WSDL文件:http://www.webxml.com.cn ... -
WebService CXF----JAX-RPC 与 JAX-WS
2011-04-30 10:00 4390Web服务: 1、SOAP 2、WSDL ... -
WebService CXF --- 创建基础的示例
2011-04-09 16:11 15751、开发环境: cxf-2.3.3 ... -
WebService CXF --- CXF简单介绍
2011-04-09 14:48 41781、WebService介绍 WebService让 ... -
Web Service中的XFire 传输List、Map 自定义对象
2011-04-05 09:14 7835简单记录XFire中怎么传输对象的实现,以备查阅;又不正确的地 ... -
一个基础的XFire WebService快速开发
2011-04-03 09:03 1564环境: XFire-1.2.6 JDK1.5 MyEcl ... -
axis和xfire以及CXF
2011-04-03 08:51 1548由于最近使用WebService,于是到网上疯狂搜索,找点资料 ...
相关推荐
总结起来,"CXF WebService带有拦截器"的实践是Web服务开发中的一个重要方面,它允许我们在不侵入核心业务逻辑的情况下,增加诸如权限控制这样的安全特性。通过"AuthFilter_Service"和"AuthFilter_Client",我们可以...
本篇将深入探讨CXF框架中的拦截器(Interceptor)及其在"webservice的cxf框架拦截器demo"中的应用。 拦截器在CXF中是一种强大的工具,它允许开发者在消息发送或接收的过程中插入自定义的行为。这在处理认证、日志...
标题:“CXF拦截器(Interceptor)的使用” 描述:“讲解了cxf实现拦截器的原因、核心API及使用方法” 在深入探讨CXF拦截器的使用之前,我们首先需要理解其在CXF框架中的核心作用与价值。Apache CXF是一个开源框架,...
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。在Web服务开发中,拦截器扮演着至关重要的角色,...总的来说,理解并熟练运用CXF拦截器对于任何CXF开发者来说都是一项重要的技能。
1. **创建拦截器类**:继承自CXF提供的相应拦截器基类,如`org.apache.cxf.interceptor.FaultInterceptor`或`org.apache.cxf.interceptor.ClientInterceptor`。 2. **覆盖关键方法**:如`handleMessage(Message)`或`...
在CXF服务端,你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptorChain`接口的类来创建自定义拦截器,并将它们添加到服务的拦截器链中。 4. **“inter_client”**: 这...
CXF拦截器是一种AOP(面向切面编程)的概念,它们是执行特定任务的独立单元,可以在消息传递的生命周期中不同阶段被调用。拦截器可以用来处理如认证、授权、日志记录、性能监控、数据转换等任务,增强了服务的功能和...
在Spring框架中,我们可以使用Spring的`@Bean`注解来配置CXF拦截器。首先,我们需要创建一个实现了`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.PhaseInterceptor`接口的类。这个类通常会包含处理...
本文将深入探讨"CXF拦截器-权限控制-登录校验"这一主题。 首先,我们需要了解什么是拦截器。在CXF框架中,拦截器是实现业务逻辑和基础架构之间解耦的一种方式。它们可以插入到服务调用的生命周期中,在消息发送前或...
在CXF中,自定义拦截器可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口来创建。 6. **安全性考虑**:通过客户端添加header并由服务端验证的方式,可以实现基于header的安全机制...
在WebServices/Controller Interceptor中,拦截器可以用于在处理请求前验证参数,或者在响应返回前添加额外的头部信息。这增加了代码的灵活性和可扩展性。 Sitemesh是一个网页布局框架,主要用于解决Web应用中的...
**CXF拦截器理论与应用** 在Web服务领域,Apache CXF是一个强大的开源框架,它提供了构建和消费SOAP和RESTful服务的能力。拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,...
在CXF中,拦截器可以插入到消息处理管道中,对请求和响应进行处理。 要为CXF客户端添加自定义拦截器,我们需要遵循以下步骤: 1. **创建拦截器类**:首先,创建一个实现了`org.apache.cxf.interceptor....
在开发基于CXF的Web服务时,为了确保系统的安全性和数据的完整性,通常需要对请求进行权限检查。本文将深入探讨如何为CXF服务器...在学习和应用这些知识时,结合实际案例和实践操作将有助于更好地掌握CXF拦截器的使用。
在这个主题中,我们将深入探讨CXF的Interceptor拦截器、处理复杂类型对象的传递以及如何结合Spring进行集成,最后我们将学习如何使用ANT工具快速构建和部署CXF工程。 1. CXF Interceptor拦截器: 拦截器是CXF框架...
1. **CXF Interceptors机制**:CXF采用了一种基于拦截器的架构,允许开发者在消息处理的不同阶段插入自定义的行为。这些拦截器可以被用来执行各种任务,比如安全检查、日志记录等。 2. **Logging Message**:CXF内部...
通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口,可以创建自定义拦截器,并在服务上下文中注册。 **四、CXF WebService 中传递复杂类型对象** CXF允许在Web服务中传递复杂类型的...
#### 三、CXF 对 Interceptor 拦截器的支持 CXF支持使用Interceptor来扩展服务行为,类似于Servlet中的Filter。Interceptor可以用来处理请求和响应消息的预处理和后处理操作。 1. **定义Interceptor**: - 继承`...
8. **拦截器和扩展性**:CXF通过拦截器(Interceptor)机制,允许开发者自定义行为,增强服务功能。拦截器可以在消息发送前或接收后执行特定操作,增强了框架的扩展性。 9. **测试与调试**:CXF提供了一些内置工具...
- `org.apache.cxf.interceptor.Interceptor`:处理消息的拦截器,提供了对请求和响应进行预处理和后处理的机制。 - `org.apache.cxf.frontend.ServerFactoryBean`和`ClientFactoryBean`:分别用于配置和创建服务器...