JDK生成WebService客戶端代碼以及調(diào)用方式
TODO服務(wù)端搭建
1.WSDL結(jié)構(gòu)
1)<service>:服務(wù)視圖,WebService的服務(wù)端點
2)<binding>:WebService的通信協(xié)議,還描述WebService的方法輸入、輸出
3)<portType>:描述了WebService可執(zhí)行的操作,通過binding指向portType
4)<message>:描述了服務(wù)中發(fā)布的方法,包括參數(shù)返回值
5)<type>:定義了WebService中使用的數(shù)據(jù)類型
2.生成客戶端代碼
通過wsimport命令生成客戶端代碼(windows:建議直接通過cmd進入到項目的src目錄下)
1、遠程地址:wsimport -s . 接口地址?wsdl
2、xml文件:wsimport -s . xml文件地址
3.按照服務(wù)說明書編程(查找關(guān)鍵點)
1、<wsdl:service name="ModeDateService">:創(chuàng)建ModeDateService的對象
2、實現(xiàn)類
<wsdl:portType name="ModeDateServicePortType">:ModeDateServicePortType:實現(xiàn)類的名稱
3、方法
<wsdl:portType name="ModeDateServicePortType">標簽下的<wsdl:operation name="saveModeData">
當服務(wù)調(diào)用失敗時候:
<s:any element ref="s:schema"/><s:any>修改為<s:any minOccurs="2" maxOccurs="2"/>
4.生成后便可直接調(diào)用,調(diào)用方式有兩種
4.1.調(diào)用客戶端代碼的以一種方式:使用wsimport 命令,生成客戶端代碼然后再調(diào)用
生成后直接創(chuàng)建服務(wù)試圖獲取服務(wù)實現(xiàn)類調(diào)用方法即可
//1、創(chuàng)建服務(wù)視圖(視圖是從service標簽的name屬性獲?。? WeatherServiceImplService weatherServiceImplService = new WeatherServiceImplService(); //2、獲取服務(wù)實現(xiàn)類(實現(xiàn)類從portType的name屬性獲?。? WeaterServiceImpl serviceImpl = weatherServiceImplService.getPort(WeatherServiceImpl.class); //3、調(diào)用方法(從portType的operation標簽中獲?。? String result = serviceImpl.queryWeather("寧波"); //4、輸出服務(wù)單返回的結(jié)果 System.out.println(result);
4.2.調(diào)用客戶端代碼的第二種方式:使用jdk原生代碼實現(xiàn)調(diào)用
1.webservice服務(wù)端發(fā)布地址
2.webservice服務(wù)發(fā)布的接口類
3.參數(shù)和返回值實體類
public class Client{ public static void main(String[] args) throws MalformedURLException{ URL url = new URL("http://localhost:8080/weatherService?wsdl"); // 指定命名空間和服務(wù)名稱 QName qName = new QName("http://webservice.qf.com","WeatherServiceImplService"); Service service = Service.create(url,qName); // 通過getPort方法返回指定接口,以下兩種調(diào)用都可以,個人更喜歡使用上邊的 WeatherServiceImpl port = service.getPort(WeatherServiceImpl.class); //WeatherServiceImpl port = service.getPort(new QName("http://webservice.qf.com","WeatherService"),WeatherServiceImplService.clasee) // 查詢輸出 String query = port.query("寧波"); System.out.println(query); } }
5.WebService客戶端調(diào)用方法還有很多,個人使用較多的還是以上兩種,如果有興趣還可以自行百度一下,例如:
5.1.Axis或Axis2調(diào)用WebService
5.2.代理工廠的方式
5.3.使用httpClient的方式調(diào)用,需要借助第三方工具SoapUI獲取請求xml數(shù)據(jù)格式的內(nèi)容,同時請求響應(yīng)內(nèi)容是xml格式內(nèi)容
5.4.cxf類庫 兩種調(diào)用方式
總結(jié)
到此這篇關(guān)于JDK生成WebService客戶端代碼以及調(diào)用方式的文章就介紹到這了,更多相關(guān)JDK生成WebService客戶端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
HttpServletRequest的getParameter()的坑及解決
這篇文章主要介紹了HttpServletRequest的getParameter()的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07關(guān)于kafka消費不到遠程bootstrap-server?數(shù)據(jù)的問題
很多朋友遇到kafka消費不到遠程bootstrap-server?數(shù)據(jù)的問題,怎么解決這個問題,很多朋友不知所措,下面小編給大家?guī)砹岁P(guān)于kafka消費不到遠程bootstrap-server?數(shù)據(jù)的問題及解決方法,感興趣的朋友跟隨小編一起看看吧2021-11-11Spring Security靈活的PasswordEncoder加密方式解析
這篇文章主要介紹了Spring Security靈活的PasswordEncoder加密方式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09Java根據(jù)坐標經(jīng)緯度計算兩點距離5種方法及校驗經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦
在項目開發(fā)過程中需要根據(jù)兩地經(jīng)緯度坐標計算兩地間距離,下面這篇文章主要給大家介紹了關(guān)于Java根據(jù)坐標經(jīng)緯度計算兩點距離5種方法以及校驗經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦,需要的朋友可以參考下2023-12-12Maven3種打包方式中maven-assembly-plugin的使用詳解
這篇文章主要介紹了Maven3種打包方式中maven-assembly-plugin的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07使用redisTemplate從redis獲取所有數(shù)據(jù)
這篇文章主要介紹了使用redisTemplate從redis獲取所有數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06