這段時間項目進行到了最後時刻,可是還有不少需求沒有搞清楚,眼看deadline愈來愈近,壓力也愈來愈大。如今個人主要工做是將別人開發好的一個系統給加載到咱們系統中,使用的方法是經過webService調用那個系統的登陸接口。我對webService這個技術知之甚少,因此,這段時間經過各類方法狂補webService知識,剛開始無頭蒼蠅似的亂撞,看到什麼有關的就開始學,只是憑着腦子在想着學,沒有動手,致使越學越糊塗。這周剛開始的時候仔細想了想前段時間學習方式,感受不太對,因而準備重新開始,從發佈一個本地webservice服務,經過調用發佈成功的本地webService進行測試,測試好多種調用方式,總算是會調用webService服務了。在這裏我想說以前漫無目的的學不是一點用也沒有,還算是瞭解了一些webService的知識,畢竟學了那麼長時間,怎麼會沒有收穫。下面將調用webService接口的方法記錄下來,便於之後複習。java
在網上查了好多資料,不少人分享的調用webService知識都很不錯,我也是根據這些學會的webService,大體上以下: web
一、經過axis實現發佈本地webService並調用。apache
發佈本地webService服務:首先新建一個web項目(通常都是動態的),在src下新建一個java類,做爲webService服務類,我建的類以下:網絡
package com.lsk.ws; public class PrintService { public void print(String str){ System.out.println("Hello,this is my first webservice!"); System.out.println(str); } public String lsk(String params1,String params2,String params3){ String lskResult = params1 + "&" + params2 + "&" + params3; return lskResult; } }
print方法是爲了測試無返回值但有打印的webService發放返回結果,結果什麼都不返回。lsk這個方法測試返回正常結果。建好這個文件以後,而後右擊選擇webService 點擊creat webService,而後的操做能夠在網上找到,在這裏再也不贅述。學習
調用發佈的這個本地webService服務:在任意地方寫個測試類,內容以下:測試
String endpoint = "http://localhost:8080/WebService/services/PrintService";
try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); QName qn = new QName("urn:PrintService", "lsk"); call.setOperationName(qn); String result = (String) call.invoke(new Object[] {"111","222","333"}); // 傳參 System.out.println(result); /*QName qn = new QName("urn:PrintService", "print"); call.setOperationName(qn); call.invoke(new Object[] {"111"}); // 傳參*/ } catch (Exception e) { e.printStackTrace(); }
上述測試方法用的是axis1.4,測試以前導入axis1.4的jar包。this
二、經過xFire調用webService,還以本機發布的webService爲例。spa
新建java project,首先導入xFirejar包,而後新建一個interface,該接口只須要生命須要調用的webService方法,如:code
package com.lsk.webClient;
public interface IPrint { public void print(String str); public String lsk(String x1,String x2,String x3); }
而後,寫個測試類和方法測試調用webService,以下:orm
Service srModel = new ObjectServiceFactory().create(IPrint.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());//建立工廠實例
String helloURL = "http://localhost:8080/WebService/services/PrintService"; try { IPrint IPrintService = (IPrint) factory.create(srModel, helloURL); String params1 = "mmm"; String params2 = "nnn"; String params3 = "ddd"; IPrintService.print("哈哈哈哈哈哈"); System.out.print(IPrintService.lsk(params1, params2, params3)); } catch (MalformedURLException e) { e.printStackTrace(); }
這是xFire調用webService的一種方法,我以爲這種方法與wsdl2java生成客戶端相似。
下面說一種調用網絡上免費的webService服務的方法:
public static void main(String[] args) throws Exception {
String endpoint = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"; String operationName = "getWeatherbyCityName"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); call.setOperationName(new QName("http://WebXml.com.cn/",operationName)); call.addParameter( new QName("http://WebXml.com.cn/","theCityName"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.setReturnClass(java.lang.String[].class); call.setUseSOAPAction(true); call.setSOAPActionURI("http://WebXml.com.cn/"+"getWeatherbyCityName"); String[] res = null; res=(String[]) call.invoke(new Object[]{"鄭州"}); for(String str:res){ System.out.println(str); } }
至此,對調用webService基本上算是瞭解了,還不能說精通,還需繼續努力,人畢竟須要時刻進步,況且咱們偉大的攻城獅。