@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. Android 交叉编译程序提示(not found)

    原因是缺少库文件, 解决办法:arm-linux-readelf -a helloword | grep NEEDED 拷贝so文件到安卓下 或者 arm-linux-gcc hello.c -o h ...

  2. 安卓源码下载 windows

    git clone https://android.googlesource.com/name Name Descriptionaccessories/manifest device/asus/deb ...

  3. php 方法笔记 比file_get_contents好

    /*比file_get_contents稳定的多!$timeout为超时时间,单位是秒,默认为1s.*/ private function curl_get_contents($url,$timeou ...

  4. time.h time_t

    #include <stdio.h> #include <stddef.h> #include <time.h> int main(void) { time_t t ...

  5. Junit Hamcrest Mockito单元测试

    pom.xml配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  6. 取出html中指定id的元素的内容

    private void btnGet_Click(object sender, EventArgs e) { string PageUrl = "http://www.cnblogs.co ...

  7. Orchard运用 - 为评论启用Gravatar头像

    在前一篇随笔中我曾分享如何为Orchard特定主题添加独立代码文件, 今儿延续如何把对应代码应用到Views上. 对此我不妨把为评论启用Gravatar头像这一例子来实现.其实很简单, 思路大概就是创 ...

  8. win8自带输入法如何切换全角、半角操作流程

    原文参考:http://jingyan.baidu.com/article/066074d6620c45c3c21cb0d3.html 曾经不知道怎么切换半角全角的时候非常抓狂(原因是不知道是半角全角 ...

  9. TextView文字横向自己主动滚动

              效果截图:                              watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI4Nj ...

  10. Discuz常见小问题-如何快速清除帖子

    看别人发的垃圾帖,然后鼠标移到用户名上面,在弹出菜单中点击禁止用户   设置禁止访问-全选所有,删除   然后短期内无法看到效果,帖子还在,你点进去会报错说指定的主题不存在   过三十分钟再刷新页面, ...