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);
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值