zoukankan      html  css  js  c++  java
  • 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"));

  • 相关阅读:
    python路径相关
    python之json
    python之正则表达式备忘
    MD5 SHA1 HMAC HMAC_SHA1区别
    微信根据openid给用户发送图文消息
    最近做的几个小程序
    5000万pv小程序,高并发及缓存优化,入坑
    小程序 后台发送模板消息
    mysql 组合索引
    php 拆分txt小说章节保存到数据库
  • 原文地址:https://www.cnblogs.com/number7/p/9291298.html
Copyright © 2011-2022 走看看