cxf忽略客户端请求的命名空间

 最近在做ws的开发与对接,发现对接的客户发送的请求不带命名空间,而且还没有办法要求对方带命名空间。

所以只能在服务端来想办法了。


 刚开始在网上找下,发现其他同学也有同样的问题,但是没有发现有优雅的解决办法。而且cxf2.X和3.X版本对命名空间的

强制要求还不一样。例如:使用cxf2.X版本,服务端不做任何额外配置,就可以支持“客户发送的请求不带命名空间”。cxf3.X

不做一些额外配置,就玩不转了。


       现将跳坑的结果记录下,项目使用的是cxf3.X,需要添加一个服务端拦截器。代码如下:

public class ServerNameSpaceInterceptor extends AbstractPhaseInterceptor<Message> {

    public ServerNameSpaceInterceptor() 
   {
        super(Phase.RECEIVE);
    }

  
    @Override
    public void handleMessage(Message message) throws Fault {
        for (ServiceInfo si : message.getExchange().getService().getServiceInfos()) {
            si.setProperty("soap.force.doclit.bare",true); //这个就是忽略客户端不带命名空间的关键
        }
    }
}
     服务端发布时添加拦截器代码如下:

     

public class HelloServiceMain {
    public static void main(String[] args) {
        String address = "http://127.0.0.1:7777/test";
        EndpointImpl ep = (EndpointImpl)Endpoint.publish(address,new HelloServiceImpl());
        ep.getInInterceptors().add(new ServerNameSpaceInterceptor());
        System.out.println("发布消息成功");
    }
}

     

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值