webservice之拦截器

记录一次webservice添加拦截器,来达到修改xml报文的目的

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;


 private  Soap createSoap() {
        service = new Service();
        soap = service.getServiceSoap();
        //拦截器改造报文头
        client = ClientProxy.getClient(soap);
        HeaderInInterceptor soapHeaderInInterceptor = new HeaderInInterceptor();
        soapHeaderInInterceptor.setHostUser("username", "password");
        client.getOutInterceptors().add(soapHeaderInInterceptor);
        return soap;
    }



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

    private String msg;


    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        try {
            List<Header> headers = message.getHeaders();
            QName qName = new QName("Authorization-My-Header");//需要增加的节点
            Document document = careteDocument(msg);
            Element documentElement = document.getDocumentElement();
            SoapHeader head = new SoapHeader(qName, documentElement);
            headers.add(head);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public void setHostUser(String username,String pw) {
        String  str = "<tem:AuthorizationSoapHeader soapenv:mustUnderstand=\"1\" xmlns:tem=\"http://tempuri.org/\" "
            + "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
            + "\t<tem:UserName>"+ username+"</tem:UserName>\n"
            + "\t<tem:Password>"+pw+"</tem:Password>\n"
            + "</tem:AuthorizationSoapHeader>";
        this.msg = str;
    }


    public static Document careteDocument(String xml) throws Exception {
        InputStream strm ;
        strm = new ByteArrayInputStream(xml.getBytes("UTF-8"));
        DocumentBuilderFactory domFactory = DocumentBuilderFactory
            .newInstance();
        domFactory.setNamespaceAware(true);
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        Document doc = builder.parse(strm);
        return doc;
    }
}

ps:一般来说,使用 “wsimport -clientjar {xxx.jar} -p {包名} -s {源码包名} {url}” 生成的客户端中,创建service都有无参和有参的方法

无参:每次去调用远端的URL来生成service

有参:将wsdl放在本地,通过url传入该方法,即可减少每次请求的网络开销

service = new Service(new URL("file://xxx/xxx.wsdl"));

 

 

转载于:https://www.cnblogs.com/number7/p/9291298.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值