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