SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

SpringBoot调webservice接口,一般都会给你url如:
http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl
http://10.103.6.158:35555/check_ticket/Ticket_Check.asmx
其中.asmx是.net开发提供的webservice服务。
依赖 引入相关依赖:

org.springframework.bootspring-boot-starter-web-servicesorg.apache.cxfcxf-spring-boot-starter-jaxws3.2.1org.apache.cxfcxf-rt-transports-http3.2.1

浏览webService提供的方法,确定入参顺序 直接在浏览器里面访问url,如下
【SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)】SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)
文章图片

用SoapUI工具
SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)
文章图片

用些是.asmx格式,也可以直接在浏览器访问。会列出方法列表
SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)
文章图片

代码 创建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@Slf4jpublic 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?wsdllog.info("publicsecurity webService url : {}", CommonConstant.PUBLIC_SECURITY_URL); //创建clientClient 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@Componentpublic class PublicSecurityServiceImpl implements PublicSecurityService {@Autowired@Qualifier("JaxWsClient")private Client client; /*** 旅客登记*/@Override//@Asyncpublic 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@Slf4jpublic class TicketCheckServiceImpl implements TicketCheckService {@Autowired@Qualifier("nativeRestTemplate")private RestTemplate restTemplate; @Overridepublic boolean ticketCheck(TicketRequestVO ticketRequestVO) {//构造请求参数xmlMap objMap = JSONObject.toJavaObject(JSONObject.parseObject(JSON.toJSONString(ticketRequestVO)), Map.class); String objXml = XmlUtil.mapToXmlStr(objMap); String requestXml = objXml.replace("", "").replace("", ""); log.info("ticket request params xml: {}", requestXml); /*** 调用webservice请求*/HttpHeaders headers = new HttpHeaders(); //header参数headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //请求参数MultiValueMap map = new LinkedMultiValueMap<>(); //接口参数map.add("msg", requestXml); //构造实体对象HttpEntity param = new HttpEntity<>(map, headers); //发送post请求webserviceString response = restTemplate.postForObject(CommonConstant.TICKET_REQUEST_URL, param, String.class); log.info("ticket request response: {}", response); /*** 解析返回xml,返回是否认证成功*/String responseXml = XmlUtil.unescape(response); Map 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; }}

XML相关操作 关于xml解析处理,这边推荐使用hutool里面的XmlUtil
到此这篇关于SpringBoot调用第三方WebService接口(.wsdl与.asmx类型 )的文章就介绍到这了,更多相关SpringBoot WebService接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读