一. 拦截器
在我们学习Java的征途中碰到了很多拦截器: Servlet中的Filter就是一个拦截器, Struts2中也有拦截器,.
CXF中的拦截器其基本原理还是使用动态代理, 我们可以在不对核心模块进行修改的情况下, 动态添加一些功能, 从而降低代码的耦合性.
二. CXF拦截器
CXF通过在Interceptor中对消息进行特殊处理, 实现了很多重要功能模块, 例如: 日志记录, soap消息处理, 消息的压缩处理.
下面我们使用一个例子介绍CXF Log拦截器:
1. 服务端添加日志拦截器:
public class MyServer {
public static void main(String[] args) {
HelloService helloService = new HelloServiceImpl();
EndpointImpl epi = (EndpointImpl)Endpoint.publish("http://localhost/sayHello", helloService);
epi.getInInterceptors().add(new LoggingInInterceptor()); // 添加服务器端in log拦截器
epi.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加服务器端out log拦截器
System.out.println("Web Service 暴露成功");
}
}