@XStreamAlias使用
@XStreamAlias使用
一、 特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法
提供序列化接口;
自定义转换类型策略;
二、 使用场景
Transport转换
Persistence 持久化对象
Configuration 配置
Unit Tests 单元测试
Interface服务之间XML消息的交互
三、 代码样例
请求类:
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Response")
public class RequestTest { @XStreamAlias("returncode")
private String returnCode; @XStreamAlias("returnmessage")
private String returnMessage; @XStreamAlias("status")
private int status; @XStreamAlias("time")
private String reqTime; public String getReturnCode() {
return returnCode;
} public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
} public String getReturnMessage() {
return returnMessage;
} public void setReturnMessage(String returnMessage) {
this.returnMessage = returnMessage;
} public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getReqTime() {
return reqTime;
} public void setReqTime(String reqTime) {
this.reqTime = reqTime;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
响应类
import java.sql.Timestamp; import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Response")
public class ResponseTest { @XStreamAlias("returncode")
private int resultCode; @XStreamAlias("time")
private Timestamp time; @XStreamAlias("returnmessage")
private String resultMessage; @XStreamAlias("status")
private int state; @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
} }
Xstream工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; public class XstreamUtil { /**
* 将bean转换为xml
* @param obj 转换的bean
* @return bean转换为xml
*/
public static String objectToXml(Object obj) {
XStream xStream = new XStream(); //xstream使用注解转换
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
} /**
* 将xml转换为bean
* @param <T> 泛型
* @param xml 要转换为bean的xml
* @param cls bean对应的Class
* @return xml转换为bean
*/
public static <T> T xmlToObject(String xml, Class<T> cls){
XStream xstream = new XStream(new DomDriver()); //xstream使用注解转换
xstream.processAnnotations(cls);
return (T) xstream.fromXML(xml);
}
}
测试类
public class XStreamTest {
public static void main(String[] args) {
RequestTest requestTest = new RequestTest();
requestTest.setReturnCode("200");
requestTest.setReturnMessage("ok");
requestTest.setStatus(200);
requestTest.setReqTime("2013-09-22 00:00:00");
System.out.println(requestTest);
String request = XstreamUtil.objectToXml(requestTest);
System.out.println(request);
ResponseTest responseTest =XstreamUtil.xmlToObject(request, ResponseTest.class);
System.out.println(responseTest);
}
}
输出:
xstream.RequestTest@1fb8ee3[
returnCode=200
returnMessage=ok
status=200
reqTime=2013-09-22 00:00:00
]
<Response>
<returncode>200</returncode>
<returnmessage>ok</returnmessage>
<status>200</status>
<time>2013-09-22 00:00:00</time>
</Response>
xstream.ResponseTest@19dfbff[
resultCode=200
time=2013-09-22 00:00:00.0
resultMessage=ok
state=200
]
四、 总结
1. @XStreamAlias("message") 别名注解 。
2. 使用注解序列化、反序列化,只要别名一样、字段不需要是同一类型(通过JAVA的API可以转换),不需要是同一个类,这为接口之间的交互提供了极大的方便。
3. 简化了API,不需要单独写解析xml的API。
4. toString方法使用ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE)。
@XStreamAlias使用的更多相关文章
- Java -- XStreamAlias 处理节点中的属性和值
XStreamAlias 可以把objec和xml相互转换,但是有时候节点带有属性和值就需要特殊处理下: <?xml version="1.0" encoding=" ...
- java与xml转换 -- XStreamAlias
@XStreamAlias 1.特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定 ...
- xml与java对象转换 -- XStreamAlias
@XStreamAlias使用 一. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口 ...
- XStream xml 解析框架使用笔记
1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...
- 简单Java类与XML之间的转换
需要的jar包:xmlpull_1_0_5.jar,xstream-1.4.1.jar) 1.工具类XstreamUtil package com.learn.util; import com.tho ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- Xstream解析XML
<oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...
- PullToRefreshGridView刷新加载2
@XStreamAlias("result")public class Myresult { @XStreamImplicit(itemFieldName="item&q ...
- XStream学习笔记
XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...
随机推荐
- https://github.com/wytings
博客中写了很多比较杂乱的东西,有时候可能一时看不出效果,毕竟代码问题确实是 “Talk is cheap. Show me the code” 所以,就开了一个github,把一些日常开发和使用的工具 ...
- Jni的Jclass JmethodID JfrieldID的差异
Jni的Jclass JmethodID JfrieldID 这三者都是java类别的属性,本质上都是指标(Pointer).透过这些指标就能快速调用java类别的函数,或存取对象的属性值.在该类别被 ...
- INFORMATICA 的元数据管理之二:运行状态信息查询
本项目里的两个哥们做的关于运行状态元数据的两个JOB挺酷的,最近一段时间运行状况良好,自己参考学习的同时以做日志记载,呵呵,为了节省笔墨,相关元数据表结构以及MAPPING设计之类不做介绍(如有疑问欢 ...
- 无法对数据库'XXX' 执行删除,因为它正用于复制"的解决方
困扰二天的问题终于得以解决,貌似一个棘手的问题只要知道方法也似乎变得异常简单,记录此次的解决方法,避免遗忘. 无法对 数据库'UDS' 执行 删除,因为它正用于复制. (.Net SqlClient ...
- vue-router路由元信息详解
一.官方文档 路由元信息:定义路由的时候可以配置 meta 字段 const router = new VueRouter({ routes: [ { path: '/foo', component: ...
- tomcat部署java web项目遇到的一些小问题
背景:本人不是Java开发人员,经过四年多的历练,可以说是一枚BI攻城师了吧,最近粗糙的写了一个Portal来集成cognos报表,下面就入正题说一下发布过程中遇到的小问题吧. a:前提:Java w ...
- [Node.js] Level 6. Socket.io
6.2 Setting Up socket.io Server-Side So far we've created an Express server. Now we want to start bu ...
- photoshop cs6 Mac版本
地址:http://trials2.adobe.com/AdobeProducts/PHSP/13/osx10/Photoshop_13_LS3.dmg 说明:http://www.nowmac.co ...
- Android Activity的生命周期的几个方法介绍
onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态. onStart():Activity在屏幕上对用户可见时调用 on ...
- linux下运行telnet命令出现command not find解决办法
原因是没有安装telnet客户端和服务(缺一不可) yum list telnet* 查看telnet相关的安装包yum install telnet-server 安装telnet服务yum i ...