1. 概述
- 開發手段:使用JDK開發(1.6及以上版本)使用CXF框架開發(工作中)
- 組成:伺服器端客戶端
2. 使用JDK開發WebService
1).開發伺服器端
- Web Service編碼:@WebService( SEI和SEI的實現類)@WebMethod(SEI中的所有方法)
- 發布Web Service:Endpoint(終端, 發布webservice)
2). 開發客戶端
- 使用eclipse提供的web service瀏覽器訪問查看對應的wsdl文檔:…..?wsdl(一般瀏覽器)請求webService並查看請求和響應消息(webservice瀏覽器)
- 創建客戶端應用編碼方式訪問藉助jdk的exe工具生成客戶端代碼:
wsimport -keep url //url為wsdl文件的路徑
- 藉助生成的代碼編寫請求代碼
3. 監聽請求: 使用Eclipse的TCP/IP工具
- 將伺服器端的WSDL文檔保存到客戶端本地
- 修改文檔: 將埠號從8989改為8080
- 根據本地的wsdl文檔生成客戶端代碼, 並編寫客戶端的調用代碼
- 配置eclipse的TCP/IP,啟動監聽

5.執行客戶端代碼發送WebService請求

4. 調用免費的web service(天氣預報)
- Google」免費WebService」, 找到提供天氣預報Webservice的網路地址http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx
- 使用eclipse的web service瀏覽器訪問
- 客戶端編碼方式訪問藉助命令工具自動生成客戶端代碼藉助生成的代碼編寫請求代碼
| 說明: 直接生成客戶端代碼會拋異常, 無法生成客戶端代碼, 解決辦法:1. 將對應的wsdl文檔保存到本地2. 修改wsdl文檔的部分內容:將 <s:element ref=」s:schema」 /><s:any /> 替換成 <s:any minOccurs=」2″ maxOccurs=」2″/>備註: 這個是Java調用net的webservice都有的問題 |
5. 使用CXF開發web service
加入cxf的jar包即可,其它不需要改動
6. WebService請求深入分析
1). 分析WebService的WSDL文檔結構
1.1). 實例截圖

1.2). 文檔結構
| <definitions><types><schema><element></types><message><part></message><portType><operation><input><output></portType><binding><operation><input><output></binding><service><port><address></service></definitions> |

1.3). 文檔結構圖

- types– 數據類型(標籤)定義的容器,裡面使用schema定義了一些標籤結構供message引用
- message– 通信消息的數據結構的抽象類型化定義。引用types中定義的標籤
- operation– 對服務中所支持的操作的抽象描述,一個operation描述了一個訪問入口的請求消息與響應消息對。
- portType– 對於某個訪問入口點類型所支持的操作的抽象集合,這些操作可以由一個或多個服務訪問點來支持。
- binding– 特定埠類型的具體協議和數據格式規範的綁定。
- service– 相關服務訪問點的集合
- port– 定義為協議/數據格式綁定與具體Web訪問地址組合的單個服務訪問點。
2). 測試CXF支持的數據類型
基本類型int,float,boolean等
引用類型String集合:數1組,List, Set, Map自定義類型 Student
3). 一次Web service請求的流程
一次web service請求的本質:
1) 瀏覽器向伺服器端發送了一個soap消息(http請求+xml片斷)
2) 伺服器端處理完請求後, 向客戶端返回一個soap消息
那麼它的流程是怎樣的呢?

7. CXF框架的深入使用
1).CXF的攔截器
1.1) 理解
為什麼設計攔截器?為了在webservice請求過程中,能動態操作請求和響應數據, CXF設計了攔截器.
- 攔截器分類:
- 按所處的位置分:伺服器端攔截器,客戶端攔截器
- 按消息的方向分:入攔截器,出攔截器
- 按定義者分:系統攔截器,自定義攔截器
- 攔截器API
Interceptor(攔截器介面)
AbstractPhaseInterceptor(自定義攔截器從此繼承)
LoggingInInterceptor(系統日誌入攔截器類)
LoggingOutInterceptor(系統日誌出攔截器類)

1.2) 編碼實現攔截器
- 使用日誌攔截器,實現日誌記錄LoggingInInterceptorLoggingOutInterceptor
- 使用自定義攔截器,實現用戶名與密碼的檢驗伺服器端的in攔截器客戶端的out攔截器xfzhang/123456
2). 用CXF編寫基於spring的web service
2.1). 編碼實現
Server端創建spring的配置文件xml,在其中配置SEI在xml中,配置上CXF的一些核心組件
Client端生成客戶端代碼創建客戶端的spring配置文件beans-client.xml,並配置編寫測試類請求web service
2.2). 添加自定義攔截器
- Server端在xml中,在endpoint中配置上入攔截器
- Client端通過Client對象設置出攔截器
8. 其它調用WebService的方式
1).Ajax調用webService

跨域請求問題:
| 1. 什麼是跨域請求?1. sina.com–=->baidu.com/xxx.jsp2. localhost—-à192.168.42.1652. 解決ajax跨域請求webservice的問題?在客戶端應用中使用java編碼去請求webservice, 在頁面中去請求自己的後台 |
2). Jquery調用WebService

3).HttpURLConnection調用WebService

9. 通過註解修改wsdl文檔
1). JDK中的相關註解
1.1). @WebService
l 作用在具體類上。而不是介面。l 一個類只有添加了此註解才可以通過Endpoint發布為一個web服務。l 一個添加了此註解的類,必須要至少包含一個實例方法。靜態方法和final方法不能被發布為服務方法。l WebService註解包含以下參數:![]() |
1.2). @WebMethod
l 此註解用在方法上,用於修改對外暴露的方法。![]() |
1.3). @WebResult
用於定製返回值到WSDL的映射![]() |
1.4). @WebParam
用於定義WSDL中的參數映射![]() |
1.5). @XmlElement
用於定義實體類的屬性到WSDL中的映射(get/set方法上)![]() |






2). 說明
| 即使是沒有修改源代碼,只修改了註解,客戶端的代碼也必須要重新生成, 否則調用將會失敗。 |
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/228159.html
微信掃一掃
支付寶掃一掃