@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使用的更多相关文章

  1. Java -- XStreamAlias 处理节点中的属性和值

    XStreamAlias 可以把objec和xml相互转换,但是有时候节点带有属性和值就需要特殊处理下: <?xml version="1.0" encoding=" ...

  2. java与xml转换 -- XStreamAlias

    @XStreamAlias 1.特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定 ...

  3. xml与java对象转换 -- XStreamAlias

    @XStreamAlias使用 一. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口 ...

  4. XStream xml 解析框架使用笔记

    1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...

  5. 简单Java类与XML之间的转换

    需要的jar包:xmlpull_1_0_5.jar,xstream-1.4.1.jar) 1.工具类XstreamUtil package com.learn.util; import com.tho ...

  6. XStream简单入门

    简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...

  7. Xstream解析XML

    <oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...

  8. PullToRefreshGridView刷新加载2

    @XStreamAlias("result")public class Myresult { @XStreamImplicit(itemFieldName="item&q ...

  9. XStream学习笔记

    XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...

随机推荐

  1. DTO的一些理解(转载)

    1.什么是DTO DTO(Data Tansfer Object)即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DT ...

  2. asp中将系统货币符号¥改为美国货币符号$的做法

    我们一般用FormatCurrency()函数得到字符串前面都会加上人民币符号¥.但在做一些网站时想把他们变成$. 可以在网面的前面加上一名话就OK了 SetLocale("en-us&qu ...

  3. PHP-Java-Bridge使用笔记

    最近因为需要封装一个jar包供php调用,在网上搜索了下,基本上讲都是使用php-java-bridge,说实话,网上的教程有很多是不行的,但是功夫不负有心人,找到了一篇文章,也很感谢那篇文章的作者, ...

  4. 手势 触摸【缩放】GestureDetector MotionEvent 案例

    GestureDetector和ScaleGestureDetector示例 /**  * 演示[单点触摸手势识别器]  * 演示[缩放手势识别器]最简单的使用  * @author 白乾涛  */ ...

  5. input 输入框默认获得焦点

    JavaScript实现默认焦点: 如下写<body>标签: <body onload="window.formLogin.user.focus()"> & ...

  6. Mac下的 /private 是个什么目录?

    Mac下的 /private 是个什么目录? 学习了:https://www.zhihu.com/question/19582264/answer/125522314  有图有真想

  7. 转:如何转换Android打包用jks格式keystore证书为Air用pkcs12格式p12证书

    转自:http://blog.k-res.net/archives/1539.html 如何转换Android打包用jks格式keystore证书为Air用pkcs12格式p12证书 六月 11, 2 ...

  8. (剑指Offer)面试题51:数组中重复的数字

    题目: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7 ...

  9. android gallery 自定义边框+幻灯片效果

    最近在项目中用到图片轮播,试了Gallery,ViewFlipper,ViewPager,感觉Gallery最符合需求,但是Gallery的系统边框很难看,项目中要求用自己的背景图片. 下面来看一下使 ...

  10. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...