`
forhope
  • 浏览: 365749 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

ksoap2实现webservice工具类

 
阅读更多
package com.ksoaptest.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

/**
 * webservice处理类
 * @author raymon
 *
 */
public class WebServiceUtil {
	// 定义Web Service的命名空间
	static final String SERVICE_NAMESPACE = "http://192.168.20.159:8080/services/TestService";
	// 定义Web Service提供服务的URL
	static final String SERVICE_URL = "http://192.168.20.159:8080/services/TestService";
	
	/**
	 * 发送webservice请求,并返回特定对象链表
	 * @param method 方法名
	 * @param paramNames 参数列表
	 * @param paramValues 参数值列表
	 * @param responseClass 返回类
	 * @return
	 */
	public static List<Object> callService(String method, String [] paramNames, String [] paramValues, Class responseClass, boolean isArray){
		// 创建HttpTransportSE传输对象
		HttpTransportSE httpTranstation = new HttpTransportSE(SERVICE_URL);
		httpTranstation.debug = true;
		
		// 使用SOAP1.1协议创建Envelop对象
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		
		// 实例化SoapObject对象
		SoapObject soapObject = new SoapObject(SERVICE_NAMESPACE, method);
		
		// 设置webservice方法参数值
		for (int i = 0; i < paramNames.length; i++) {
			soapObject.addProperty(paramNames[i], paramValues[i]);
		}
		
		envelope.bodyOut = soapObject;
		try
		{
			// 调用Web Service
			httpTranstation.call(null, envelope);
			if (envelope.getResponse() != null)
			{
				// 获取服务器响应返回的SOAP消息
				SoapObject bodyIn = (SoapObject) envelope.bodyIn;
				SoapObject detail = (SoapObject) bodyIn.getProperty(method + "Return");
				return parseResponse(detail, responseClass, method, isArray);
			}
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 处理webservice回复,并返回对象列表
	 * @param result
	 * @param classes
	 * @param method
	 * @return List<Object>
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 */
	private static List<Object> parseResponse(SoapObject result, Class classes,String method, boolean isArray)
 throws InstantiationException,
			IllegalAccessException {
		List<Object> results = new ArrayList<Object>();

		if (isArray) {
			for (int i = 0; i < result.getPropertyCount(); i++) {
				Object instance = classes.newInstance();
				Field[] fields = classes.getDeclaredFields();

				for (int j = 0; j < fields.length; j++) {
					fields[j].setAccessible(true);
					String value = ((SoapObject) result.getProperty(i)).getProperty(fields[j].getName()).toString();
					setPropValue(instance, fields[j].getName(), value);
				}
				results.add(instance);
			}
		} else {
			Object instance = classes.newInstance();
			Field[] fields = classes.getDeclaredFields();

			for (int j = 0; j < fields.length; j++) {
				fields[j].setAccessible(true);
				String value = result.getProperty(fields[j].getName()).toString();
				setPropValue(instance, fields[j].getName(), value);
			}
			results.add(instance);
		}
		return results;
	}
	
	/**
	 * 反射设置对象的特定属性的值
	 * @param targetObj
	 * @param propName
	 * @param propValue
	 */
	public static void setPropValue(Object targetObj, String propName, Object propValue) {
		Class targetClass = targetObj.getClass();
		try {
			Class targetC = Class.forName(targetClass.getName());
			Field field = targetC.getDeclaredField(propName);
			field.setAccessible(true);
			if (field.getType().equals(Integer.class)) {
				field.set(targetObj,
						new Integer(Integer.valueOf(propValue.toString())));
			}
			if (field.getType().equals(int.class)) {
				field.setInt(targetObj, Integer.valueOf(propValue.toString()));
			}
			if (field.getType().equals(String.class)) {
				field.set(targetObj, propValue.toString());
			}
			if (field.getType().equals(double.class)) {
				field.setDouble(targetObj, Double.valueOf(propValue.toString()));
			}
			if (field.getType().equals(Double.class)) {
				field.set(targetObj,
						new Double(Double.valueOf(propValue.toString())));
			}
			if (field.getType().equals(float.class)) {
				field.setFloat(targetObj, Float.valueOf(propValue.toString()));
			}
			if (field.getType().equals(Float.class)) {
				field.set(targetObj,
						new Float(Float.valueOf(propValue.toString())));
			}
			if (field.getType().equals(Long.class)) {
				field.set(targetObj,
						new Long(Long.valueOf(propValue.toString())));
			}
			if (field.getType().equals(long.class)) {
				field.setFloat(targetObj, Long.valueOf(propValue.toString()));
			}
			if (field.getType().equals(short.class)) {
				field.setShort(targetObj, Short.valueOf(propValue.toString()));
			}
			if (field.getType().equals(Short.class)) {
				field.set(targetObj,
						new Short(Short.valueOf(propValue.toString())));
			}
			if (field.getType().equals(java.util.Date.class)) {
				field.set(targetObj, new Date(Date.parse(propValue.toString())));
			}
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
		}
	}
}
//转载请注明出处:http://forhope.iteye.com/blog/1461407
分享到:
评论
2 楼 essencer 2014-11-15  
line 57:
SoapObject detail = (SoapObject) bodyIn.getProperty(method + "Return");
======================
能强转成SoapObject吗?
1 楼 essencer 2014-11-15  
写得很好!
顺便问一下博主,webservice能否直接返回json字符串,然后可以直接用google提供的Gson工具将json String 转换为实体类对象呢?

相关推荐

    使用KSOAP2调用WebService

    本文将详细介绍如何在Android应用中使用KSOAP2来调用WebService。 首先,为了在Android项目中使用KSOAP2,你需要下载并添加对应的jar文件。你可以从Google Code仓库...

    axis+ksoap2开发webservice配置指南

    1. **创建Web服务**:编写Java类,实现你的业务逻辑,然后使用Axis的`wsdl2java`工具将WSDL(Web服务描述语言)文件转换为Java源代码。WSDL文件定义了服务接口、消息格式等。 2. **部署Web服务**:将生成的Java类...

    ksoap2向Webservice上传图片(Android端源代码)

    在这个场景下,`ksoap2`库是一个常用的工具,它允许我们与Web服务进行交互,包括那些基于`ASP.NET`构建的Web服务。本篇将详细介绍如何使用`ksoap2`在Android端向一个使用Base64编码的ASP.NET Web Service上传图片。 ...

    Android通过Ksoap2链接WebService上传图片的功能.doc

    在本场景中,我们将探讨如何使用Ksoap2库来连接WebService实现图片上传功能。Ksoap2是一个轻量级的库,它使得Android应用能够与SOAP Web服务进行通信。 首先,我们来了解一下开发环境。在这个例子中,使用的是...

    安卓Android源码——WebService+ksoap2天气查询项目.zip

    在这个项目中,ksoap2是实现天气查询的关键工具。 4. **项目结构**:通常,一个Android项目包含多个组件,如Activity(用户界面)、Service(后台服务)、BroadcastReceiver(广播接收器)等。此项目可能包含一个或...

    Android 中利用 ksoap2 调用 WebService的示例代码

    2. **创建网络访问工具类** 在Android应用中,通常会封装一个工具类来处理网络请求。以下是一个简单的`WebServiceUtil`类的示例,包含了调用WebService的基本逻辑: ```java import org.ksoap2.SoapEnvelope; ...

    ksoap2.jar 调用webservice

    总结,ksoap2.jar是Android开发者与Web Service交互的重要工具,通过它,我们可以轻松地调用远程Web Service方法,实现跨平台的数据交换。了解并掌握ksoap2的使用方法,对于开发涉及Web Service通信的Android应用来...

    java调用webservice(axis + ksoap2)

    本示例将详细介绍如何使用Axis和KSOAP2这两个库在Java环境中调用WebService。 首先,让我们理解一下标题中的两个关键组件: 1. **Axis**:Apache Axis是Apache软件基金会开发的一个开源项目,它提供了一个强大的...

    ksoap2 精简版jar包

    kSOAP2是一个轻量级的开源库,专为在移动设备上实现SOAP(Simple Object Access Protocol)服务调用而设计。在Android开发中,kSOAP2是常用的与Web服务交互的工具,它允许应用程序通过HTTP协议发送和接收SOAP消息。...

    啊ksoap2的3.2.0jar

    总之,kSOAP2 3.2.0是一个强大的工具,它使Android开发者能够轻松地与SOAP Web服务进行交互,实现了移动应用与服务器端的强大集成。通过熟练掌握kSOAP2的使用,开发者可以创建出能够利用Web服务功能的丰富Android...

    android_ksoap2_cxf_wss4j_authentication

    在提供的文件`wsserver2`和`cxf_webservice_android`中,很可能是服务器端的配置和Android客户端的示例代码,具体实现细节需参考这些文件内容。总的来说,实现Android客户端与使用Apache CXF和WSS4J的Web服务的认证...

    Android应用源码WebService+ksoap2天气查询项目.zip

    这个压缩包文件“Android应用源码WebService+ksoap2天气查询项目.zip”包含了使用Android平台进行Web服务调用,特别是天气查询的应用程序源代码。这里主要涉及的技术是Android开发和使用kSOAP2库来访问Web Service。...

    安卓调用WebService(ksoap2)-飞机航班Dome

    6. **工具类封装**:项目中可能包含一个工具类,用于封装与Web服务交互的相关逻辑,以提高代码的可读性和可维护性。这种封装包括构造SOAP请求,发送请求,处理响应等。 7. **错误处理**:在实际应用中,需要考虑...

    axis2搭建webService并包含android调用此WebService服务案例

    4. 在Eclipse中,右键项目 -&gt; `New -&gt; Other -&gt; Web Service -&gt; Axis2 Web Service`,按照向导设置服务名称、接口类和服务实现类。 5. 将项目部署到Tomcat服务器上,webService服务即部署成功。 #### android调用...

    android webserviceandroid webserviceandroid

    KSOAP2框架为Android开发者提供了一个简单且强大的工具来实现与服务器端的数据交换。通过具体代码示例的分析,我们可以更深入地理解WebService的工作原理及其实现过程。在实际开发中,合理利用WebService可以显著...

    WebService+ksoap2天气查询

    【WebService+ksoap2天气查询】是一个典型的Android应用开发案例,主要展示了如何在Android平台上通过ksoap2库调用远程的WebService服务,实现天气查询功能。这个案例对于Android开发者,特别是初学者来说,是非常有...

    Android 访问WebServicedemo

    在Android中,我们可以使用KSOAP2库来实现SOAP请求。KSOAP2是一个轻量级且易于使用的库,专门用于Android平台,支持SOAP 1.1和1.2协议。 以下是使用KSOAP2访问Web Service的基本步骤: 1. 引入KSOAP2库:在项目中...

Global site tag (gtag.js) - Google Analytics