将实体类转为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