CXF获取及传递Header数据

首先吐槽一句,网上的各位“大神”,你们的代码或者转载前都测试过吗?或者哪怕你说一下你的环境(版本)也好啊!

服务端获取Header数据

先说一说我的是什么Header数据(以下图片来自于soapUI工具,CXF包为3.2.5):

1、添加自定义Header数据

2、通过RAW模式查看我们的Header。非上图中XML代码中的<soap:Header>

OK,这就是我们自定义的Header。下面看看是怎么获取的。

public class ReadSoapHeader extends AbstractPhaseInterceptor<SoapMessage> {

    public ReadSoapHeader() {
        super(Phase.PRE_PROTOCOL);
        getAfter().add(SAAJInInterceptor.class.getName());
    }

    public void handleMessage(SoapMessage message) throws Fault {
    	TreeMap<String, ArrayList<Object>> tree = (TreeMap<String, ArrayList<Object>>) message.get(Message.PROTOCOL_HEADERS);
    	System.out.println("==============="+(tree.get("username").get(0)));
    }
}

是不是感觉很简单,对,没错,其实就是这么简单。至于我是怎么发现使用这种方式的?当然是万能的debug了,通过debug模式查看message里面到底有什么东西?

通过上面的debug我们可以看到message是Map模式,通过get(key),可以获得相应的值。再次发现key为Message.PROTOCOL_HEADERS,返回的是TreeMap型,而TreeMap的key就是我们定义的Header中的key,只是value是ArrayList类型。

虽然只是简单的问题,但是尽信书,不如无书啊。不要怀疑自己,有可能是方法不对!!!

客户端传递数据

同服务端一样的道理,在服务端在Map里面取,我们就在客户端往Map里面塞数据:

public class SoapHeaderInterceptor extends AbstractSoapInterceptor
{
    public SoapHeaderInterceptor()
    {
        super(Phase.WRITE);
    }

    public void handleMessage(SoapMessage message) throws Fault
    {
        TreeMap<String, ArrayList<String>> map = (TreeMap<String, ArrayList<String>>)message.get(Message.PROTOCOL_HEADERS);
        ArrayList<String> al = new ArrayList<String>();
        al.add("111");
        ArrayList<String> a2 = new ArrayList<String>();
        a2.add("222");
        map.put("username", al);
        map.put("password" , a2);
        
    }
}
    public static void main(String[] args) {
    	 URL wsdlURL = UserServiceService.WSDL_LOCATION;
        
    	 UserServiceService ss = new UserServiceService(wsdlURL, SERVICE_NAME);
    	 IUserService port = ss.getUserServicePort();  
         System.out.println("Invoking queryStations...");
         
         Client client = ClientProxy.getClient(port);
         client.getOutInterceptors().add(new SoapHeaderInterceptor());
        
         String user = port.getUser();
         System.out.println("user = " + user);

	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值