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

本文共 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

你可能感兴趣的文章
问题总结
查看>>
python错误调试
查看>>
难追难回味
查看>>
如何构建Vue大型应用
查看>>
Leetcode 498:对角线遍历Diagonal Traverse(python3、java)
查看>>
学习jQuery-----(1)
查看>>
RQPro 公募 FOF 策略实例 2——基金投资风格箱、业绩趋势和反转策略、及风险最小化资产配置...
查看>>
解决因为机器性能问题导致docker-compose运行容器超时的问题
查看>>
Java 注解完全解析
查看>>
AFNetworking之AFNetworkReachabilityManager深入学习
查看>>
CSS Modules
查看>>
iOS runtime运行时的作用和应用场景
查看>>
js里的数据类型
查看>>
Maven setting.xml
查看>>
Java插入排序
查看>>
MongoDB4.0支持事务管理
查看>>
主成分分析( PCA )与 白化( whitening )
查看>>
Android 中的线程池
查看>>
MAC_mysql_install
查看>>
如何实现自己的SpringBoot自动配置
查看>>