android与服务端的访问设计层,webservice的解析



 android与服务端的服务架构,整体设计概念,模仿了ibatis的早期设计理念。

提供一个关于如何android解析webservice相应报文的解析工具,我大致概括了下,应该能够大致满足大家的需要,主要参考了ksoap2框架的api,进行再一次的封装。

package cc.ewell.mcs.portal.engine.parse;

import java.util.ArrayList;
import java.util.List;

import org.ksoap2.serialization.SoapObject;

public class KSoap2Utils {

	private static Object property;

	/**
	 * extract an int value from the soap response
	 * 
	 * @param response
	 * @param id
	 * @return
	 */
	public static int getInt(SoapObject response, String id) {

		String property = response.getProperty(id).toString();
		return Integer.valueOf(property).intValue();
	}

	public static long getLong(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Long.valueOf(property);
	}

	public static short getShort(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Short.valueOf(property);
	}

	public static byte getByte(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Byte.valueOf(property);
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param id
	 * @return
	 */
	public static float getFloat(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Float.valueOf(property);
	}

	public static double getDouble(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Double.valueOf(property);
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param id
	 * @return
	 */
	public static boolean getBoolean(SoapObject response, String id) {
		String property = response.getProperty(id).toString();
		return Boolean.valueOf(property);
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param id
	 * @return
	 */
	public static String getString(SoapObject response, String id) {
		if (response.getProperty(id) != null)

			return response.getProperty(id).toString();
		else
			return "null";
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param theClass
	 * @return
	 */
	public static Soapeabilisable getObject(SoapObject response,
			Soapeabilisable theClass) {
		return theClass.fromSoapResponse(response);
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param theClass
	 * @return
	 */
	public static List<Soapeabilisable> getArray(List<SoapObject> soapObjects,
			Soapeabilisable theClass) {
		List<Soapeabilisable> rets = new ArrayList<Soapeabilisable>(
				soapObjects.size());
		for (SoapObject record : soapObjects) {
			rets.add(getObject(record, theClass));
		}
		return rets;
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param theClass
	 * @return
	 */
	public static List<Soapeabilisable> getList(SoapObject response,
			Soapeabilisable theClass) {
		int recordsCount = response.getPropertyCount();
		List<Soapeabilisable> rets = new ArrayList<Soapeabilisable>();
		for (int i = 0; i < recordsCount; i++) {
			SoapObject record = (SoapObject) response.getProperty(i);
			rets.add(getObject(record, theClass));
		}
		return rets;
	}

	/**
	 * 
	 * 
	 * @param response
	 * @param theClass
	 * @return
	 */
	public static Soapeabilisable[] getArray(SoapObject response,
			Soapeabilisable theClass) {
		int recordsCount = response.getPropertyCount();
		Soapeabilisable[] rets = new Soapeabilisable[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			SoapObject record = (SoapObject) response.getProperty(i);
			rets[i] = getObject(record, theClass);
		}
		return rets;
	}

	/**
	 * 
	 * 
	 * @param response
	 * 
	 * @return Object[]
	 */
	public static Object[] getObjectArray(SoapObject response) {
		int recordsCount = response.getPropertyCount();
		Object[] rets = new Object[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			Object record = response.getProperty(i);
			rets[i] = record;
		}
		return rets;
	}

	public static String[] getStringArray(SoapObject response) {
		int recordsCount = response.getPropertyCount();
		String[] rets = new String[recordsCount];
		for (int i = 0; i < recordsCount; i++)
			rets[i] = response.getProperty(i).toString();
		return rets;
	}

	public static boolean[] getBooleanArray(SoapObject response) {
		int recordsCount = response.getPropertyCount();
		boolean[] rets = new boolean[recordsCount];
		for (int i = 0; i < recordsCount; i++)
			rets[i] = ((Boolean) response.getProperty(i)).booleanValue();
		return rets;
	}

	public static int[] getIntegerArray(SoapObject response) {
		String property = null;
		int recordsCount = response.getPropertyCount();
		int[] rets = new int[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			property = response.getProperty(i).toString();
			rets[i] = Integer.valueOf(property);
		}
		return rets;
	}

	public static long[] getLongArray(SoapObject response) {
		String property = null;
		int recordsCount = response.getPropertyCount();
		long[] rets = new long[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			property = response.getProperty(i).toString();
			rets[i] = Long.valueOf(property);
		}
		return rets;
	}

	public static short[] getShortArray(SoapObject response) {
		String property = null;
		int recordsCount = response.getPropertyCount();
		short[] rets = new short[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			property = response.getProperty(i).toString();
			rets[i] = Short.valueOf(property);
		}
		return rets;
	}

	public static byte[] getByteArray(SoapObject response) {
		int recordsCount = response.getPropertyCount();
		byte[] rets = new byte[recordsCount];
		for (int i = 0; i < recordsCount; i++)
			rets[i] = ((Byte) response.getProperty(i)).byteValue();
		return rets;
	}

	public static float[] getFloatArray(SoapObject response) {
		String property = null;
		int recordsCount = response.getPropertyCount();
		float[] rets = new float[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			property = response.getProperty(i).toString();
			rets[i] = Float.valueOf(property);
		}
		return rets;
	}

	public static double[] getDoubleArray(SoapObject response) {
		String property = null;
		int recordsCount = response.getPropertyCount();
		double[] rets = new double[recordsCount];
		for (int i = 0; i < recordsCount; i++) {
			property = response.getProperty(i).toString();
			rets[i] = Double.valueOf(property);
		}
		return rets;
	}

	private static String[] PRIMITIVE_TYPES = { "boolean", "int", "long",
			"short", "byte", "float", "double" };

	private static String[] PRIMITIVE_WRAPPER_TYPES = { "Boolean", "Integer",
			"Long", "Short", "Byte", "Float", "Double" };

	private static String[] PRIMITIVE_FETCH_VALUES = {
			"Boolean response = (Boolean) envelope.getResponse();",
			"Integer response = (Integer) envelope.getResponse();",
			"Long response = (Long) envelope.getResponse();",
			"Short response = (Short) envelope.getResponse();",
			"Byte response = (Byte) envelope.getResponse();",
			"Float response = (Float) envelope.getResponse();",
			"Double response = (Double) envelope.getResponse();" };

	private static String[] PRIMITIVE_RETURN_VALUES = {
			"return response.booleanValue();", "return response.intValue();",
			"return response.longValue();", "return response.shortValue();",
			"return response.byteValue();", "return response.floatValue();",
			"return response.doubleValue();" };

	private static String[] PRIMITIVE_RETURN_FAULT_VALUES = { "return false;",
			"return 0;", "return 0;", "return 0;", "return 0;", "return 0;",
			"return 0;" };

	private static int findPrimitiveTypeIndex(String typeName) {
		for (int i = 0; i < PRIMITIVE_TYPES.length; i++)
			if (typeName.equals(PRIMITIVE_TYPES[i]))
				return i;
		return -1;
	}

	public static String getWrapperClassName(String typeName) {
		int i = findPrimitiveTypeIndex(typeName);
		if (i != -1)
			return PRIMITIVE_WRAPPER_TYPES[i];
		else
			return null;
	}

	public static boolean isPrimitiveType(String typeName) {
		return findPrimitiveTypeIndex(typeName) != -1;
	}

	public static boolean isArrayType(String typeName) {
		return typeName.indexOf("[]") >= 0;

	}

	public static boolean isStringType(String typeName) {
		return typeName.endsWith("String");

	}

	public static boolean isWrapperType(String typeName) {
		String shortTypeName = getBaseType(typeName);

		for (int i = 0; i < PRIMITIVE_WRAPPER_TYPES.length; i++)
			if (shortTypeName.equals(PRIMITIVE_WRAPPER_TYPES[i]))
				return true;
		return false;

	}

	public static String getPrimitiveTypeFetchValue(String typeName) {
		int i = findPrimitiveTypeIndex(typeName);
		if (i != -1)
			return PRIMITIVE_FETCH_VALUES[i];
		else
			return "";
	}

	public static String getPrimitiveTypeReturnValue(String typeName,
			boolean fault) {
		int i = findPrimitiveTypeIndex(typeName);
		if (i != -1)
			return fault ? PRIMITIVE_RETURN_FAULT_VALUES[i]
					: PRIMITIVE_RETURN_VALUES[i];
		else
			return "";
	}

	public static String getBaseType(String typeName) {
		String ret = typeName.substring(typeName.lastIndexOf('.') + 1);
		return ret.replace("[]", "");
	}

}

猜你喜欢

转载自cywhoyi.iteye.com/blog/1901502