以调用http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl的天气预报为例:
1.代码
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class WeatherWebService {
public static String[] getWeather(String cityCode)
{
// http://WebXml.com.cn/是wsdl中definitions根节点的targetNamespace属性
// webservice路径
// 这里后面加不加 "?wsdl" 效果都一样的
String endpoint = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl";
String[] res = null;
// 查询城市天气的接口方法名
String operationName = "getWeather";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call;
try {
call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称
call.setOperationName(new QName("http://WebXml.com.cn/",
operationName));
// 设置方法参数
call.addParameter(new QName("http://WebXml.com.cn/", "theCityCode"),
org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.addParameter(new QName("http://WebXml.com.cn/", "theUserID"),
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/" + "getWeather");
try {
res = (String[]) call.invoke(new Object[] { cityCode, "" });
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
// Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
public static void main(String args[]) throws RemoteException {
String res[] = getWeather("2013"); //上海
for (String str : res) {
System.out.println(str);
}
}
}
2.运行结果:
直辖市 上海
上海
2013
2010/01/11 14:21:05
今日天气实况:气温:1.9℃;风向/风力:西南风 小于3级;湿度:91%;气压:1027.1hPa
空气质量:良;紫外线强度:最弱
穿衣指数:天气寒冷,建议着厚羽绒服、毛皮大衣加厚毛衣等隆冬服装。年老体弱者尤其要注意保暖防冻。
感冒指数:将有一次强降温过程,天气寒冷,且风力较强,极易发生感冒,请特别注意增加衣服保暖防寒。
晨练指数:有雪,风力稍大,早晨天气寒冷,请避免户外晨练,建议在室内做适当锻炼,保持身体健康。
洗车指数:不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。
晾晒指数:有降水,不适宜晾晒。如果非晾晒不可,请在室内准备出充足的空间。
旅游指数:风稍大,稍冷,有雨夹雪,旅游指数一般,但做好保暖措施还是可以出去欣赏雪景的,出行请注意携带雨具。
路况指数:有雨夹雪,路面湿滑,车辆易打滑,请保持车距,减慢车速,小心驾驶。
舒适度指数:白天天气较凉,且风力较强,同时在降雨天气的伴随下,会使您感觉偏冷,不很舒适,请注意添加衣物。
1月11日 雨夹雪转阴
0℃/3℃
北风4-5级
6.gif
2.gif
1月12日 多云
-2℃/4℃
西北风4-5级
1.gif
1.gif
1月13日 晴转多云
-2℃/3℃
西北风4-5级转东北风3-4级
0.gif
1.gif
1月14日 晴转多云
4℃/10℃
南风微风转3-4级
0.gif
1.gif
1月15日 多云转阴
5℃/8℃
东北风3-4级
1.gif
2.gif