Bean转XML

将实体类转为XML

pom依赖

          <dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.10</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-lang3</artifactId>
		    <version>3.8</version>
		</dependency>
		<dependency>
		    <groupId>joda-time</groupId>
		    <artifactId>joda-time</artifactId>
		    <version>2.10</version>
		</dependency>

XstreamDateConverter.java

package com.jmev.mobile.utils;

import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

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 XstreamDateConverter implements Converter {

	// 支持转换的日期格式
	private static final DateTimeFormatter[] ACCEPT_DATE_FORMATS = {
		DateTimeFormat.forPattern("yyyy-MM-dd"),
		DateTimeFormat.forPattern("yyyy-MM"),
		DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"),
		DateTimeFormat.forPattern("yyyy/MM/dd")
	};

	/* (non-Javadoc)
	 * @see com.thoughtworks.xstream.converters.ConverterMatcher#canConvert(java.lang.Class)
	 */
	@SuppressWarnings("rawtypes")
	public boolean canConvert(Class type) {
		return Date.class == type;
	}

	/* (non-Javadoc)
	 * @see com.thoughtworks.xstream.converters.Converter#marshal(java.lang.Object, com.thoughtworks.xstream.io.HierarchicalStreamWriter, com.thoughtworks.xstream.converters.MarshallingContext)
	 */
	public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {

	}

	/* (non-Javadoc)
	 * @see com.thoughtworks.xstream.converters.Converter#unmarshal(com.thoughtworks.xstream.io.HierarchicalStreamReader, com.thoughtworks.xstream.converters.UnmarshallingContext)
	 */
	public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
		if (reader.getValue() == null || "".equals(reader.getValue())) {
			return null;
		}
		DateTime dt = null;

		for (DateTimeFormatter format : ACCEPT_DATE_FORMATS) {
			try {
				// 遍历日期支持格式,进行转换
				dt = format.parseDateTime(reader.getValue());
				break;
			} catch (Exception e) {
				continue;
			}
		}

		return dt == null ? null : dt.getMillis();
	}

}

XstreamUtil.java

package com.jmev.mobile.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.io.Writer;

import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.StringUtils;

import com.jmev.mobile.entity.get.Response_info;
import com.jmev.mobile.entity.get.Svc_result;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.CompactWriter;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * Xstream模式,bean 与 XML 互转处理类
 *
 * @author ghw
 *
 */
public class XstreamUtil {

	public static void main(String[] args) {
		Svc_result svc_result = new Svc_result();
		svc_result.setVer("2.0.0");
		Response_info response_info = new Response_info();
		response_info.setGwid("MAS请求消息流水号");
		response_info.setRetcode("返回码");
		response_info.setRetmesg("返回描述");
		svc_result.setResponse_info(response_info);
		System.out.println(toPrettyXML(svc_result, UTF8));
	}

	public static String UTF8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

	public static String GBK = "<?xml version=\"1.0\" encoding=\"GBK\"?>";

	public static String GB18030 = "<?xml version=\"1.0\" encoding=\"GB18030\"?>";

	public static String NEWLINE = "\n";

	/**
	 * bean -> xml 格式化显示
	 *
	 * @return
	 */
	public static String toPrettyXML(Object obj, String xmlHead) {
		xmlHead = StringUtils.isBlank(xmlHead) ? UTF8 : xmlHead;
		XStream xs = new XStream(new DomDriver(CharEncoding.UTF_8, new NoNameCoder()));
		xs.autodetectAnnotations(true);
		Writer writer = new StringWriter();
		xs.toXML(obj, writer);
		return xmlHead + NEWLINE + writer.toString();
	}

	/**
	 * bean -> xml
	 *
	 * @return
	 */
	public static String toXML(Object obj, String xmlHead) {
		xmlHead = StringUtils.isBlank(xmlHead) ? UTF8 : xmlHead;

		XStream xs = new XStream(new DomDriver(CharEncoding.UTF_8, new NoNameCoder()));
		xs.autodetectAnnotations(true);
		Writer writer = new StringWriter();
		xs.marshal(obj, new CompactWriter(writer, new NoNameCoder()));

		return xmlHead + writer.toString();
	}

	/**
	 * xml -> bean
	 *
	 * @param xmlStr
	 * @return
	 */
	public static Object toBean(String xmlStr, Object obj) {

		XStream xs = new XStream(new DomDriver(UTF8, new NoNameCoder()));
		xs.autodetectAnnotations(true);
		xs.registerConverter(new XstreamDateConverter());
		Writer writer = new StringWriter();
		xs.marshal(obj, new CompactWriter(writer, new NoNameCoder()));

		return xs.fromXML(xmlStr, obj);
	}

	/**
	 * xml -> bean
	 *
	 * @param xmlStr
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T toBean(String xmlStr, Class<T> cls) {

		XStream xstream = new XStream(new DomDriver(UTF8, new NoNameCoder()));
		xstream.registerConverter(new XstreamDateConverter());
		xstream.processAnnotations(cls);
		T obj = (T) xstream.fromXML(xmlStr);
		return obj;
	}

	/**
	 * 从xml文件读取报文
	 *
	 * @Title: toBeanFromFile
	 * @Description: TODO
	 * @param absPath  绝对路径
	 * @param fileName 文件名
	 * @param cls
	 * @throws Exception
	 * @return T
	 */
	public static <T> T toBeanFromFile(String absPath, String fileName, Class<T> cls) throws Exception {
		String filePath = absPath + fileName;
		InputStream ins = null;
		try {
			ins = new FileInputStream(new File(filePath));
		} catch (Exception e) {
			throw new Exception("读{" + filePath + "}文件失败!", e);
		}

		return toBeanFromFile(ins, cls);
	}

	/**
	 * 从文件流中读取文件
	 *
	 * @param in
	 * @param cls
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static <T> T toBeanFromFile(InputStream in, Class<T> cls) throws Exception {

		XStream xstream = new XStream(new DomDriver());
		xstream.processAnnotations(cls);
		T obj = null;
		try {
			obj = (T) xstream.fromXML(in);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new Exception("文件流读取失败!", e);
		}
		if (in != null)
			in.close();
		return obj;
	}

}

  

  

  

原文地址:https://www.cnblogs.com/ShaoXin/p/9591493.html

时间: 2024-11-05 21:46:41

Bean转XML的相关文章

JAVA bean与XML互转---XStream

最近在项目中遇到了Java bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家分享. XStream是大名鼎鼎的thought works下的一个开源项目, 主要功能是提供JAVA bean 和XML文本之间的转换,另外还提供JAVA bean和JSON之间的转换,这个不在本次讨论的范围内. XStream进行转换是非常简单的,对JAVA bean没有任何要求: 不要求对pr

JAVA bean与XML互转的利器---XStream

最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家分享. XStream是大名鼎鼎的thought works下的一个开源项目, 主要功能是提供JAVA bean 和XML文本之间的转换,另外还提供JAVA bean和JSON之间的转换,这个不在本次讨论的范围内. XStream进行转换是非常简单的,对JAVA bean没有任何要求: 不要求对pr

框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示

1 什么是spring 1.1官网 spring.io 1.2介绍 Spring的核心是控制反转(IoC)和面向切面(AOP). IoC(Inverse of Control 反转控制) AOP(Aspect Oriented Programming 面向切面编程为内核) 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架. *轻量级:依赖其他内容较小,使用资源消耗也少.对比:EJB 重量级 *分层:经典三层体系架构,spring 提供解决方案

[转]解析json:与array,list,map,bean,xml相互转化

一.解析json之net.sf.json 下载地址 使用netsfjson需要导入的包 JSONObject JSONArray JavaBean与json字符串互转 List与json字符串互转 Map与json字符串互转 JSONArray与List互转 JSONArray与数组互转 XML与JSON互转 下载地址 [plain] view plain copy 本次使用版本:http://sourceforge.net/projects/json-lib/files/json-lib/js

Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)

最近项目要用到mybatis中间件,中间涉及到要对表结构生成bean,dao,和sqlconfig.xml 所以记录一下学习过程 首先是准备工作,即准备需要的jar包:我们的数据库mysql,所以驱动用的mysql-connector-5.1.8.jar 另外还需要 mybatis的jar包: mybatis-3.0.5-SNAPSHOT.jar 及自动生成的jar包:mybatis-generator-core-1.3.2.jar ....这些都可以到网上下载... 我首先是测试这个自动生成功

[转] Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)

最近项目要用到mybatis中间件,中间涉及到要对表结构生成bean,dao,和sqlconfig.xml 所以记录一下学习过程 首先是准备工作,即准备需要的jar包:我们的数据库mysql,所以驱动用的mysql-connector-5.1.8.jar 另外还需要 mybatis的jar包: mybatis-3.0.5-SNAPSHOT.jar 及自动生成的jar包:mybatis-generator-core-1.3.2.jar ....这些都可以到网上下载... 我首先是测试这个自动生成功

spring IOC容器中装配Bean(XML)

——基于XML的配置 依赖注入 spring 依赖注入的方式有,属性注入和构造函数注入,还有不常用到的工厂方法注入. (1)属性注入 属性注入要求 Bean 提供默认的构造函数,并为需要的属性提供 set 方法,spring 先调用 Bean 的默认构造函数实例化 Bean 对象,然后通过反射的方法调用 set 方法注入属性值.如下简单的范例: public class Phone { private int id; private String name; private double pri

第2章—装配Bean—通过XML装配Bean

通过XML装配Bean ? 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配置规范 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo

3.装配Bean 基于XML

一.实例化方式 3种bean实例化方式:默认构造.静态工厂.实例工厂 1.默认构造 <bean id="" class=""> 必须提供默认构造 2. 静态工厂 l 常用与spring整合其他框架(工具) l 静态工厂:用于生成实例对象,所有的方法必须是static <bean id="" class="工厂全限定类名" factory-method="静态方法"> UserServ