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) {
}
}
}
分享到:
相关推荐
二、XML到Java对象转换 1. 创建XML Schema(XSD)文件:首先,我们需要定义XML的数据结构,这通常通过创建一个XML Schema文件来完成。XSD文件定义了XML文档的元素、属性及其约束。 2. 生成Java类:使用JAXB工具(如...
例如,如果输入参数是`MyObject`,CXF会利用JAXB将其从XML字符串转换为Java对象。 - **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`...
5. **结果处理**:返回Web服务调用的结果,可能是原始的XML数据,也可能是通过JAXB自动转换成的Java对象,这取决于服务的响应内容。 在实际应用中,InvokeWebService帮助类可能还包括日志记录、性能监控、安全控制...
在大多数编程语言中,都有现成的库或框架支持JSON序列化,例如在Java中我们可以使用Jackson或Gson库,在Python中可以使用json模块,将数据对象转换成JSON字符串。 例如,假设我们有一个用户表,包含id、name和email...
2. **Marshaller**: 将Java对象转换为XML文档。 3. **Binder**: 用于在Java类和XML Schema之间建立映射关系。 ### XML到Java对象的转换 要将XML转换为Java对象,首先需要一个对应的Java类,该类的字段与XML元素...
7. **jaxb-api.jar**,**jaxb-impl.jar** 和 **jaxb-core.jar**:Java绑定框架(JAXB),用于XML和Java对象之间的转换。 8. **xml-apis.jar** 和 **xercesImpl.jar**:XML解析相关的库,如Xerces,用于处理XML文档...
**对象序列化** 是将Java对象转换为可以存储或传输的数据格式的过程。在Android中,这通常是将对象转换为XML或JSON字符串,以便通过HTTP请求发送到Web服务。对于SOAP Web服务,XML是主要的数据交换格式。对象序列化...
本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...
对象序列化是将Java对象转换为可以在网络上传输的格式(如XML或JSON)的过程,而反序列化则是将接收到的数据还原为对象。在这个项目中,我们将探讨如何在Android中实现对WebService的调用,并涉及对象序列化。 首先...
WebService基于开放的、标准化的技术,如XML(可扩展标记语言)、SOAP(简单对象访问协议)、WSDL(Web服务描述语言)以及UDDI(统一描述、发现和集成)。在本压缩包中,提供的“axis”可能是指Apache Axis,这是一...
2. 使用诸如net.sf.json JSONObject类(一个流行的Java库,用于处理JSON数据)来将JSON格式字符串转换为JSON对象。转换后,服务端可以通过指定的键(key)来获取JSON对象中的值。 3. 在Java客户端,调用WebService...
1. 数据序列化与反序列化:在C#中,可以使用`System.Web.Script.Serialization`命名空间下的`JavaScriptSerializer`类将C#对象转换为Json字符串,反之亦然。例如: ```csharp JavaScriptSerializer serializer = new...
1. 解析JSON:使用JSON库(如JavaScriptSerializer, Newtonsoft.Json的Json.NET等)将接收到的JSON字符串转换为C#对象。例如,如果JSON数据表示一个数组,可以解析成List;如果表示一个对象,可以解析成自定义的类...
这通常涉及使用`SoapObject`类来创建请求对象,并设置其属性。 2. **构建SOAP envelop**:然后,你需要创建一个`SoapSerializationEnvelope`对象,用于包装SOAP请求。在这个envelop中,你可以设置SOAP版本和请求...
- **服务发布**:简化Web服务的发布流程,将Java类转换为可供调用的服务。 - **服务调用**:提供便捷的API,用于创建并执行服务请求,获取响应。 - **数据绑定**:帮助将XML消息自动映射到Java对象,反之亦然,...
gsoap生成C++类和函数,这些类和函数可以直接在C++代码中调用来访问WebService。开发者需要先从WSDL文件生成gsoap的输入文件,然后使用gsoap工具生成C++客户端代码。调用过程主要包括解析SOAP消息,创建请求,发送...
WebService通常使用SOAP(Simple Object Access Protocol)作为通信协议的标准格式。 ##### 1.2 SOAP消息结构 SOAP消息是一个普通的XML文档,包含以下四个定义的部分: - **信封** (Envelope):提供消息的基本框架...
可以使用JSON库将Java对象转换为JSON字符串,或将接收到的JSON字符串反序列化为Java对象。 3. **部署WebService**:在MyEclipse中,可以通过右键点击项目,选择"New -> Other -> Web Service -> Dynamic Web ...
因此,我们需要在C# Webservice中将Dataset转换为通用的XML或者自定义的类结构,然后在Delphi端再反序列化回来。这个过程可能涉及到数据类型转换和错误处理。 在实际开发过程中,还需要考虑性能优化、错误处理、...
3. `XmlDataDocument`:用于处理XML数据的.NET类,可与`DataSet`相互转换。 4. 异步调用:了解.NET的异步编程模型,如何使用`BeginXXX`和`EndXXX`方法进行异步调用。 5. 数据绑定:如何将数据源(如`DataSet`)绑定...