互聯網上面有很多的免費webService服務,我們可以調用這些免費的WebService服務,將一些其他網站的內容信息集成到我們的Web應用中顯示,下面就以獲取股票數據和天氣預報為例進行學習。
這是一些WebService免費服務接口,供大家學習參考:http://blog.csdn.net/jingqia/article/details/17398673
有了之前的基礎,學習起來難度就變得沒那么高了!
一、 調用免費的web service獲取股票信息
1.找到股票的服務網址:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
接着輸入:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl,在原來的網址后面加?wsdl即可
2.新建javaWeb項目stock_test打開命令窗口輸入:wsimport -s E:\\workingFoilder\\projectSpace\\stock_test\\src -p com.wxzz.client -keep http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl回車生成相關類信息,如圖,警告可以忽略,不報錯就可以了
刷新項目,可以看到包下生成了很多類
根據生成的類,編寫相關代碼
1 package com.wxzz.test; 2 import java.util.List; 3 import com.wxzz.client.ArrayOfString; 4 import com.wxzz.client.ChinaStockWebService; 5 import com.wxzz.client.ChinaStockWebServiceSoap; 6 public class Test { 7 public static void main(String[] args) { 8 //調用股票服務 9 ChinaStockWebService service=new ChinaStockWebService(); 10 //創建ChinaStockWebServiceSoap對象 11 ChinaStockWebServiceSoap serviceScope=service.getChinaStockWebServiceSoap(); 12 //獲取股票數據 13 ArrayOfString aos=serviceScope.getStockInfoByCode("sz601169"); 14 //遍歷股票信息 15 List<String> list=aos.getString(); 16 for(String str:list){ 17 System.out.println(str); 18 System.out.println("+----+"); 19 } 20 } 21 }
運行程序,結果如下:
結果不是想要的,可能是股票數據給服務關閉的原因吧!
為了進一步測試,這個服務中有幾個方法,大家可以自己測試,我進行了返回字節圖片的測試
代碼如下:
服務接口:
1 package com.wxzz.service; 2 3 /** 4 * @author wangsj 5 * 6 */ 7 public interface StockService { 8 //顯示股票走勢圖片 9 public byte[] getStockByte(String stockCode); 10 11 }
服務接口實現類:
1 package com.wxzz.service; 2 import com.wxzz.client.ChinaStockWebService; 3 import com.wxzz.client.ChinaStockWebServiceSoap; 4 5 /** 6 * @author wangsj 7 * 8 */ 9 public class StockServiceImpl implements StockService { 10 11 @Override 12 public byte[] getStockByte(String stockCode) { 13 ChinaStockWebService service=new ChinaStockWebService(); 14 ChinaStockWebServiceSoap serviceScope=service.getChinaStockWebServiceSoap(); 15 return serviceScope.getStockImageByteByCode(stockCode); 16 17 } 18 19 }
控制層:
1 package com.wxzz.servlet; 2 import java.io.IOException; 3 import java.io.OutputStream; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import com.wxzz.service.StockServiceImpl; 10 11 public class GetStockImageServlet extends HttpServlet { 12 private static final long serialVersionUID = 1L; 13 private StockServiceImpl ss=new StockServiceImpl(); 14 15 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 this.doPost(request, response); 17 } 18 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 byte[]b=ss.getStockByte("sh601169"); 20 response.setHeader("content-type", "image/jpeg"); 21 OutputStream os=response.getOutputStream(); 22 os.write(b); 23 } 24 25 }
輸入網址:http://localhost:7001/stock_test/GetStockImageServlet出現以下結果
出現了股票走勢圖,驗證正確!
二、 調用免費的web service獲取天氣預報信息
1.步驟還是一樣,首先找到天氣預報接口網址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx輸入瀏覽器可以看到以下信息:
然后輸入http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl獲取以下信息:
2.新建項目weather_test,然后打開命令窗口,執行 E:\\workingFoilder\\projectSpace\\weather_test\\src -p com.wxzz.client -keep http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
出現了錯誤,經過查資料發現由於運行結果顯示,由於要調用的WebService是用.net寫的,這個是Java調用net的webservice都有的問題,這個問題的解決辦法如下:
1)在http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl打開的頁面空白處點右鍵另存為,把后綴名改為.wsdl,保存即可,注意保存的路徑
2)使用EditPlus或其他文本編輯器打開該文件,將<s:element ref="s:schema" /><s:any /> 替換成 <s:any minOccurs="2" maxOccurs="2"/>
3)再次打開命令窗口輸入:wsimport -s E:\\workingFoilder\\projectSpace\\weather_test\\src -p com.wxzz.client -keep D:\WeatherWebService.asmx.wsdl,回車編譯通過
刷新項目,可以看到各類信息如下:
3、新建測試類,進行測試
查看API可以看到各個方法的用法
測試代碼如下:
1 package com.wxzz.test; 2 import java.util.List; 3 import com.wxzz.client.ArrayOfString; 4 import com.wxzz.client.WeatherWebService; 5 import com.wxzz.client.WeatherWebServiceSoap; 6 7 /** 8 * @author wangsj 9 * 10 */ 11 public class TestWeather { 12 public static void main(String[] args) { 13 //獲取服務 14 WeatherWebService weatherService=new WeatherWebService(); 15 WeatherWebServiceSoap soap=weatherService.getWeatherWebServiceSoap(); 16 ArrayOfString arrayOfString=soap.getWeatherbyCityName("北京"); 17 //遍歷結果 18 List<String> list=arrayOfString.getString(); 19 for(String str:list){ 20 System.out.println(str); 21 System.out.println("**************"); 22 } 23 } 24 }
運行結果如下:結果比較多
直轄市 ************** 北京 ************** 54511 ************** 54511.jpg ************** 2017-4-27 16:00:35 ************** 13℃/28℃ ************** 4月27日 晴 ************** 北風4-5級轉微風 ************** 0.gif ************** 0.gif ************** 今日天氣實況:氣溫:28℃;風向/風力:西北風 5級;濕度:7%;紫外線強度:強。空氣質量:良。 ************** 紫外線指數:強,塗擦SPF大於15、PA+防曬護膚品。 感冒指數:較易發,風較大,較易發生感冒,注意防護。 穿衣指數:熱,適合穿T恤、短薄外套等夏季服裝。 洗車指數:較不宜,風力較大,洗車后會蒙上灰塵。 運動指數:較適宜,風力稍強,推薦您進行室內運動。 空氣污染指數:良,氣象條件有利於空氣污染物擴散。 ************** 14℃/30℃ ************** 4月28日 晴 ************** 北風3-4級轉微風 ************** 0.gif ************** 0.gif ************** 16℃/32℃ ************** 4月29日 晴 ************** 南風3-4級轉北風微風 ************** 0.gif ************** 0.gif ************** 北京位於華北平原西北邊緣,市中心位於北緯39度,東經116度,四周被河北省圍着,東南和天津市相接。全市面積一萬六千多平方公里,轄12區6縣,人口1100余萬。北京為暖溫帶半濕潤大陸性季風氣候,夏季炎熱多雨,冬季寒冷干燥,春、秋短促,年平均氣溫10-12攝氏度。北京是世界歷史文化名城和古都之一。早在七十萬年前,北京周口店地區就出現了原始人群部落“北京人”。而北京建城也已有兩千多年的歷史,最初見於記載的名字為“薊”。公元前1045年北京成為薊、燕等諸侯國的都城;公元前221年秦始皇統一中國以來,北京一直是中國北方重鎮和地方中心;自公元938年以來,北京又先后成為遼陪都、金上都、元大都、明清國都。1949年10月1日正式定為中華人民共和國首都。北京具有豐富的旅游資源,對外開放的旅游景點達200多處,有世界上最大的皇宮紫禁城、祭天神廟天壇、皇家花園北海、皇家園林頤和園,還有八達嶺、慕田峪、司馬台長城以及世界上最大的四合院恭王府等各勝古跡。全市共有文物古跡7309項,其中國家文物保護單位42個,市級文物保護單位222個。北京的市樹為國槐和側柏,市花為月季和菊花。另外,北京出產的象牙雕刻、玉器雕刻、景泰藍、地毯等傳統手工藝品馳譽世界。 **************
三、 總結
通過案列可以總結出,使用第三方的WebService接口,大致分為以下幾個步驟:
1.首先獲取第三方接口地址,訪問API熟悉里面的方法怎么用
2.在網址后面添加?wsdl繼續進行訪問,如果能訪問通過,表示可用
3.在項目中創建需要引入WebService服務的位置,即這些服務需要放的位置,一般都在服務層供調用
4.打開命令窗口借助jdk的wsimort.exe工具wsimport 命令生成相應的服務層(客戶端)代碼,如果出現錯誤,及時解決
5.調用服務層代碼,編寫客戶端程序