温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot调用第三方WebService接口的操作技巧

发布时间:2021-08-27 20:59:20 来源:亿速云 阅读:2004 作者:chen 栏目:开发技术

本篇内容主要讲解“SpringBoot调用第三方WebService接口的操作技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot调用第三方WebService接口的操作技巧”吧!

依赖

引入相关依赖:

<!-- webService-->  <dependency>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-starter-web-services</artifactId>   </dependency>   <!-- CXF webservice -->   <dependency>       <groupId>org.apache.cxf</groupId>       <artifactId>cxf-spring-boot-starter-jaxws</artifactId>       <version>3.2.1</version>   </dependency>   <dependency>       <groupId>org.apache.cxf</groupId>       <artifactId>cxf-rt-transports-http</artifactId>       <version>3.2.1</version>   </dependency>

浏览webService提供的方法,确定入参顺序 直接在浏览器里面访问url,如下

SpringBoot调用第三方WebService接口的操作技巧

用SoapUI工具

SpringBoot调用第三方WebService接口的操作技巧

用些是.asmx格式,也可以直接在浏览器访问。会列出方法列表

SpringBoot调用第三方WebService接口的操作技巧

代码

创建client:

package com.gqzdev.sctads.configuration; import com.gqzdev.sctads.constant.CommonConstant; import lombok.extern.slf4j.Slf4j; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /**  * @author gqzdev  * @date 2021/08/26 15:53  **/ @Configuration @Slf4j public class JaxWsClientConfig {     @Bean("JaxWsClient")     public Client client() {         // 创建动态客户端         JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();	//CommonConstant.PUBLIC_SECURITY_URL为连接的url,如http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl         log.info("publicsecurity webService url : {}", CommonConstant.PUBLIC_SECURITY_URL);         //创建client         Client client = clientFactory.createClient(CommonConstant.PUBLIC_SECURITY_URL);         HTTPConduit conduit = (HTTPConduit) client.getConduit();         HTTPClientPolicy policy = new HTTPClientPolicy();         policy.setAllowChunking(false);         // 连接服务器超时时间 10秒         policy.setConnectionTimeout(10000);         // 等待服务器响应超时时间 20秒         policy.setReceiveTimeout(20000);         conduit.setClient(policy);         return client;     } }

有了client,便可以直接注入调用invoke。找到自己需要调用的方法:
下面只展示一个方法的调用演示,其他的类似

package com.gqzdev.sctads.service.impl; import com.gqzdev.sctads.constant.CommonConstant; import com.gqzdev.sctads.service.PublicSecurityService; import lombok.extern.slf4j.Slf4j; import org.apache.cxf.endpoint.Client; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.xml.namespace.QName; /**  * @author gqzdev  * @date 2021/08/26 15:24  **/ @Slf4j @Component public class PublicSecurityServiceImpl implements PublicSecurityService {     @Autowired     @Qualifier("JaxWsClient")     private Client client;     /**      * 旅客登记      */     @Override //    @Async     public String chineseAddNew(Object... params) { //        QName qname = new QName("service.", CommonConstant.CHINESE_ADD);         try {             Object[] invoke = client.invoke(CommonConstant.CHINESE_ADD, params);             if (invoke != null && invoke.length >= 1) {                 String result = (String) invoke[0];                 log.info("userAddNew result: {}", result);                 return result;             }         } catch (Exception e) { //            e.printStackTrace();             log.error("invoke WS userAddNew method error: {}", e.getMessage());         }         return null;     }     }

使用post请求访问webservice接口

package com.gqzdev.sctads.service.impl; import cn.hutool.core.util.XmlUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.util.Map; /**  * 对接票务系统验证  *  * @author gqzdev  * @date 2021/08/25 17:07  **/ @Component @Slf4j public class TicketCheckServiceImpl implements TicketCheckService {     @Autowired     @Qualifier("nativeRestTemplate")     private RestTemplate restTemplate;     @Override     public boolean ticketCheck(TicketRequestVO ticketRequestVO) {         //构造请求参数xml         Map objMap = JSONObject.toJavaObject(JSONObject.parseObject(JSON.toJSONString(ticketRequestVO)), Map.class);         String objXml = XmlUtil.mapToXmlStr(objMap);         String requestXml = objXml.replace("<xml>", "<MQ_MESSAGE>").replace("</xml>", "</MQ_MESSAGE>");         log.info("ticket request params xml: {}", requestXml);         /**          * 调用webservice请求          */         HttpHeaders headers = new HttpHeaders();         //header参数         headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);         //请求参数         MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();         //接口参数         map.add("msg", requestXml);         //构造实体对象         HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);         //发送post请求webservice         String response = restTemplate.postForObject(CommonConstant.TICKET_REQUEST_URL, param, String.class);         log.info("ticket request response: {}", response);         /**          * 解析返回xml,返回是否认证成功          */         String responseXml = XmlUtil.unescape(response);         Map<String, Object> resultMap = XmlUtil.xmlToMap(responseXml);         TicketResponseVO ticketResponseVO = JsonUtil.map2pojo(resultMap, TicketResponseVO.class);         //0开闸 ,1不开闸         if (ticketResponseVO.getMQ_MESSAGE().getMSG_BODY().getCOMMAND() == 0) {             return true;         }         return false;     } }

到此,相信大家对“SpringBoot调用第三方WebService接口的操作技巧”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI