转载自:http://blog.csdn.net/xiaochunyong/article/details/7765338
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);
- }
- }
- }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。