最近这个项目有很多xml和java class转换的内容。利用XStream,Java的泛型和反射特性做了一个工具类。
方案1.
方案2.
方案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);
}
}