`
c125543072
  • 浏览: 30123 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

对象转换类(webservice object)

阅读更多
package hotbox.smis.service.webcall;

import hotbox.smis.query.QueryObject;
import hotbox.smis.query.SearchItem;

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

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class WSObjectConverter {

	public static void copyFormWSQueryObjectProperty(Object wsQuery,
			QueryObject query) {
		copyFromWSObjectProperty(wsQuery, query);
		try {
			List<Object> val = (List<Object>) wsQuery.getClass().getMethod(
					"getSearchItems").invoke(wsQuery);
			SearchItem[] items = new SearchItem[val.size()];
			for (int i = 0; i < val.size(); i++) {
				copyFromWSObjectProperty(val.get(i), items[i]);
			}

			query.setSearchItems(items);
		} catch (Exception e) {

		}
	}

	/**
	 * 将本地query拷贝到wsquery
	 * 
	 * @param query
	 * @param wsQuery
	 * @param wsSearchItem
	 */
	public static void copyToWSQueryObjectProperty(QueryObject query,
			Object wsQuery, Class wsSearchItem) {
		copyToWSObjectProperty(query, wsQuery);
		try {
			List<Object> val = (List<Object>) wsQuery.getClass().getMethod(
					"getSearchItems").invoke(wsQuery);

			for (int i = 0; i < query.getSearchItems().length; i++) {
				Object newobj = wsSearchItem.getConstructor().newInstance();
				copyToWSObjectProperty(query.getSearchItems()[i], newobj);

				val.add(newobj);
			}

		} catch (Exception e) {

		}
	}

	/**
	 * 拷贝WSOBJECT里面的属性到目标对象LIST(只做浅层拷贝)
	 * 
	 * @param wsObj
	 * @param dest
	 */
	public static void copyFormWSObjectProperty(List wsList, List list,
			Class objClass) {
		try {
			Object obj = null;
			for (int i = 0; i < wsList.size(); i++) {
				obj = objClass.getConstructor().newInstance();
				copyFromWSObjectProperty(wsList.get(i), obj);
				list.add(obj);
			}
		} catch (Exception e) {

		}
	}

	/**
	 * 拷贝WSOBJECT里面的属性到目标对象(只做浅层拷贝)
	 * 
	 * @param wsObj
	 * @param dest
	 */
	@SuppressWarnings("deprecation")
	public static void copyFromWSObjectProperty(Object wsObj, Object dest) {
		try {
			Class destCls = dest.getClass();
			Class srcCls = wsObj.getClass();
			for (Field field : wsObj.getClass().getDeclaredFields()) {
				try {
					String fieldName = field.getName();
					String setMethodName = "set"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1, fieldName.length());
					String getMethodName = "get"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1, fieldName.length());

					Object val = srcCls.getMethod(getMethodName).invoke(wsObj);
					if (val != null) {
						if (val instanceof XMLGregorianCalendar) {
							XMLGregorianCalendar xmlDate = (XMLGregorianCalendar) val;
							java.util.Calendar calendar = java.util.Calendar
									.getInstance();
							calendar.set(xmlDate.getYear(),
									xmlDate.getMonth() - 1, xmlDate.getDay(),
									xmlDate.getHour(), xmlDate.getMinute(),
									xmlDate.getSecond());
							destCls.getMethod(setMethodName, Date.class)
									.invoke(dest, calendar.getTime());
						} else {
							destCls.getMethod(setMethodName, field.getType())
									.invoke(dest, val);
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 将对象属性拷贝到WSObjectLIST(只做浅层拷贝)
	 * 
	 * @param src
	 * @param wsObj
	 */
	public static void copyToWSObjectProperty(List<Object> srcList,
			List<Object> wsObjList) {
		try {
			for (int i = 0; i < wsObjList.size(); i++) {
				copyToWSObjectProperty(srcList.get(i), wsObjList.get(i));
			}
		} catch (Exception e) {

		}
	}

	/**
	 * 将对象属性拷贝到WSObject(只做浅层拷贝)
	 * 
	 * @param src
	 * @param wsObj
	 */
	public static void copyToWSObjectProperty(Object src, Object wsObj) {
		try {
			Class destCls = wsObj.getClass();
			Class srcCls = src.getClass();
			for (Field field : src.getClass().getDeclaredFields()) {
				try {
					String fieldName = field.getName();
					String setMethodName = "set"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1, fieldName.length());
					String getMethodName = "get"
							+ fieldName.substring(0, 1).toUpperCase()
							+ fieldName.substring(1, fieldName.length());

					Object val = srcCls.getMethod(getMethodName).invoke(src);
					if (val != null) {
						if (val instanceof Date) {
							Calendar calendar = Calendar.getInstance();
							calendar.setTime((Date) val);
							javax.xml.datatype.DatatypeFactory dtf = null;
							try {
								dtf = javax.xml.datatype.DatatypeFactory
										.newInstance();
							} catch (DatatypeConfigurationException e) {
								e.printStackTrace();
							}
							XMLGregorianCalendar dateArgs = dtf
									.newXMLGregorianCalendar(calendar
											.get(calendar.YEAR), calendar
											.get(calendar.MONTH) + 1, calendar
											.get(calendar.DAY_OF_MONTH),
											calendar.get(calendar.HOUR),
											calendar.get(calendar.MINUTE),
											calendar.get(calendar.SECOND),
											calendar.get(calendar.MILLISECOND),
											calendar.get(calendar.ZONE_OFFSET)
													/ (1000 * 60));
							destCls.getMethod(setMethodName, Object.class)
									.invoke(wsObj, dateArgs);
						} else if (val instanceof SearchItem[]) {
							destCls
									.getMethod(setMethodName,
											SearchItem[].class).invoke(wsObj,
											val);
						} else {
							destCls.getMethod(setMethodName, field.getType())
									.invoke(wsObj, val);
						}
					}
				} catch (Exception e) {
				}
			}
		} catch (Exception e) {

		}
	}
}

分享到:
评论

相关推荐

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    二、XML到Java对象转换 1. 创建XML Schema(XSD)文件:首先,我们需要定义XML的数据结构,这通常通过创建一个XML Schema文件来完成。XSD文件定义了XML文档的元素、属性及其约束。 2. 生成Java类:使用JAXB工具(如...

    WebService CXF 对象传递 附

    例如,如果输入参数是`MyObject`,CXF会利用JAXB将其从XML字符串转换为Java对象。 - **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`...

    InvokeWebService 动态访问WebService帮助类

    5. **结果处理**:返回Web服务调用的结果,可能是原始的XML数据,也可能是通过JAXB自动转换成的Java对象,这取决于服务的响应内容。 在实际应用中,InvokeWebService帮助类可能还包括日志记录、性能监控、安全控制...

    JSON返回值格式的WebService样例

    在大多数编程语言中,都有现成的库或框架支持JSON序列化,例如在Java中我们可以使用Jackson或Gson库,在Python中可以使用json模块,将数据对象转换成JSON字符串。 例如,假设我们有一个用户表,包含id、name和email...

    JAXB工具类 xml转为java对象 java对象转为xml

    2. **Marshaller**: 将Java对象转换为XML文档。 3. **Binder**: 用于在Java类和XML Schema之间建立映射关系。 ### XML到Java对象的转换 要将XML转换为Java对象,首先需要一个对应的Java类,该类的字段与XML元素...

    webservice接口调用工具类依赖jar包

    7. **jaxb-api.jar**,**jaxb-impl.jar** 和 **jaxb-core.jar**:Java绑定框架(JAXB),用于XML和Java对象之间的转换。 8. **xml-apis.jar** 和 **xercesImpl.jar**:XML解析相关的库,如Xerces,用于处理XML文档...

    android webservice 对象序列化例子

    **对象序列化** 是将Java对象转换为可以存储或传输的数据格式的过程。在Android中,这通常是将对象转换为XML或JSON字符串,以便通过HTTP请求发送到Web服务。对于SOAP Web服务,XML是主要的数据交换格式。对象序列化...

    WebService传递对象与集合问题.rar

    本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...

    android调用webservice 的对象序列化代码

    对象序列化是将Java对象转换为可以在网络上传输的格式(如XML或JSON)的过程,而反序列化则是将接收到的数据还原为对象。在这个项目中,我们将探讨如何在Android中实现对WebService的调用,并涉及对象序列化。 首先...

    WebService工具类

    WebService基于开放的、标准化的技术,如XML(可扩展标记语言)、SOAP(简单对象访问协议)、WSDL(Web服务描述语言)以及UDDI(统一描述、发现和集成)。在本压缩包中,提供的“axis”可能是指Apache Axis,这是一...

    java调用json参数的webservice

    2. 使用诸如net.sf.json JSONObject类(一个流行的Java库,用于处理JSON数据)来将JSON格式字符串转换为JSON对象。转换后,服务端可以通过指定的键(key)来获取JSON对象中的值。 3. 在Java客户端,调用WebService...

    C# WebService 客户端 服务器 Json

    1. 数据序列化与反序列化:在C#中,可以使用`System.Web.Script.Serialization`命名空间下的`JavaScriptSerializer`类将C#对象转换为Json字符串,反之亦然。例如: ```csharp JavaScriptSerializer serializer = new...

    动态调取webservice返回json数据并处理

    1. 解析JSON:使用JSON库(如JavaScriptSerializer, Newtonsoft.Json的Json.NET等)将接收到的JSON字符串转换为C#对象。例如,如果JSON数据表示一个数组,可以解析成List;如果表示一个对象,可以解析成自定义的类...

    通过webservice连接数据库

    这通常涉及使用`SoapObject`类来创建请求对象,并设置其属性。 2. **构建SOAP envelop**:然后,你需要创建一个`SoapSerializationEnvelope`对象,用于包装SOAP请求。在这个envelop中,你可以设置SOAP版本和请求...

    CXF webService 工具类

    - **服务发布**:简化Web服务的发布流程,将Java类转换为可供调用的服务。 - **服务调用**:提供便捷的API,用于创建并执行服务请求,获取响应。 - **数据绑定**:帮助将XML消息自动映射到Java对象,反之亦然,...

    c++调用webservice(包括静态和动态以及webservice源码)

    gsoap生成C++类和函数,这些类和函数可以直接在C++代码中调用来访问WebService。开发者需要先从WSDL文件生成gsoap的输入文件,然后使用gsoap工具生成C++客户端代码。调用过程主要包括解析SOAP消息,创建请求,发送...

    c# httpwebrequest调用webservice demo

    WebService通常使用SOAP(Simple Object Access Protocol)作为通信协议的标准格式。 ##### 1.2 SOAP消息结构 SOAP消息是一个普通的XML文档,包含以下四个定义的部分: - **信封** (Envelope):提供消息的基本框架...

    webservice下对json文件的操作

    可以使用JSON库将Java对象转换为JSON字符串,或将接收到的JSON字符串反序列化为Java对象。 3. **部署WebService**:在MyEclipse中,可以通过右键点击项目,选择"New -&gt; Other -&gt; Web Service -&gt; Dynamic Web ...

    Delphi调用C#的Webservice返回Dataset

    因此,我们需要在C# Webservice中将Dataset转换为通用的XML或者自定义的类结构,然后在Delphi端再反序列化回来。这个过程可能涉及到数据类型转换和错误处理。 在实际开发过程中,还需要考虑性能优化、错误处理、...

    WebService传XML 简单实例

    3. `XmlDataDocument`:用于处理XML数据的.NET类,可与`DataSet`相互转换。 4. 异步调用:了解.NET的异步编程模型,如何使用`BeginXXX`和`EndXXX`方法进行异步调用。 5. 数据绑定:如何将数据源(如`DataSet`)绑定...

Global site tag (gtag.js) - Google Analytics