調用webService學習小結


  這段時間項目進行到了最后時刻,但是還有很多需求沒有搞清楚,眼看deadline越來越近,壓力也越來越大。現在我的主要工作是將別人開發好的一個系統給加載到我們系統中,使用的方法是通過webService調用那個系統的登錄接口。我對webService這個技術知之甚少,所以,這段時間通過各種方法狂補webService知識,剛開始無頭蒼蠅似的亂撞,看到什么有關的就開始學,只是憑着腦子在想着學,沒有動手,導致越學越糊塗。這周剛開始的時候仔細想了想前段時間學習方式,感覺不太對,於是准備從新開始,從發布一個本地webservice服務,通過調用發布成功的本地webService進行測試,測試好多種調用方式,總算是會調用webService服務了。在這里我想說之前漫無目的的學不是一點用也沒有,還算是了解了一些webService的知識,畢竟學了那么長時間,怎么會沒有收獲。下面將調用webService接口的方法記錄下來,便於以后復習。

  在網上查了好多資料,很多人分享的調用webService知識都很不錯,我也是根據這些學會的webService,大致上如下:  

  1、通過axis實現發布本地webService並調用。

  發布本地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包。

  2、通過xFire調用webService,還以本機發布的webService為例。

  新建java project,首先導入xFirejar包,然后新建一個interface,該接口只需要生命需要調用的webService方法,如:

package com.lsk.webClient;

public interface IPrint { public void print(String str); public String lsk(String x1,String x2,String x3); }

 

  然后,寫個測試類和方法測試調用webService,如下:

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基本上算是了解了,還不能說精通,還需繼續努力,人畢竟需要時刻進步,何況我們偉大的攻城獅。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM