最近这个项目有很多xml和java class转换的内容。利用XStream,Java的泛型和反射特性做了一个工具类。
方案1.
package webService;
import java.lang.reflect.TypeVariable;
import com.thoughtworks.xstream.XStream;
public class Transformer2<E> {
Class<E> e;
public static void main(String[] args) {
Transformer2<RetailPriceRequest> t = new Transformer2<RetailPriceRequest>();
RetailPriceRequest o = new RetailPriceRequest();
o.setCompany("James dealer");
o.setSku("203948");
o.setQuantity(10);
String xml = t.getAsString(o);
System.out.println(xml);
System.out.println(t.getAsObject(xml).toString());
}
@SuppressWarnings("unchecked")
public Transformer2() {
TypeVariable<?> type = getClass().getTypeParameters()[0];
e= (Class<E>) type.getClass();
}
@SuppressWarnings("unchecked")
public E getAsObject(String xml) {
XStream xstream = new XStream();
xstream.alias(e.getSimpleName(),e);
return (E) xstream.fromXML(xml);
}
public String getAsString(Object o) {
XStream xstream = new XStream();
xstream.alias(e.getSimpleName(), e);
return xstream.toXML(o);
}
}
方案2.
package webService;
import com.thoughtworks.xstream.XStream;
public class Transformer {
// public E e;
Class cls;
public static void main(String[] args) {
Class cls = RetailPriceRequest.class;
Transformer t = new Transformer(cls);
RetailPriceRequest o = new RetailPriceRequest();
o.setCompany("James dealer");
o.setSku("203948");
o.setQuantity(10);
String xml = t.getAsString(o);
System.out.println(xml);
System.out.println(t.getAsObject(xml).toString());
}
public Transformer(Class cls) {
this.cls = cls;
}
public Transformer() {
}
public Object getAsObject(String xml) {
return getAsObject(xml, cls);
}
public String getAsString(Object o) {
return getAsString(o, cls);
}
public Object getAsObject(String xml, Class cls) {
XStream xstream = new XStream();
xstream.alias(cls.getSimpleName(), cls);
return xstream.fromXML(xml);
}
public String getAsString(Object o, Class cls) {
XStream xstream = new XStream();
xstream.alias(cls.getSimpleName(), cls);
return xstream.toXML(o);
}
}
分享到:
相关推荐
利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...
<br>1、利用泛型和集合,结合数据库实体进行操作以提高效率和封装性 2、动态生成所需的SQL增、删、改、查等语句对实体进行操作 3、上层操作可以不需要写SQL语句 4、实体赋值方便,只需设置需要更新的...
实例109 将xml文件节点绑定到treeview控件中 178 实例110 修改treeview控件的节点文本 179 第11章 c#面向对象高级技术 181 实例111 利用接口实现选择不同的语言 182 实例112 使用接口作为方法参数进行编程 184 实例...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit...