1. 程式人生 > >axis2客戶端呼叫免費的webservice服務的例項之三axis2使用RPC方式呼叫網上免費WebService

axis2客戶端呼叫免費的webservice服務的例項之三axis2使用RPC方式呼叫網上免費WebService

前面兩節我們分別說了呼叫webservice的兩種方式:

下面我們介紹一下第三種方式:axis2使用RPC方式呼叫網上免費WebService 

這種方式類似第二種方式,只是用到的類不同,但是這種方式感覺容易出問題。不多說,直接上程式碼

<span style="color:#3b5998;">package com.yy.test;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

//</span><span style="color:#ff6600;">使用webservice無引數的方法:getRegionProvince</span>
public class Test2 {
	public static void main(String args[]) throws AxisFault{  
	    //使用RPC方式呼叫WebService   	
	    RPCServiceClient serviceClient = new RPCServiceClient();  
	    Options options = serviceClient.getOptions();  
	    //指定呼叫WebService的URL  
	    EndpointReference targetEPR = new EndpointReference(  
	            "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl");  
	    options.setTo(targetEPR);  
	    options.setAction("http://WebXml.com.cn/getRegionProvince");
	    //指定方法的引數值  
	    Object[] opAddEntryArgs = new Object[] {};  
	    //指定要呼叫的方法及WSDL檔案的名稱空間  
	    QName opAddEntry = new QName("http://WebXml.com.cn/", "getRegionProvince");  
	    //呼叫法並輸出該方法的返回值  
	    System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs));
	    /*Object[] result=serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
	    for (Object object : result) {
	    	System.out.println(object.toString());
	    }*/
	}
}  
其執行結果:

相同的webservive服務,本次使用有引數的方法:getSupportCityString

package com.yy.test;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

<a target=_blank href="http://blog.csdn.net/mingliangniwo/article/details/44202139" target="_blank" style="list-style: none; text-decoration: none; word-break: break-all; word-wrap: break-word; font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif;"></a><pre name="code" class="java"><span style="color:#3b5998;">//</span><span style="color:#ff6600;">使用webservice有引數的方法:getSupportCityString</span>
public class Test2 {public static void main(String args[]) throws AxisFault{  
            //指定呼叫WebService的URL
	    RPCServiceClient serviceClient2 = new RPCServiceClient();  
	    Options options2 = serviceClient2.getOptions();  
	    //指定呼叫WebService的URL  
	    EndpointReference targetEPR2 = new EndpointReference(  
	            "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl");  
	    options2.setTo(targetEPR2);  
	    options2.setAction("http://WebXml.com.cn/getSupportCityString");
	    //指定方法的引數值  
	    Object[] opAddEntryArgs2 = new Object[] {"北京"};  
	    //指定方法返回值的資料型別的Class物件  
	    Class[] classes2 = new Class[] {String.class};  
	    //指定要呼叫的方法及WSDL檔案的名稱空間  
	    QName opAddEntry2 = new QName("http://WebXml.com.cn/", "getSupportCityString");  
	    //呼叫法並輸出該方法的返回值  
	    System.out.println(serviceClient2.invokeBlocking(opAddEntry2, opAddEntryArgs2, classes2));
	}
}  

其執行結果:



有時還會出現下面這個錯誤:


在網上查了好多,都沒有什麼解決方案,有了答案是讓用方式一或方式二的方式

原因:說的都是webservice服務那邊的問題。

所以大家可以更多的使用方式一或方式二去webserive開發