SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類型)
SpringBoot調(diào)webservice接口,一般都會(huì)給你url如:
http://10.189.200.170:9201/wharfWebService/services/WharfService?wsdl
http://10.103.6.158:35555/check_ticket/Ticket_Check.asmx
其中.asmx是.net開發(fā)提供的webservice服務(wù)。
依賴
引入相關(guān)依賴:
<!-- 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提供的方法,確定入?yún)㈨樞?直接在瀏覽器里面訪問(wèn)url,如下
用SoapUI工具
用些是.asmx格式,也可以直接在瀏覽器訪問(wèn)。會(huì)列出方法列表
代碼
創(chuàng)建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() { // 創(chuàng)建動(dòng)態(tài)客戶端 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); //創(chuàng)建client Client client = clientFactory.createClient(CommonConstant.PUBLIC_SECURITY_URL); HTTPConduit conduit = (HTTPConduit) client.getConduit(); HTTPClientPolicy policy = new HTTPClientPolicy(); policy.setAllowChunking(false); // 連接服務(wù)器超時(shí)時(shí)間 10秒 policy.setConnectionTimeout(10000); // 等待服務(wù)器響應(yīng)超時(shí)時(shí)間 20秒 policy.setReceiveTimeout(20000); conduit.setClient(policy); return client; } }
有了client,便可以直接注入調(diào)用invoke。找到自己需要調(diào)用的方法:
下面只展示一個(gè)方法的調(diào)用演示,其他的類似
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請(qǐng)求訪問(wèn)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; /** * 對(duì)接票務(wù)系統(tǒng)驗(yàn)證 * * @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) { //構(gòu)造請(qǐng)求參數(shù)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); /** * 調(diào)用webservice請(qǐng)求 */ HttpHeaders headers = new HttpHeaders(); //header參數(shù) headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //請(qǐng)求參數(shù) MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); //接口參數(shù) map.add("msg", requestXml); //構(gòu)造實(shí)體對(duì)象 HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers); //發(fā)送post請(qǐng)求webservice String response = restTemplate.postForObject(CommonConstant.TICKET_REQUEST_URL, param, String.class); log.info("ticket request response: {}", response); /** * 解析返回xml,返回是否認(rèn)證成功 */ 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; } }
XML相關(guān)操作
關(guān)于xml解析處理,這邊推薦使用hutool里面的XmlUtil
到此這篇關(guān)于SpringBoot調(diào)用第三方WebService接口(.wsdl與.asmx類型 )的文章就介紹到這了,更多相關(guān)SpringBoot WebService接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring boot webService使用方法解析
- SpringBoot整合WebService的實(shí)現(xiàn)示例
- SpringBoot創(chuàng)建WebService方法詳解
- SpringBoot調(diào)用第三方WebService接口的兩種方法
- SpringBoot調(diào)用對(duì)方webService接口的幾種方法示例
- SpringBoot整合WebService的實(shí)戰(zhàn)案例
- springboot整合webservice使用簡(jiǎn)單案例總結(jié)
- Java(Springboot)項(xiàng)目調(diào)用第三方WebService接口實(shí)現(xiàn)代碼
相關(guān)文章
利用JAVA反射,讀取數(shù)據(jù)庫(kù)表名,自動(dòng)生成對(duì)應(yīng)實(shí)體類的操作
這篇文章主要介紹了利用JAVA反射,讀取數(shù)據(jù)庫(kù)表名,自動(dòng)生成對(duì)應(yīng)實(shí)體類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java多線程編程之訪問(wèn)共享對(duì)象和數(shù)據(jù)的方法
這篇文章主要介紹了Java多線程編程之訪問(wèn)共享對(duì)象和數(shù)據(jù)的方法,多個(gè)線程訪問(wèn)共享對(duì)象和數(shù)據(jù)的方式有兩種情況,本文分別給出代碼實(shí)例,需要的朋友可以參考下2015-05-05java實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼生成
這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10關(guān)于scanner.nextInt()等next()和scanner.nextIine()連用注意事項(xiàng)
這篇文章主要介紹了關(guān)于scanner.nextInt()等next()和scanner.nextIine()連用注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-04-04Java開發(fā)實(shí)現(xiàn)人機(jī)猜拳游戲
這篇文章主要為大家詳細(xì)介紹了Java開發(fā)實(shí)現(xiàn)人機(jī)猜拳游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08Java的Lambda表達(dá)式和Stream流的作用以及示例
這篇文章主要介紹了Java的Lambda表達(dá)式和Stream流簡(jiǎn)單示例,Lambda允許把函數(shù)作為一個(gè)方法的參數(shù),使用Lambda表達(dá)式可以寫出更簡(jiǎn)潔、更靈活的代碼,而其作為一種更緊湊的代碼風(fēng)格,使Java的語(yǔ)言表達(dá)能力得到了提升,需要的朋友可以參考下2023-05-05SSM框架整合之Spring+SpringMVC+MyBatis實(shí)踐步驟
大家都知道Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,本文主要介紹三大框架的整合包含spring和mybatis的配置文件,還有spring-mvc的配置文件的詳細(xì)介紹,通過(guò)項(xiàng)目實(shí)踐步驟給大家詳細(xì)介紹,感興趣的朋友一起看看吧2021-06-06