webservice的用途 webservice幾種方式



文章插圖
webservice的用途 webservice幾種方式

文章插圖
1. 概述開發手段:使用JDK開發(1.6及以上版本)使用CXF框架開發(工作中)組成:服務器端客戶端2. 使用JDK開發WebService1).開發服務器端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/1234562). 用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方法上)
【webservice的用途 webservice幾種方式】2). 說明
即使是沒有修改源代碼,只修改了注解,客戶端的代碼也必須要重新生成, 否則調用將會失敗 。