Xstream序列化实体
Java序列化的日期为是很标准,XStream中转换为标准的做法
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class DateConverter implements Converter {
private Locale locale;
public DateConverter(Locale locale) {
super();
this.locale = locale;
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
Date date = (Date) value;
DateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS");
// DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,
// this.locale);
// 在这写输出的格式
writer.setValue(formatter.format(date));
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
GregorianCalendar calendar = new GregorianCalendar();
DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,
this.locale);
try {
calendar.setTime(formatter.parse(reader.getValue()));
} catch (ParseException e) {
throw new ConversionException(e.getMessage(), e);
}
return calendar;
}
@Override
public boolean canConvert(Class clazz) {
// return Calendar.class.isAssignableFrom(clazz);
return Date.class.isAssignableFrom(clazz);
}
}
去掉Java的包名等
package com.anson.ws;
//import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream;
import java.util.Locale;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/**
* @author jeo 08/12/29
*/
public class MQObjectToXMLUtil {
private static XStream sxstream;
static {
sxstream = new XStream(new DomDriver());
// 把MQ所用到的类的完全限定名,改为类名
sxstream.alias("Person", Person.class);
sxstream.alias("Book", Book.class);
//加入日期转换器
DateConverter converter = new DateConverter(Locale.CHINESE);
sxstream.registerConverter(converter);
}
/**
* 把java的可序列化的对象转换为XML格式的字符串
*
* @param obj
* 要序列化的可序列化的对象
*/
public static String objectXmlEncoder(Object obj) {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
// XMLEncoder encoder = new XMLEncoder(bout);
String xml = null;
try {
// 对象序列化输出到字节流
// encoder.writeObject(obj);
// encoder.flush();
// 关闭序列化工具
// encoder.close();
// 由字节流中取得XML格式字符串
sxstream.toXML(obj, bout);
xml = new String(bout.toByteArray(), "utf-8");
// 关闭字节流
// bout.close();
} catch (Exception e) {
e.printStackTrace();
}
return xml;
}
}