wsdl 本身也是一個xml文檔,我們通過wsdl 可以知道webservice如何調用
2.結構
示例:公網天氣查詢開發
1.閱讀別人提供的wsdl
Service服務視圖:
portType服務端點:
2.使用wsimport生成客戶端調用代碼
需要知道wsdl的地址
wsimport不支持soap1.2的客戶端代碼生成.
3.將生成代碼拷貝到工程中,開發客戶端
1.
2.使用客戶端生成代碼調用服務端:
4.小結
這裡我們說的是客戶端生成代碼調用服務端的第一種使用方法,這種方法的缺點就是硬編碼
將wehservice的地址封裝在生成代碼中,如果將來webservice地址改變,需要重新生成,修改客戶端代碼,不方便系統維護
客戶端開發的第二種方式
jaxws標準方法
1.使用jdk的service類調用webservice
2.使用jaxws標準方法調用公網天氣查詢
服務端的創建
1.SEI(Service Endpoint Interface)
編寫SEI ,SEI在webservice中稱之為portType,在java中稱之為接口
public interface WeatherInterface{
public String queryWeather(String cityName);
}
2.SEI實現類
3.發佈WebService服務
4.驗證WebService服務是否發佈成功
在webservice的地址後邊添加?wsdl, 查詢webservice的使用說明書內容是否完整,如果wsdl內容完整,表示webservice發佈成功
註解
在我們自己開發服務端的時候,對應我們開發的服務端而生成的wsdl,在名稱的定義上並不符合我們本意,所有我們需要對其進行修改. 註解就可以幫助我們完成名稱的修改
1.@WebServer 定義服務,在public class上邊
1.targetNamespace : 指定命名空間
2.name : porType 的名稱
3.portName : port的名稱
4.serviceName : 服務名稱
5.endpointInterface : SEI 接口地址,如果一個服務類實現了多個接口,只需要發佈一個接口方法,可以通過次註解指定要發佈的服務的接口
2.@WebMethod 定義方法,在公開方法上邊
operationName:方法名
exclude:設置為true表示此方法不是webservice方法,反之則表示webservice方法
3.@WebResult 定義返回值,在方法返回值前邊
name:返回結果值的名稱
4.@WebParam 定義參數,在方法參數前邊
name:指定參數的名稱
5.注意
如果修改webservice的接口內容,比如 namespace portType 必須要重新生成客戶端調用碼
CXF
1.介紹
CXF是一種開發WebService的框架,可以幫助我們更快速靈活的開發.
2.環境配置
下載cxf
配置環境變量: CXF_HOME =cxf的目錄
Path=%CXF_HOME%\bin;
3.開發
1.創建SEI及實現類
2.發佈服務代碼
3.使用cxf的wsdl2java工具生成客戶端調用代碼
4.客戶端調用服務
4. 小結:
CXF編程實現webservice:
JaxWsServerFactoryBean: 發佈webservice服務
JaxWsProxyFactoryBean: 調用webservice服務端
CXF整合spring
1.介紹
cxf框架本身依賴spring,從官方下載cxf包中有spring的jar包
上邊使用的JaxWsServerFactoryBean 和 JaxWsProxyFactoryBean ,改為spring配置方式
發佈服務:使用spring和cxf整合的標籤 客戶端調用服務:使用spring和cxf整合的標籤 上邊的 2.開發 1.創建工程,創建jar包 2.開發SEI及實現類 3.配置spring 的applicationContext.xml文件 這樣要注意用到的三個參數 ,SEI 實現類 webservice地址 4.在web.xml中配置cxf和spring cxf的servlet用於解析cxf發佈webservice 配置成功之後,啟動服務器就可以完成服務的發佈 4.之後就是使用wsdl2java/wsimport 工具生成客戶端調用代碼 5.編寫appliactionContext.xml 6.測試是否成功 我們可以回去客戶端bean ,然後調用服務端方法
閱讀更多 跟老司機學Java 的文章