springboot整合cxf调用websrevice,带上用户名和密码验证。

来源:互联网 发布:大数据魔镜 编辑:程序博客网 时间:2024/06/05 15:32

公司项目要与外部的webservice对接接口,网上看过很多springboot调用webservice的帖子,经过自己成功调用,现在分享推荐cxf的调用方式。


首先在pom文件中引入cxf的包。这里用的3.1.11,springboot的版本是1.4.0

<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxws</artifactId><version>3.1.11</version></dependency>

引入包后就可以直接调用了。具体调用方法如下:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(url);// 需要密码的情况需要加上用户名和密码 client.getOutInterceptors().add(new ClientLoginInterceptor(userNmae,pwd));Object[] objects = new Object[0];try {// invoke("方法名",参数1,参数2,参数3....);objects = client.invoke("bph_data_exchange",param,xml);String str  = objects[0].toString();System.out.println(str);


这里的url是webservice是wsdl地址,如果需要验证用户名和密码,需要设置安全验证拦截器,

拦截器内容如下:

import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;/** * 类说明 * 用于調用webservices接口的安全验证拦截器 * @author kim * @createDate 2017-10-20 下午8:53:16 * @version V1.0 */public class ClientLoginInterceptor extends AbstractPhaseInterceptor<SoapMessage>{    public ClientLoginInterceptor(String UserName, String UserPass)     {        super(Phase.PREPARE_SEND);          this.UserName = UserName;        this.UserPass = UserPass;    }    private String UserName;      private String UserPass;        public String getUserName() {return UserName;}public void setUserName(String userName) {UserName = userName;}public String getUserPass() {return UserPass;}public void setUserPass(String userPass) {UserPass = userPass;}public void handleMessage(SoapMessage soap) throws Fault     {        List<Header> headers = soap.getHeaders();        Document doc = DOMUtils.createDocument();        Element auth = doc.createElementNS("http://tempuri.org/","SecurityHeader");          Element UserName = doc.createElement("UserName");        Element UserPass = doc.createElement("UserPass");                UserName.setTextContent(this.UserName);        UserPass.setTextContent(this.UserPass);                auth.appendChild(UserName);        auth.appendChild(UserPass);                headers.add(0, new Header(new QName("SecurityHeader"),auth));    }}


拦截器的配置按照wsdl调用服务验证头信息来配置,这些信息从wsdl中可以找到。

到这里就大功告成了。接下来就是测试是否调用成功了。 


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 湘菜家常菜 湘菜做法 湘菜大全 湘菜菜单 湘菜特色 湘菜的做法 菜谱湘菜 好吃的湘菜 找湘菜厨师 湘菜厨师网 湘菜有哪些 湘菜食谱 湘菜厨师群 湘菜馆菜单 附近湘菜馆 学湘菜好吗 湘菜的菜谱 湘菜口味虾 湘菜木桶饭 湘菜网 著名湘菜 精品湘菜 滴水洞湘菜 湘菜大师 湘菜介绍 湘菜名字 湘菜辣吗 湘菜名菜 湘菜馆设计 湘菜原料 湘菜代表 湘菜下饭菜 经典湘菜100款 湘菜家常小炒菜谱大全 湘菜经典特色菜 湘菜经典小炒 湘菜馆特色菜 湘菜啤酒鸭做法 湘菜厨师培训班 渔家傲湘菜馆 湘菜的家常菜小炒