博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xstream序列化实体
阅读量:4647 次
发布时间:2019-06-09

本文共 2794 字,大约阅读时间需要 9 分钟。

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

 

转载于:https://www.cnblogs.com/Yjianyong/archive/2012/03/01/2375042.html

你可能感兴趣的文章
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>
孩子教育
查看>>
解决Cacti监控图像断断续续问题
查看>>
结构体的传参理解成员的存储方式
查看>>
python 进程与线程(理论部分)
查看>>
什么是API
查看>>
Java反射中method.isBridge() 桥接方法
查看>>
[shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
查看>>
强名称程序集(strong name assembly)——为程序集赋予强名称
查看>>
1028. List Sorting (25)
查看>>
BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
查看>>
ubuntu 重启命令,ubuntu 重启网卡方法
查看>>
Linux的学习:
查看>>
JavaScript中的原型继承原理
查看>>
Python logger模块
查看>>