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"));

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM