博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apache-cxf测试webservice添加header信息
阅读量:6952 次
发布时间:2019-06-27

本文共 3400 字,大约阅读时间需要 11 分钟。

hot3.png

使用apache-cxf自动生成webservice本地类,有时需要在soap中添加header信息,如下面
youthflies
youthflies
我们可以在生成webservice client的时候,手动添加上我们需要的header信息。 新建一个
SoapHeaderInterceptor.java,内容如下:
package com.yeetrack.webservice;import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapHeader;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;import org.apache.cxf.headers.Header;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * @author youthflies * 自定义的soap拦截器,用来添加header信息 */public class SoapHeaderInterceptor extends AbstractSoapInterceptor{    public SoapHeaderInterceptor()    {        super(Phase.WRITE);    }    @Override    public void handleMessage(SoapMessage message) throws Fault    {        // TODO Auto-generated method stub           List headers=message.getHeaders();         headers.add(getHeader("username", "youthflies"));        headers.add(getHeader("password", "youthflies"));    }    //http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl    private Header getHeader(String key, String value)     {         QName qName=new QName("http://webservice.webxml.com.cn/", key);         Document document=DOMUtils.createDocument();         Element element=document.createElementNS("http://webservice.webxml.com.cn/", key);         element.setTextContent(value);         SoapHeader header=new SoapHeader(qName, element);         return(header);     }}
再给个有子节点的header例子:
public void handleMessage(SoapMessage arg0) throws Fault {    QName qName=new QName("http://yourdomain.com/");        Document doc = DOMUtils.createDocument();      Element root = doc.createElement("AuthenticationToken");      Element username = doc.createElement("username");      username.setTextContent("yeetrack.com");      Element password = doc.createElement("password");      password.setTextContent("yeetrack.com");      Element args = doc.createElement("someargs");      args.setTextContent("其他参数");      root.appendChild(username);      root.appendChild(password);      root.appendChild(args);      SoapHeader header = new SoapHeader(qName, root);        // 获取SOAP消息的全部头      List
headers = arg0.getHeaders(); headers.add(header); }
然后,再我们的测试case中,添加拦截器:
//实例化接口实现类   MobileCodeWS mobileCodeWS = new MobileCodeWS();   //实例化接口   MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();   Client client = ClientProxy.getClient(mobileCodeWSSoap);   client.getOutInterceptors().add(new SoapHeaderInterceptor());   //调用接口中的方法   System.out.println(mobileCodeWSSoap.getMobileCodeInfo("13898767654", ""));
依赖的jar包:
org.apache.cxf
cxf-rt-frontend-jaxws
2.7.4
org.apache.cxf
cxf-rt-bindings-soap
2.7.4
org.apache.cxf
cxf-rt-transports-http
2.7.4
org.apache.ws.security
wss4j
1.6.10
org.apache.cxf
cxf-rt-ws-security
2.7.5
效果如wireshark抓包:

转载于:https://my.oschina.net/u/147181/blog/164947

你可能感兴趣的文章
拖拽文件作为文件输入
查看>>
Eclipse设置智能提示
查看>>
SAP 生产订单变更管理 OCM Order Changement Management
查看>>
虚拟化这八年-【软件和信息服务】2014.11
查看>>
使用swfupload上传超过30M文件,使用FLASH上传组件
查看>>
OkHttp简介
查看>>
如何使用通用Mapper
查看>>
MYSQL建表语法(主键,外键,联合主键)
查看>>
linux基础-第十单元 系统的初始化和服务
查看>>
多线程的通信和同步(Java并发编程的艺术--笔记)
查看>>
Python格式化输出
查看>>
Linux使用du和df查看磁盘和文件夹占用空间
查看>>
java 消息机制 ActiveMQ入门实例
查看>>
CentOS 6.6 MySQL install
查看>>
从零开始用gulp
查看>>
android之Activity的生命周期
查看>>
hadoop2.4 支持snappy
查看>>
java 又一次抛出异常 相关处理结果演示样例代码
查看>>
STL 笔记(四) 迭代器 iterator
查看>>
2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】
查看>>