接着,就是把jar包放到工程的WEB-INF/lib下,相信这个就不用我多说了吧 !
以下就是代码:
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class PutWeather
{
private String url = " http://www.webxml.com.cn/WebServices/WeatherWebService.asmx " ;
private String soapaction = " http://WebXml.com.cn/ " ; //域名,这是在server定义的
public PutWeather()
{
String City = " 北京 " ;
Service service = new Service();
try {
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName( new QName(soapaction, " getWeatherbyCityName " )); //设置要调用哪个方法
call.addParameter( new QName(soapaction, " theCityName " ), //设置要传递的参数
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType( new QName(soapaction, " getWeatherbyCityName " ),Vector. class ); //要返回的数据类型(自定义类型)
// call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//(标准的类型)
call.setUseSOAPAction( true );
call.setSOAPActionURI(soapaction + " getWeatherbyCityName " );
Vector v = (Vector)call.invoke( new Object[]{City});//调用方法并传递参数
for ( int i = 0 ;i < v.size();i ++ )
{
System.out.println(v.get(i));
}
} catch (Exception ex){ex.printStackTrace();}
}
public static void main(String args[])
{
PutWeather pw = new PutWeather();
}
}
我所调用的这个接口是免费使用的,但是会有限制就是在同意个ip在一天之内只能访问300次,实际我也没有试过真的去访问300次,也是听别人说的。
这个webservice会返回一个大小为23的字符串数组,因此在
call.setReturnType(new QName(soapaction,"getWeatherbyCityName"),Vector.class);
与下面的有所不同,这里设置的返回类型是自定义类型的,也就是没有jar包所提供的类型,因此要返回数组就只能用这种方式设置自定义类型了,如果想把返回的值强制转换为字符串数组会报异常。
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
关于axis2的将在过几天再发表,据说axis2要比axis的效率更加高喔!
本文介绍使用Java通过Apache Axis库调用WebService的方法,并提供了一个具体的示例代码,展示了如何获取指定城市的天气信息。

被折叠的 条评论
为什么被折叠?



