时间:2021-07-01 10:21:17 帮助过:13人阅读
前面两节我们分别说了调用webservice的两种方式: 1.axis2客户端调用免费的webservice服务的实例之一通过wsdl生成客户端程序并本地调用 2 . axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务 下面我们介绍一下第三种方式
前面两节我们分别说了调用webservice的两种方式:
1.axis2客户端调用免费的webservice服务的实例之一通过wsdl生成客户端程序并本地调用
2.axis2客户端调用免费的webservice服务的实例之二纯手动调用免费天气预报webservice服务
下面我们介绍一下第三种方式:axis2使用RPC方式调用网上免费WebService
这种方式类似第二种方式,只是用到的类不同,但是这种方式感觉容易出问题。不多说,直接上代码
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; //使用webservice无参数的方法:getRegionProvince
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;//使用webservice有参数的方法:getSupportCityStringpublic 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开发