`
dontsan
  • 浏览: 39903 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

xml 绑定,泛型和反射一例

阅读更多
最近这个项目有很多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控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    Winson.Framework 1.0发布!

    &lt;br&gt;1、利用泛型和集合,结合数据库实体进行操作以提高效率和封装性 2、动态生成所需的SQL增、删、改、查等语句对实体进行操作 3、上层操作可以不需要写SQL语句 4、实体赋值方便,只需设置需要更新的...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例109 将xml文件节点绑定到treeview控件中 178 实例110 修改treeview控件的节点文本 179 第11章 c#面向对象高级技术 181 实例111 利用接口实现选择不同的语言 182 实例112 使用接口作为方法参数进行编程 184 实例...

    JAVA上百实例源码以及开源项目源代码

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    整理后java开发全套达内学习笔记(含练习)

    Reflection [java] 反射 [ri'flekʃәn] script n.手写体,小型程序 [skript] serialized vt.序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit...

Global site tag (gtag.js) - Google Analytics