一、前言
????最近公司項(xiàng)目中遇到要和某廠生產(chǎn)系統(tǒng)對接的需求,要求對接廠內(nèi)的ESB總線。需要使用到WebService的方式進(jìn)行推送數(shù)據(jù)。于是決定在此歸納整理一下WebService的簡單使用方法(只談快速使用)以及一些使用的坑點(diǎn)。
二、準(zhǔn)備工作
????idea 版本不限,我是用的是19.3(19.3永遠(yuǎn)的神),對接方提供的wsdl文件(如果是url的話直接下載)。
三、開始對接
????1,從idea中生成WebService對接需要的文件
???????? idea中可以根據(jù)(wsdl)直接生成用于調(diào)用WebService服務(wù)的文件,操作步驟如下
????????(1)選擇需要生成的目錄 右鍵->WebServices->Generate Java Code From Wsdl

第一步.png
????????(2)注意Web Service Platfrom 這一項(xiàng)需要選擇跟圖片中的一樣,點(diǎn)擊ok

第二步.png
????????(3)生成對應(yīng)代碼,生成后的樣子??梢愿鶕?jù)個人喜好刪除.class文件(編譯后的文件沒啥用),我們只需要關(guān)注繼承了 [javax.xml.ws.Service] 的這個類就可以了

第三步.png
????????(4)編寫測試方法,寫一個main方法調(diào)用WebService服務(wù)

第四步.png

成功調(diào)用.png
????????至此一個對接流程完成數(shù)據(jù)發(fā)送完畢。
四、使用中的麻煩
????1,部署問題,直接把生成的服務(wù)繼承進(jìn)系統(tǒng)并隨系統(tǒng)一同打包部署后發(fā)現(xiàn)直接報錯,找不到文件。這個問題需要修改繼承了Service類中的靜態(tài)方法

image.png
把wsdl文件放到服務(wù)器上后修改至對應(yīng)路徑。啟動項(xiàng)目測試發(fā)送數(shù)據(jù),完美解決問題
????2,使用定時任務(wù)驅(qū)動發(fā)送數(shù)據(jù),跟廠里對接數(shù)據(jù)都是定時發(fā)送的,剛開始啟動定時任務(wù)沒有問題,但是每當(dāng)運(yùn)行一段時間后就停止運(yùn)行。為此跑了好幾趟廠里也沒有解決問題。最后在互聯(lián)網(wǎng)沖浪的時候發(fā)現(xiàn)了一個帖子,內(nèi)容是介紹WebService的實(shí)現(xiàn)原理,【W(wǎng)eb Service也很容易部署, 因?yàn)樗鼈兓谝恍┏R?guī)的產(chǎn)業(yè)標(biāo)準(zhǔn)以及已有的一些技術(shù),諸如標(biāo)準(zhǔn)通用標(biāo)記語言下的子集XML、HTTP】稍加思考.jpg,擦有http。眾所周知java中的http請求如果不設(shè)置超時時間他會一直在哪掛著定時任務(wù)處于一個假死的狀態(tài)(死了但是沒有完全死),這樣導(dǎo)致了后面的所有都停了?,F(xiàn)在要做的就是給WebServcie 的http請求設(shè)置一個超時時間。只需要對我們調(diào)用的getHelloWorld中添加

image.png
BindingProvider bindingProvider = (BindingProvider) helloWorld;
Map<String, Object> requestContext = bindingProvider.getRequestContext();
requestContext.put("com.sun.xml.internal.ws.connection.timeout",20*1000);
requestContext.put("com.sun.xml.internal.ws.request.timeout",20*1000);
大家都是CV工程師我懂,文字版?。
再對我們調(diào)用的方法進(jìn)行一個異常捕獲處理,保存運(yùn)行日志、重新發(fā)送數(shù)據(jù)等。
新人一枚,文中若有錯誤或者不足希望大佬指正。