使用ksoap2 for android 调用WebService
1,建立WebService服务器
??? 这里使用Apache的axis2来建立WebService,并使用RPC的方式。
??? (1) 首先下载Axis,然后将解压后的webapp下面的东东拷贝到Tomcat的webapp下面,目录为/webapp/axis。去掉一些不相干的部署文本,如果classes下面的东东。
?? 写server-config.wsdd文件,放置到axis的WEB-INF目录下面。具体如下
<?xml?version="1.0"?encoding="UTF-8"?>
<deployment?xmlns="http://xml.apache.org/axis/wsdd/"
????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
????<globalConfiguration>
????????<parameter?name="sendMultiRefs"?value="true"?/>
????????<parameter?name="disablePrettyXML"?value="true"?/>
????????<parameter?name="dotNetSoapEncFix"?value="true"?/>
????????<parameter?name="enableNamespacePrefixOptimization"?value="false"?/>
????????<parameter?name="sendXMLDeclaration"?value="true"?/>
????????<parameter?name="sendXsiTypes"?value="true"?/>
????????<parameter?name="attachments.implementation"
????????????value="org.apache.axis.attachments.AttachmentsImpl"?/>
????</globalConfiguration>
????<handler?type="java:org.apache.axis.handlers.http.URLMapper"
????????name="URLMapper"?/>
????<service?name="HelloService"?provider="java:RPC">
????????<parameter?name="className"?value="cn.vaga.testws.HelloService"?/>
????????<parameter?name="scope"?value="request"?/>
????????<parameter?name="allowedMethods"?value="*"?/>
????????
????????<operation?name="sayHello"?qname="operNS:sayHello"?xmlns:operNS="http://testws.vaga.cn"?returnQName="sayHelloResult"?returnType="rtns:ListOfHello"?xmlns:rtns="http://testws.vaga.cn"?/>
?
????<typeMapping
???????xmlns:ns="http://localhost:8080/TestWS/services/HelloService"
???????qname="ns:ListOfHello"
???????type="java:java.lang.String[]"
???????serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
???????deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
???????encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
?????/>????
????????<messageReceiver
????????????class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"?/>
????????????
????</service>
????<transport?name="http">
????????<requestFlow>
????????????<handler?type="URLMapper"?/>
????????</requestFlow>
????</transport>
</deployment>?? (2) 写业务类HelloService.java
???1
package?cn.vaga.testws;

public?class?HelloService
{
????public?String[]?sayHello()
{
????????return?new?String[]
{"www","1232","12dd"};
????}
????
????public?String?sayHelloToPerson(String?name)
{
?????????if(name?==?null?||?"".equals(name))
{
??????????????name?=?"nobody";
?????????}
?????????
?????????return?"Hello?"?+?name;
????}
}??? 然后将编译好的class文件放置到axis/WEB-INF/classes下面,注意包结构。启动Tomcat。
?? (3) 在浏览器中输入http://192.168.1.110:8080/TestWS/services/HelloService?wsdl,OK,如果出现了XML代码表示你成功了。
2、使用ksoap2的客户端
???? (1) 建立客户端类
package?cn.vaga.testwsclient;
import?java.util.List;
import?java.util.Vector;
import?org.ksoap2.SoapEnvelope;
import?org.ksoap2.serialization.SoapObject;
import?org.ksoap2.serialization.SoapSerializationEnvelope;
import?org.ksoap2.transport.AndroidHttpTransport;
public?class?Client??
{
????private?static?final?String?NAMESPACE?=?"http://testws.vaga.cn";????
????private?static?String?URL?=?"http://192.168.1.110:8080/TestWS/services/HelloService";
????private?static?final?String?METHOD_NAME?=?"sayHello";
????private?static?String?SOAP_ACTION?=?NAMESPACE?+?"/"?+?METHOD_NAME;?
????public?static?String?getHello()?
{
????????try?
{
????????????SoapObject?rpc?=?new?SoapObject(NAMESPACE,?METHOD_NAME);
???????????//?rpc.addProperty("theCityName",?cityName);
????????????AndroidHttpTransport?ht?=?new?AndroidHttpTransport(URL);
????????????ht.debug?=?true;
????????????SoapSerializationEnvelope?envelope?=?new?SoapSerializationEnvelope(
????????????????????SoapEnvelope.VER11);
????????????
????????????envelope.bodyOut?=?rpc;
????????????envelope.dotNet?=?true;
????????????envelope.setOutputSoapObject(rpc);
????????????ht.call(SOAP_ACTION,?envelope);
????????????
//????????????debug(LOG_TAG,?"DUMP>>?"?+?ht.requestDump);
//????????????debug(LOG_TAG,?"DUMP<<?"?+?ht.responseDump);
????????????SoapObject?result?=?(SoapObject)?envelope.bodyIn;
????????????Vector?vrct?=?(Vector)?result.getProperty("sayHelloResult");
????????????for(int?i?=?0;?i?<?vrct.size();i++)
{
????????????????System.out.println(?vrct.get(i));
????????????}
????????????String?ss?=?"";
//???????????for(String?s?:?res){
//???????????????ss?+=?s;
//???????????}
???????????
???????????return?ss;
????????}?catch?(Exception?e)?
{
????????????e.printStackTrace();
????????}
????????return?null;
????}
}

??? (2) 建好后,写一个main方法调用它就可以了。
最后,ksoap2非常的小,一百多K吧,使用它我们可以在Android程序中方便的调用WebService,而不用加载那些庞大的jar包。
最后给一个ksoap2 for android的下载地址。