最近工作中遇到使用webservice技術,我們對接方需要我們提供一個webservice接口來接受移動同步的數據,公司項目中現在也沒有webservice項目,所以打算搭建一個webservice的服務項目,網絡上資料很多,照着資料也可以搭建一個可以運行的webservice項目,但是大多資料都是復制的一篇文章,很多寫的都一樣一個字也不差,很多參數需要修改,或者需要定制也有沒有提到,所以自己寫的demo到可以,實際在項目使用中還是有很大差距的,所以這篇文章會詳細記錄我搭建項目過程聯調項目過程遇到的問題以及解決方法,寫文章的目的就是希望可以幫到一些遇到諸如此類問題的人,文章可能沒有那么全面,也絕對比得上那些復制來的博客。
首先在pom文件中添加依賴(如果項目不是使用springboot項目則需要自己配置一些文件,springboot項目生成也很簡單,沒接觸的可以看我之前寫過的文章)
創建服務
創建的service類需要添加@WebService注解,targetNamespace:名稱空間,一般都是http://+包名,這里需要注意service跟實現類的名稱空間要一樣,否則會報錯,會提示服務端缺參數沒有接受參數的對象,客戶端掉用的參數名稱空間也需要跟service指定的一樣,我們對接方不能修改,所以這里名稱空間寫成了他參數里的名稱空間,name:文檔中service的名稱,可不填有默認值,serviceName:發布的服務名稱,endpointInterface:服務的接口地址,回在發布的xml文檔中表明接口地址,實際調用接口地址是配置的發布路徑,下面會講,里面還有很多屬性,網上資料較多,想多填可以自己查閱資料,這里不在多說。
創建的service的方法需要添加@WebMethod,operationName:方法名稱,這里需要注意客戶端掉用最外層是方法名(如下圖:),我們對接方不能修改,所以要寫成跟調用方一樣的名字,action:service發布后xml文檔的屬性,可不填,這里需要注意,如果寫了調用方掉用需要對應寫成一樣的否則會報錯,我們對接方不能修改,所以這里action寫成了跟對方掉用一樣的action
@WebResult就是添加到返回值上的注解name:返回值名稱,targetNamespace:名稱空間。@WebParam是添加到入參上的注解,name:參數名稱,targetNamespace:名稱空間,只要添加了名稱空間調用方就要保持一致(關於參數掉用的相關問題與解決方法),這里寫兩個參數,一個字符串類型,一個對象類型接受,list跟map,Date類型也可以直接接受,如果想做一些處理或者格式化只需要實現接口重接方法就可以了,這不做例子,繼續編寫實現類(targetNamespace與前面的service要保持一直,否則會報錯):
對象屬性接受參數用來接受如下圖的參數:
對應對象代碼:
@XmlAccessorType(XmlAccessType.FIELD)代表所有屬性都映射為xml文檔屬性,@XmlElement跟@XmlAttribute都可以修改屬性別名,這里寫兩個是為了舉例子,也都有namespace這個屬性,這里必須跟前面service里面寫的名稱空間保持一致,否則會報上面介紹的參數的錯誤。
最后一步就@XmlAccessorType是服務的發布,服務的發布可以在springboot啟動文件去發布,也可以寫一個配置類來發布,我選擇后者,前者這里就不做演示
endpoint.publish("/demo");這句代碼代表發布的接口地址,是最后訪問的路徑,springboot默認路徑都是service,這幾加上了demo就是127.0.0.1:38080/services/myWebService/service/demo?wsdl,訪問127.0.0.1:38080/services/myWebService/service也可以看到方法以及對應的接口地址,如果想修改默認路徑可以通多代碼的方式修改,也可一通過配置方式修改,我更喜歡配置,所以代碼修改就不介紹了,配置文件修改cxf.path就可以了,因為我們使用的是cxf的方式來使用webservice。啟動項目訪問地址
點鏈接可以訪問到xml文檔,一看訪問地址其實就是127.0.0.1:38080/services/myWebService/service/demo?wsdl,文章到此項目已經搭建完成,文章只是一個簡單的webservice的搭建與發布,文章最后會貼出一個請求參數,方便后續對照,xml文檔對應關系這里也不做講解,文章里也沒有提到接受header的參數與header返回參數的添加與修改,有需要的可以進入傳送門,或者看我的下一篇文章,文章會有解決方法。希望文章能幫到一部分遇到問題的人,大家如果有什么其他問題也可以給我留言,我看到也會回復,幫忙解決問題。
請求報文:
“http://包名/”
作者:oKong
鏈接:https://www.imooc.com/article/261006
來源:慕課網
本文首次發布於慕課網 ,轉載請注明出處,謝謝合作