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);
			}
		}

详解接附件。

其他的一些访问方式。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服务的返回值。

这种方式最好在java程序中使用,android中还是推荐ksoap2方式。
下班的xfire客户端更是仅在java project中使用。

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]);

你可能感兴趣的:(webservice)