分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

webservice之拦截器

发布时间:2023-09-06 02:03责任编辑:熊小新关键词: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"));

webservice之拦截器

原文地址:https://www.cnblogs.com/number7/p/9291298.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved