xstream 解析xml报文
一、xml一种格式的数据转换为对象
pom.xml引入
- <!--javaBean和XML的双向转换-->
- <dependency>
- <groupId>com.thoughtworks.xstream</groupId>
- <artifactId>xstream</artifactId>
- <version>1.4.</version>
- </dependency>
xml文件模板
- <?xml version="1.0" encoding="GBK"?>
- <MESSAGE>
- <MESSAGEHEAD>
- <MESSAGEID/>
- <SRC/>
- </MESSAGEHEAD>
- <MESSAGEBODY>
- <TRANLIST>
- <TRAN_DATE/>
- <TRAN_TIME/>
- </TRANLIST>
- </MESSAGEBODY>
- </MESSAGE>
后台需要创建
1、 总类Total
- class Total
- private static final String headInfo = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
- @XStreamAlias("MESSAGEHEAD")
- private Head head;
- @XStreamAlias("MESSAGEBODY")
- private Body body;
// getter setter
2、头部信息Head
- class Head
- @XStreamAlias("MESSAGEID")
- private String messageId;
- @XStreamAlias("SRC")
- private String src;
- // getter settter
3、Body,明细类集合
- class Body
- @XStreamImplicit(itemFieldName = "TRANLIST")
- private List<Detail> detail;
4、Detail明细类
- class Detail
- @XStreamConverter(value = XStreamDateConverter.class)
- @XStreamAsAttribute
- @XStreamAlias("TRAN_DATE")
- private Date tranDate;
- @XStreamAlias("TRAN_TIME")
- private String tranTime;
// getter setter
需要强调的是: String类型不需要转换,其他的类型都可以通过实现接口SingleValueConverter来实现转换格式,编写一个转换日期Date格式的转换,其他类似
- public class XStreamDateConverter implements SingleValueConverter {
- private final String YMD = "yyyyMMdd";
- SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
- @Override
- public String toString(Object o) {
- String result = null;
- if (o instanceof Date) {
- Date date = (Date) o;
- result = dateFormat.format(date);
- }
- return result;
- }
- @Override
- public Object fromString(String s) {
- Date date = null;
- if (s != null && !"".equals(s)) {
- try {
- date = dateFormat.parse(s);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- }
- return date;
- }
- @Override
- public boolean canConvert(Class aClass) {
- return Date.class == aClass;
- }
- }
基础工作已经完成,接下来就是将xml转换为对象实体
- public static Total transXmlToObject(String xmlBody) {
- XStream xStream = new XStream();
- xStream.alias("MESSAGE", Total.class);
- xStream.alias("MESSAGEHEAD", Head.class);
- xStream.alias("MESSAGEBODY", Body.class);
- xStream.alias("TRANLIST", Detail.class);
- xStream.processAnnotations(new Class[]{Total.class, Head.class, Body.class, Detail.class});
- Object object = xStream.fromXML(xmlBody);
- Total data = (Total) object;
- return data;
- }
xstream 解析xml报文的更多相关文章
- java 写webservice接口解析xml报文
1 <!--解析xml报文--> 2 <dependency> 3 <groupId>dom4j</groupId> 4 <artifactId& ...
- Xstream 解析xml文件内容
刚刚接手的一个项目,接到一个对接用户数据的需求,对方使用的是xml格式来传输文件,特此记下解析该类文件的方法 public interface XmlResolver<T> { XStre ...
- 解析xml报文,xml与map互转
这段时间写了一个关于xml报文的工具类,做一下具体的讲解: xml文本 <NTMMessage version="1.03"> <NTMHeader> &l ...
- xstream解析xml时遇到特殊字符出错
在xml中有"&"符号时,解析xml出错 解决办法: 将&替换成&
- XML解析---利用XStream解析xml数据及反构造Java对象
XStream 是一个轻量级的.简单易用的开放源代码 Java库,用于将 Java 对象序列化为 XML 或者再转换回来.而且XStream还能将java对象转成其它格式,比如JSon. 需要用到的包 ...
- Xstream解析XML
<oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...
- Java开发笔记(一百零九)XML报文的定义和解析
前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...
- java生成解析xml的另外两种方法Xstream
Xstream生成和解析xm和JAXB生成和解析xml的方法. 一,Xstream Xstream非jdk自带的,需要到入Xstream-1.4.3.jar和xpp3_min-1.1.4.jar 1. ...
- xml报文解析和组装
package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...
随机推荐
- C++基本概念复习
照着https://www.w3cschool.cn/cpp/,把C++的基础概念顺了一遍,虽然很久没用C++,还是整理一下. #include "stdafx.h"; #incl ...
- spring_cloud多个微服务访问时偶发forward_error问题
1.问题: 最近在做SpringBoot项目的时候,有多个分开的微服务,偶发forward error 问题 2.猜想: 个人理解为服务跳转错误,可能本身没找到目标服务,或者目标服务损坏 3.解决: ...
- tableView--iOS11适配和iPhoneX适配
1.UIScrollView及其子类在IOS 11之前的版本UI显示完全正常,但是在IOS 11上面会显示奇葩的界面. (1)先看一下UITablevIew. 原本在VC里面的automaticall ...
- .NET core 项目部署在windows 服务器方法以及iis 访问报 500.19错误的解决办法
将本地发布的服务本地运行没问题,发布上云windows 服务器就报 500.19 0x8007000d 是因为云服务器没有安装.net core相关的插件,比如.NET CORE sdk等,请按照该文 ...
- oracle 查看锁表及解锁的语句
解锁语句: alter system kill session 'sid, serial#'; alter system kill session '23, 1647'; 查询那些对象被锁: sele ...
- Java 分割、合并byte数组
场景:上传文件较大,把存放文件内容byte数组拆分成小的.下载的时候按照顺序合并. 起初觉得挺麻烦的,写完觉得挺简单. 切割: /** * 拆分byte数组 * * @param bytes * 要拆 ...
- Mybatis中的几种注解映射
1. 普通映射 2. @Select("select * from mybatis_Student where id=#{id}") 3. public Student getS ...
- mysql5.5 升级到 5.7 的坑
1.大概思路,docker 新启一个mysql5.7 端口映射到3307 2. 导出5.5 的.sql文件,导入5.7中 3.测试通过后,可将5.5关闭.5.7端口改回3306 GRANT ALL P ...
- linux 下 mysql安装和配置
最近在学习R语言,看到R与数据库交互这一部分,就自己动手实践了一下,数据库选择的是mysql,主要记录下linux下怎么安装mysql. 网上的很多资料都有相关的文章,这里只是记录下自己安装过程中遇到 ...
- asp.net mvc access数据库操作
连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...