Java如何調(diào)用wsdl的webservice接口
java開發(fā),當(dāng)我們獲取到了對(duì)方提供的wsdl地址,然后在網(wǎng)頁(yè)上能夠訪問(wèn)wsdl文檔以后,如何調(diào)用對(duì)方的webservic呢?
一.首先了解下WSDL
WSDL(網(wǎng)絡(luò)服務(wù)描述語(yǔ)言,Web Services Description Language)是一門基于 XML 的語(yǔ)言,用于描述 Web Services 以及如何對(duì)它們進(jìn)行訪問(wèn)。
二.如何生成webService客戶端去調(diào)用服務(wù)端
1.報(bào)存wsdl的xml文件:并將其后綴改為wsdl
2.把保存的 wsdl 文件加進(jìn)項(xiàng)目,創(chuàng)建一個(gè)包,放在下面.
3.使用idea自帶插件,Tools -> WebServices -> Generatte Java Code From Wsdl (這里有坑,idea版本低于2020的 沒(méi)有WebServices)
生成如下圖:
生成是會(huì)加入依賴:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.11</version> <scope>compile</scope> </dependency>
這里涉及到 Spring整合CXF
三.客戶端參考代碼
public static void main(String[] args) throws Exception { WebServiceConfig cfg = WebServiceConfig.getInstance(); ISysNotifyTodoWebService service = (ISysNotifyTodoWebService) callService(cfg.getAddress(), cfg.getServiceClass()); // 請(qǐng)?jiān)诖颂幪砑訕I(yè)務(wù)代碼 NotifyTodoContext context = new NotifyTodoContext(); //數(shù)據(jù)格式要參考對(duì)方給的數(shù)據(jù)格式 context.setSubject("測(cè)試待辦webservice~~~"); context.setLink("http://news.sina.com.cn/"); context.setType(2); context.setKey("sinaNews"); context.setModelId("123456789"); context.setTargets("{\"Id\":\"12fe2de141b7b97b32d1af34204a9f54\"}"); context.setOptTime("2022-01-25 09:25:09"); NotifyTodoAppResult result = service.sendTodo(context); if (result != null) { if (result.getReturnState() != 2) System.out.println(result.getMessage()); } } /** * 調(diào)用服務(wù),生成客戶端的服務(wù)代理 * * @param address WebService的URL * @param serviceClass 服務(wù)接口全名 * @return 服務(wù)代理對(duì)象 * @throws Exception */ public static Object callService(String address, Class serviceClass) throws Exception { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 記錄入站消息 factory.getInInterceptors().add(new LoggingInInterceptor()); // 記錄出站消息 factory.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加消息頭驗(yàn)證信息。如果服務(wù)端要求驗(yàn)證用戶密碼,請(qǐng)加入此段代碼 // factory.getOutInterceptors().add(new AddSoapHeader()); factory.setServiceClass(serviceClass); factory.setAddress(address); // 使用MTOM編碼處理消息。如果需要在消息中傳輸文檔附件等二進(jìn)制內(nèi)容,請(qǐng)加入此段代碼 // Map props = new HashMap(); // props.put("mtom-enabled", Boolean.TRUE); // factory.setProperties(props); // 創(chuàng)建服務(wù)代理并返回 return factory.create(); }
不同的環(huán)境(開發(fā)\測(cè)試\生產(chǎn))注意修改 IP 和端口
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring cloud Gateway簡(jiǎn)介及相關(guān)配置方法
這篇文章主要介紹了Spring cloud Gateway簡(jiǎn)介及相關(guān)配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Java HashMap實(shí)現(xiàn)原理分析(一)
這篇文章主要介紹了Java HashMap實(shí)現(xiàn)原理的分析,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-08-08Java如何判斷一個(gè)字符串是否包含某個(gè)字符串
這篇文章主要給大家介紹了關(guān)于Java如何判斷一個(gè)字符串是否包含某個(gè)字符串的相關(guān)資料,在實(shí)際編程中,經(jīng)常需要判斷一個(gè)字符串中是否包含某個(gè)子串,需要的朋友可以參考下2023-07-07SpringBoot配置線程池的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot配置線程池的實(shí)現(xiàn)示例,主要包括在Spring Boot中創(chuàng)建和配置線程池,包括設(shè)置線程池的大小、隊(duì)列容量、線程名稱等參數(shù),感興趣的可以了解一下2023-09-09Java死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
死鎖是兩個(gè)甚至多個(gè)線程被永久阻塞時(shí)的一種運(yùn)行局面,這種局面的生成伴隨著至少兩個(gè)線程和兩個(gè)或者多個(gè)資源。在這里我已寫好一個(gè)簡(jiǎn)單的程序,它將會(huì)引起死鎖方案然后我們就會(huì)明白如何分析它2017-06-06