android中调用webservice

上篇文章发布的webservice访问地址为http://localhost:8090/xfireDemo/services/hellowebservice?wsdl
这里我使用ksoap开源jar包去调用它,测试成功,主要代码为

String namespace = "http://kevin.com";
// 服务器发布的url
String url = "http://10.0.2.2:8090/xfireDemo/services/hellowebservice";
// 使用c#写的webservice
// String endPoint =
// "http://webservice.webxml.com.cn/WebService/MobileCodeWS.asmx";
String methodName = "sayHello"; // 函数名
String soupaction = namespace + "/" + methodName;
// 指定WebService的命名空间和函数名
SoapObject soapObject = new SoapObject(namespace, methodName);
// 设置调用方法参数的值,经测试,此处还变量名好像没关系,貌似和顺序是相关的
soapObject.addProperty("message", "testkevinqiang");
HttpTransportSE transport = new HttpTransportSE(url);
// 版本号向下兼容,SOAP协议版本号,与你要调用的webService中版本号一致
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = soapObject;

// 经测试,即使访问的是我java发布的webservice,设置为true也可以
envelope.dotNet = true;
// 经测试,setoutputsoapobject作用和bodyout一样
envelope.setOutputSoapObject(soapObject);
// 使用call方法调用WebService方法

try {
transport.call(soupaction, envelope);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

SoapObject sb = (SoapObject) envelope.bodyIn;
xmlMessage = sb.getProperty(0).toString(); // 获取从服务器端返回的XML字符串

Message message = hd.obtainMessage();
hd.sendMessage(message);
}
}

详解接附件。

[color=red]其他的一些访问方式。[/color]1.使用HttpClient

用到的jar文件:commons-httpclient-3.1.jar

方法:
预先定义好Soap请求数据,可以借助于XMLSpy Professional软件来做这一步生成。

String soapRequestData = "<?xml version=/"1.0/" encoding=/"utf-8/"?>" +

"<soap12:Envelope xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/" xmlns:soap12=/"http://www.w3.org/2003/05/soap-envelope/">" +

"<soap12:Body>" +

" <getCountryCityByIp xmlns=/"http://WebXml.com.cn//">" +

" <theIpAddress>219.137.167.157</theIpAddress>" +

" </getCountryCityByIp>" +

" </soap12:Body>" +

"</soap12:Envelope>";

然后定义一个PostMethod,这时需要指定web服务的Url;

PostMethod postMethod = new PostMethod(“http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx”);

然后把Soap请求数据添加到PostMethod中

byte[] b = soapRequestData.getBytes("utf-8");

InputStream is = new ByteArrayInputStream(b,0,b.length);

RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");

postMethod.setRequestEntity(re);

最后生成一个HttpClient对象,并发出postMethod请求

HttpClient httpClient = new HttpClient();

statusCode = httpClient.executeMethod(postMethod);

String soapRequestData = postMethod.getResponseBodyAsString();

soapRequestData就是调用web服务的Soap响应数据,是xml格式的,可以通过解析soapRequestData来获得调用web服务的返回值。
[color=red][u][b]
这种方式最好在java程序中使用,android中还是推荐ksoap2方式。
下班的xfire客户端更是仅在java project中使用。[/b][/u][/color]
2.使用Xfire

用到的jar文件xfire-all-1.2.4.jar, jdom-1.0.jar

方法:

定义一个Client对象,指定web服务的wsdl的地址

Client c = new Client(new URL(“http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl”));

调用Client对象的invoke方法,指定web服务的方法名,和参数,返回值是一个Object型的数组。

下面代码调用getVersionTime方法,这个方法没有参数用所以后一个参数使用new Object[0]。

Object[] results = c.invoke(“getVersionTime”, new Object[0]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值