zoukankan      html  css  js  c++  java
  • CXF获取及传递Header数据

    https://blog.csdn.net/lx0088/article/details/81321771

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

    服务端获取Header数据

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

    1、添加自定义Header数据

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

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

    1.  
      public class ReadSoapHeader extends AbstractPhaseInterceptor<SoapMessage> {
    2.  
       
    3.  
      public ReadSoapHeader() {
    4.  
      super(Phase.PRE_PROTOCOL);
    5.  
      getAfter().add(SAAJInInterceptor.class.getName());
    6.  
      }
    7.  
       
    8.  
      public void handleMessage(SoapMessage message) throws Fault {
    9.  
      TreeMap<String, ArrayList<Object>> tree = (TreeMap<String, ArrayList<Object>>) message.get(Message.PROTOCOL_HEADERS);
    10.  
      System.out.println("==============="+(tree.get("username").get(0)));
    11.  
      }
    12.  
      }

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

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

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

    客户端传递数据

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

    1.  
      public class SoapHeaderInterceptor extends AbstractSoapInterceptor
    2.  
      {
    3.  
      public SoapHeaderInterceptor()
    4.  
      {
    5.  
      super(Phase.WRITE);
    6.  
      }
    7.  
       
    8.  
      public void handleMessage(SoapMessage message) throws Fault
    9.  
      {
    10.  
      TreeMap<String, ArrayList<String>> map = (TreeMap<String, ArrayList<String>>)message.get(Message.PROTOCOL_HEADERS);
    11.  
      ArrayList<String> al = new ArrayList<String>();
    12.  
      al.add("111");
    13.  
      ArrayList<String> a2 = new ArrayList<String>();
    14.  
      a2.add("222");
    15.  
      map.put("username", al);
    16.  
      map.put("password" , a2);
    17.  
       
    18.  
      }
    19.  
      }
    1.  
      public static void main(String[] args) {
    2.  
      URL wsdlURL = UserServiceService.WSDL_LOCATION;
    3.  
       
    4.  
      UserServiceService ss = new UserServiceService(wsdlURL, SERVICE_NAME);
    5.  
      IUserService port = ss.getUserServicePort();
    6.  
      System.out.println("Invoking queryStations...");
    7.  
       
    8.  
      Client client = ClientProxy.getClient(port);
    9.  
      client.getOutInterceptors().add(new SoapHeaderInterceptor());
    10.  
       
    11.  
      String user = port.getUser();
    12.  
      System.out.println("user = " + user);
    13.  
       
    14.  
      }
  • 相关阅读:
    (2)javascript的基本语法、数据结构、变量
    (1)认识javascript
    CSS 浅析position:relative/absolute定位方式
    jquery实现下拉框多选
    Vue.js not detected
    手机代理调试Charles Proxy和Fiddler
    render函数之jsx应用
    vue组件通信方式(多种方案)
    点击页面空白处地方,隐藏弹窗
    css圆角不圆和1px方案
  • 原文地址:https://www.cnblogs.com/linus-tan/p/13680137.html
Copyright © 2011-2022 走看看