使用CXF为Web Service添加拦截器,自定义拦截器

拦截器分为Service端Client端

     拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理。分为CXF自带的拦截器自定义的拦截器

 

1、Service端:

通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现

  发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单。

 

部分代码:

UserService us = new UserServiceImpl();
String address = "http://192.168.10.254:9999/crazyit";
EndpointImpl ep = (EndpointImpl)Endpoint.publish(address , us);

//下面方法就可以添加拦截器(CXF提供的拦截器)
// cxf-2.2.10.jar  org.apache.cxf.interceptor.*  (CXF提供的拦截器)
ep.getOutInterceptors()
        .add( new LoggingOutInterceptor());
ep.getInInterceptors()
        .add( new LoggingInInterceptor());
ep.getInInterceptors()
        .add( new AuthIntercetpr()); //此 拦截器是自定义的 拦截器。

 

2、Client端
客户端可以通过对org.apache.cxf.frontend.ClientProxy中的getClient()方法获取
org.apache.cxf.endpoint.Client对象,该对象可以为客户端添拦截器。

部分代码
//为客户端添加拦截器
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(us);
client.getInInterceptors().add( new LoggingInInterceptor());
client.getOutInterceptors().add( new LoggingOutInterceptor());
//自定义拦截器
client.getOutInterceptors().add( new AddHeaderInterceptor( "crazyit"  , "crazyit.org2"));

 

3、自定义的拦截器

   自定义拦截器需要继承org.apache.cxf.phase.AbstractPhaseInterceptor 抽象类,并实现其handleMessage方法,与重写自定义的构造器(由于AbstractPhaseInterceptor 没有无参构造器,所以要在自定义构拦截器的造器中调用supper(带参数))。

部分代码
public class AuthIntercetpr
        extends AbstractPhaseInterceptor <SoapMessage>
{
        public AuthIntercetpr()
        {
                //子类总会调用父类的构造器,
                //默认是调用无参数的构造器。

                //指定该拦截器在哪个阶段被激发
                super(Phase.PRE_INVOKE);
        }

        //处理消息
        public void handleMessage(SoapMessage message)
        {
                System.out.println( "==================" + message);

                //获取SOAP消息的全部头
                List<Header> headers = message.getHeaders();

                if(headers.size() < 1)
                {
                        throw new Fault( new SOAPException( "SOAP消息头格式不对哦!"));
                             

                for(Header header : headers)
                {
                        SoapHeader soapHeader = (SoapHeader)header;
                        //取出SOAP的Header元素
                        Element element = (Element)soapHeader.getObject();
                        checkSOAPHeader(element);
                     
        }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值