使用ksoap2 调用 WebService(实例:调用天气预报服务)

ksoap2是一个soap web service客户端包。主要用于资源受限制的Java环境如Applets或J2ME应用程序以及Android等等(CLDC/ CDC/MIDP)。
ksoap2-android这个开源项目为Android平台提供了一个轻量级和高效的SOAP类库。它是kSOAP2的一个分枝。本文以ksoap2-android的jar包来调用webservice


ksoap2-j2me 项目地址:http://sourceforge.net/projects/ksoap2/

ksoap2-j2me 当前最新版本为2.1.2  下载地址:ksoap2-j2me-core-2.1.2.jar

ksoap2-android 项目地址:http://code.google.com/p/ksoap2-android/

ksoap2-android 当前最新版本为2.6.5 下载地址:ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar


个人认为ksoap2和axis2或xfire等有几个区别:

1、axis2和xfire而ksoap2则非常小,只有150kb左右,所以ksoap2主要应用于资源受限制的java环境。

2、axis2 可以都会通过wsdl去生成客户端代码。但是ksoap2 得自己手动编写客户端代码(不过也非常简单就是);


下面我以ksoap2-android来调用天气预报web服务:

首先我们找一个免费的天气预报Web服务,通过Google搜索,我找到的是:

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx


从这个服务的后缀名我们可以知道,这个Web服务是由.net开发的,之后再程序中需要做一些小的设置(如果是java开发的,后缀名为jws,后缀名为wcf的也是.net开发)

这个天气预报的服务提供了5个操作,我们就调用第四个getWeatherbyCityName,我们点击服务说明,看看这个天气预报的wsdl


从文档中,我们可以获得wsdl的uri,namespace,以及soap协议版本号

再往下拉动滚动条,找到我们要调用的方法的描述:


可以得到方法名称,参数键,类型

参数键可以理解为:http://localhost:8080/myapp/a.jsp?theCityName=xxxx   类似于这个

代码:

package com.xcy.client;

import java.io.IOException;

import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

/**
 * @author Siuon
 * @version 1.0
 * @create 2012-7-19 下午11:54:00
 */
public class Client {
	public static void main(String[] args) throws IOException, XmlPullParserException {
		String WSDL_URI = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL";//wsdl 的uri
		String namespace = "http://WebXml.com.cn/";//namespace
		String methodName = "getWeatherbyCityName";//要调用的方法名称
		
		SoapObject request = new SoapObject(namespace, methodName);
		request.addProperty("theCityName", "上海");//参数
		
		
		//创建SoapSerializationEnvelope 对象,同时指定soap版本号(之前在wsdl中看到的)
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);
		envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut
		envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true
		
		HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI);
		httpTransportSE.call(null, envelope);//调用
		
		SoapObject response = (SoapObject) envelope.getResponse();//获得返回对象
		if(response!=null){
			System.out.println(response);
		}
		
	}
}

结果:

anyType{string=直辖市; string=上海; string=58367; string=58367.jpg; string=2012-7-20 0:24:35; string=27℃/34℃; string=7月20日 雷阵雨转多云; string=东南风3-4级; string=4.gif; string=1.gif; string=今日天气实况:气温:28℃;风向/风力:西风 1级;湿度:77%;空气质量:良;紫外线强度:中等; string=穿衣指数:天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。
感冒指数:暂无。
运动指数:有降水,风力较强,较适宜在户内开展低强度运动,若坚持户外运动,请选择避雨防风地点。
洗车指数:不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。
晾晒指数:有降水,不适宜晾晒。若需要晾晒,请在室内准备出充足的空间。
旅游指数:风稍大,较热。有雷阵雨,外出请注意防雷并携带雨具,注意防暑降温。
路况指数:有降水,路面潮湿,车辆易打滑,请小心驾驶。
舒适度指数:天气较热,虽然有降水,但仍然无法削弱较高气温给人们带来的暑意,这种天气会让您感到不很舒适。
空气污染指数:气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。
紫外线指数:属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。; string=28℃/35℃; string=7月21日 多云转晴; string=东南风3-4级转4-5级; string=1.gif; string=0.gif; string=28℃/36℃; string=7月22日 多云转晴; string=东南风4-5级; string=1.gif; string=0.gif; string=上海简称:沪,位置:上海地处长江三角洲前缘,东濒东海,南临杭州湾,西接江苏,浙江两省,北界长江入海,正当我国南北岸线的中部,北纬31°14′,东经121°29′。面积:总面积7823.5平方公里。人口:人口1000多万。上海丰富的人文资源、迷人的城市风貌、繁华的商业街市和欢乐的节庆活动形成了独特的都市景观。游览上海,不仅能体验到大都市中西合壁、商儒交融、八方来风的氛围,而且能感受到这个城市人流熙攘、车水马龙、灯火璀璨的活力。上海在中国现代史上占有着十分重要的地位,她是中国共产党的诞生地。许多震动中外的历史事件在这里发生,留下了众多的革命遗迹,处处为您讲述着一个个使人永不忘怀的可歌可泣的故事,成为包含民俗的人文景观和纪念地。在上海,每到秋祭,纷至沓来的人们在这里祭祀先烈、缅怀革命历史,已成为了一种风俗。大上海在中国近代历史中,曾是风起云涌可歌可泣的地方。在这里荟萃多少风云人物,散落在上海各处的不同住宅建筑,由于其主人的非同寻常,蕴含了耐人寻味的历史意义。这里曾留下许多革命先烈的足迹。瞻仰孙中山、宋庆龄、鲁迅等故居,会使您产生抚今追昔的深沉遐思,这里还有无数个达官贵人的住宅,探访一下李鸿章、蒋介石等人的公馆,可以联想起主人那段显赫的发迹史。; }


猜你喜欢

转载自blog.csdn.net/xiaochunyong/article/details/7765338