XStream


1.引入需要的jar包,在pom.xml中配置依赖

Java代码  

  1. <dependency>  
  2.     <groupId>com.thoughtworks.xstream</groupId>  
  3.     <artifactId>xstream</artifactId>  
  4.     <version>1.4.2</version>  
  5. </dependency>  
<dependency>
	<groupId>com.thoughtworks.xstream</groupId>
	<artifactId>xstream</artifactId>
	<version>1.4.2</version>
</dependency>

2.创建要转换的实例类,本文以简单的硬件信息为例

Java代码  

  1. package com.ajita.xstream;  
  2.   
  3. import com.thoughtworks.xstream.annotations.XStreamAlias;  
  4. import com.thoughtworks.xstream.annotations.XStreamAsAttribute;  
  5.   
  6. @XStreamAlias("DiskInfo")  
  7. public class DiskInfo {  
  8.     @XStreamAsAttribute  
  9.     @XStreamAlias("diskName")  
  10.     private String name;  
  11.     private int totalSize;  
  12.     private int avilableSize;  
  13.     private int usedSize;  
  14.   
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.   
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22.   
  23.     public int getTotleSize() {  
  24.         return totalSize;  
  25.     }  
  26.   
  27.     public void setTotleSize(int totleSize) {  
  28.         this.totalSize = totleSize;  
  29.     }  
  30.   
  31.     public int getAvilableSize() {  
  32.         return avilableSize;  
  33.     }  
  34.   
  35.     public void setAvilableSize(int avilableSize) {  
  36.         this.avilableSize = avilableSize;  
  37.     }  
  38.   
  39.     public int getUserSize() {  
  40.         return usedSize;  
  41.     }  
  42.   
  43.     public void setUserSize(int userSize) {  
  44.         this.usedSize = userSize;  
  45.     }  
  46.   
  47.     public String toString() {  
  48.         StringBuilder sb = new StringBuilder();  
  49.         sb.append(name + "\r\n");  
  50.         sb.append("TotalSize:" + totalSize + "|Used Size:" + usedSize  
  51.                 + "|Available Size:" + avilableSize);  
  52.         return sb.toString();  
  53.     }  
  54. }  
  55.   
  56. package com.ajita.xstream;  
  57.   
  58. import java.util.List;  
  59.   
  60. import com.thoughtworks.xstream.annotations.XStreamAlias;  
  61.   
  62. @XStreamAlias("HardwareInfo")  
  63. public class HardwareInfo {  
  64.     private String cpuInfo;  
  65.     private String networkInfo;  
  66.     private List<DiskInfo> diskInfos;  
  67.   
  68.     public String getCpuInfo() {  
  69.         return cpuInfo;  
  70.     }  
  71.   
  72.     public void setCpuInfo(String cpuInfo) {  
  73.         this.cpuInfo = cpuInfo;  
  74.     }  
  75.   
  76.     public String getNetworkInfo() {  
  77.         return networkInfo;  
  78.     }  
  79.   
  80.     public void setNetworkInfo(String networkInfo) {  
  81.         this.networkInfo = networkInfo;  
  82.     }  
  83.   
  84.     public List<DiskInfo> getDiskInfos() {  
  85.         return diskInfos;  
  86.     }  
  87.   
  88.     public void setDiskInfos(List<DiskInfo> diskInfos) {  
  89.         this.diskInfos = diskInfos;  
  90.     }  
  91.   
  92.     public String toString() {  
  93.         StringBuilder sb = new StringBuilder();  
  94.         sb.append(cpuInfo);  
  95.         sb.append("\r\n");  
  96.         sb.append(networkInfo);  
  97.         sb.append("\r\n");  
  98.         for (DiskInfo disk : diskInfos) {  
  99.             sb.append(disk.toString());  
  100.             sb.append("\r\n");  
  101.         }  
  102.         return sb.toString();  
  103.     }  
  104. }  
package com.ajita.xstream;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

@XStreamAlias("DiskInfo")
public class DiskInfo {
	@XStreamAsAttribute
	@XStreamAlias("diskName")
	private String name;
	private int totalSize;
	private int avilableSize;
	private int usedSize;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getTotleSize() {
		return totalSize;
	}

	public void setTotleSize(int totleSize) {
		this.totalSize = totleSize;
	}

	public int getAvilableSize() {
		return avilableSize;
	}

	public void setAvilableSize(int avilableSize) {
		this.avilableSize = avilableSize;
	}

	public int getUserSize() {
		return usedSize;
	}

	public void setUserSize(int userSize) {
		this.usedSize = userSize;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(name + "\r\n");
		sb.append("TotalSize:" + totalSize + "|Used Size:" + usedSize
				+ "|Available Size:" + avilableSize);
		return sb.toString();
	}
}

package com.ajita.xstream;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("HardwareInfo")
public class HardwareInfo {
	private String cpuInfo;
	private String networkInfo;
	private List<DiskInfo> diskInfos;

	public String getCpuInfo() {
		return cpuInfo;
	}

	public void setCpuInfo(String cpuInfo) {
		this.cpuInfo = cpuInfo;
	}

	public String getNetworkInfo() {
		return networkInfo;
	}

	public void setNetworkInfo(String networkInfo) {
		this.networkInfo = networkInfo;
	}

	public List<DiskInfo> getDiskInfos() {
		return diskInfos;
	}

	public void setDiskInfos(List<DiskInfo> diskInfos) {
		this.diskInfos = diskInfos;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(cpuInfo);
		sb.append("\r\n");
		sb.append(networkInfo);
		sb.append("\r\n");
		for (DiskInfo disk : diskInfos) {
			sb.append(disk.toString());
			sb.append("\r\n");
		}
		return sb.toString();
	}
}

3.新建测试代码

Java代码  

  1. package com.ajita.xstream;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import com.thoughtworks.xstream.XStream;  
  6.   
  7. public class TestXStream {  
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.         DiskInfo disk1 = new DiskInfo();  
  13.         disk1.setName("D:\\");  
  14.         disk1.setTotleSize(100);  
  15.         disk1.setUserSize(20);  
  16.         disk1.setAvilableSize(80);  
  17.         DiskInfo disk2 = new DiskInfo();  
  18.         disk2.setName("E:\\");  
  19.         disk2.setTotleSize(200);  
  20.         disk2.setUserSize(40);  
  21.         disk2.setAvilableSize(160);  
  22.   
  23.         ArrayList<DiskInfo> diskInfos = new ArrayList<DiskInfo>();  
  24.         diskInfos.add(disk1);  
  25.         diskInfos.add(disk2);  
  26.   
  27.         HardwareInfo hwInfo = new HardwareInfo();  
  28.         hwInfo.setCpuInfo("cpu info is ...");  
  29.         hwInfo.setNetworkInfo("network info is ...");  
  30.         hwInfo.setDiskInfos(diskInfos);  
  31.   
  32.         XStream xStream = new XStream();  
  33.         xStream.autodetectAnnotations(true);  
  34.         String xml = xStream.toXML(hwInfo);  
  35.         System.out.println(xml);  
  36.   
  37.         HardwareInfo info2 = (HardwareInfo) xStream.fromXML(xml);  
  38.         System.out.println(info2);  
  39.     }  
  40.   
  41. }  
package com.ajita.xstream;

import java.util.ArrayList;

import com.thoughtworks.xstream.XStream;

public class TestXStream {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DiskInfo disk1 = new DiskInfo();
		disk1.setName("D:\\");
		disk1.setTotleSize(100);
		disk1.setUserSize(20);
		disk1.setAvilableSize(80);
		DiskInfo disk2 = new DiskInfo();
		disk2.setName("E:\\");
		disk2.setTotleSize(200);
		disk2.setUserSize(40);
		disk2.setAvilableSize(160);

		ArrayList<DiskInfo> diskInfos = new ArrayList<DiskInfo>();
		diskInfos.add(disk1);
		diskInfos.add(disk2);

		HardwareInfo hwInfo = new HardwareInfo();
		hwInfo.setCpuInfo("cpu info is ...");
		hwInfo.setNetworkInfo("network info is ...");
		hwInfo.setDiskInfos(diskInfos);

		XStream xStream = new XStream();
		xStream.autodetectAnnotations(true);
		String xml = xStream.toXML(hwInfo);
		System.out.println(xml);

		HardwareInfo info2 = (HardwareInfo) xStream.fromXML(xml);
		System.out.println(info2);
	}

}

输出如下:

Java代码  

  1. <HardwareInfo>  
  2.   <cpuInfo>cpu info is ...</cpuInfo>  
  3.   <networkInfo>network info is ...</networkInfo>  
  4.   <diskInfos>  
  5.     <DiskInfo diskName="D:\">  
  6.       <totalSize>100</totalSize>  
  7.       <avilableSize>80</avilableSize>  
  8.       <usedSize>20</usedSize>  
  9.     </DiskInfo>  
  10.     <DiskInfo diskName="E:\">  
  11.       <totalSize>200</totalSize>  
  12.       <avilableSize>160</avilableSize>  
  13.       <usedSize>40</usedSize>  
  14.     </DiskInfo>  
  15.   </diskInfos>  
  16. </HardwareInfo>  
  17. cpu info is ...  
  18. network info is ...  
  19. D:\  
  20. TotalSize:100|Used Size:20|Available Size:80  
  21. E:\  
  22. TotalSize:200|Used Size:40|Available Size:160  
<HardwareInfo>
  <cpuInfo>cpu info is ...</cpuInfo>
  <networkInfo>network info is ...</networkInfo>
  <diskInfos>
    <DiskInfo diskName="D:\">
      <totalSize>100</totalSize>
      <avilableSize>80</avilableSize>
      <usedSize>20</usedSize>
    </DiskInfo>
    <DiskInfo diskName="E:\">
      <totalSize>200</totalSize>
      <avilableSize>160</avilableSize>
      <usedSize>40</usedSize>
    </DiskInfo>
  </diskInfos>
</HardwareInfo>
cpu info is ...
network info is ...
D:\
TotalSize:100|Used Size:20|Available Size:80
E:\
TotalSize:200|Used Size:40|Available Size:160

4.常用XStream注解
1)@XStreamAlias注解可在类与属性上使用设置名称,相当于: xstream.alias("blog", Blog.class);
2)@XStreamImplicit去集合节点名:相当于 xstream.addImplicitCollection(Blog.class, "entries");

3) @XStreamConverter(SingleValueCalendarConverter.class)
    private Calendar createdTime = new GregorianCalendar();

时间: 2024-09-30 02:25:44

XStream的相关文章

使用XStream序列化、反序列化XML数据时遇到的各种问题

现在参与的项目是一个纯Application Server,整个Server都是自己搭建的,使用JMS消息实现客户端和服务器的交互,交互的数据格式采用XML.说来惭愧,开始为了赶进度,所有XML消息都是使用字符串拼接的,而XML的解析则是使用DOM方式查找的.我很早就看这些代码不爽了,可惜一直没有时间去重构,最近项目加了几个人,而且美国那边也开始渐渐的把这个项目开发的控制权交给我们了,所以我开始有一些按自己的方式开发的机会了.因而最近动手开始重构这些字符串拼接的代码. 对XML到Java Bea

XStream双下划线问题解决与CDATA标记同时的方案

1.问题 在微信开发过程中,需要进行xml格式的数据传输.有些微信接口的xml数据中需要加上CDATA标记,而大部分的xml数据的标签名都带有下划线.注意,微信接口中的数据是有下划线的,是"_"不是"-",让我很郁闷. 2.使用XStream把Java对象转成xml格式的数据 UnifiedOrder unifiedOrder = new UnifiedOrder(); unifiedOrder.setAppid("123456"); unifi

JAXB vs XStream

这两东东本质上是有差别的,JAXB称为OX binding工具,XStream应该算序列化工具,但 OX binding工具也会marshall和unmarshall,所以包含了序列化这一部分.序列化工具不一 定需要提供binding的功能.既然都玩序列化,那就简单地比较一下它们两在序列化方面的强 弱吧. JAXB:Toplink JAXB 10133,应该是JAXB 1.1标准 (取消了schema的validation功能) XStream:1.3.1 数据长度: 类型 长度 内容 XStr

对比XStream和JSON

XStream是thoughtworks开发的开源产品,采用的是xpp来进行xml和对象之间的转换. 它不需要schema或其他的mapping文件就可以进行java对象和xml文件之间的转换,API调 用起来非常方便,并且扩展功能强大. 网址:http://xstream.codehaus.org JSON是目前比较流行的轻量级的对象数据转换方式,常常用在ajax和web service领域 .目前大部分语言都有JSON的实现.Java领域有json lib,还有xstream json(je

使用XStream在JavaBean与XML/JSON之间相互转换

XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁.自然,在Java的世界里少不了完成JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib.这里我简单记下XStream 的用法. 其实相类似的工具早已有之.如果用过 DWR 的同志,一定有印像,DWR 进行远程方法调用时也能为你完成 JavaBean 和 JSON 格式的双向转换的,所依赖的是它的各种 Converter.再要是对 Struts1 的细节

几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比

最近研究了下google protobuf协议,顺便对比了一下json,xml,java序列化相关的数据对比,从几个纬度进行对比.   别人的相关测试数据: http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking   测试纬度 序列化时间 反序列化时间 bytes大小 测试代码 准备protobuf文件 1.import "InnerMessage.proto"; 2.package demo; 3.opti

用XStream 解析xml文件时,遇到&amp;amp;lt;![cdata[]]&amp;amp;gt;就报错,怎么办

问题描述 用XStream 解析xml文件时,遇到<![cdata[]]>就报错,怎么办 求给位大牛帮忙,为何我用XStream解析xml文件,遇到<![cdata[]]>,就解析不了,很着急困惑,呜呜呜 解决方案 这个CDATA不是大写吗!!!!!!

用xstream解析map的问题,求助

问题描述 用xstream解析map的问题,求助 大家好,如图所示是被人发送过来的xml.我想要把这个xml转化成对象来自己实用,但是黑圈里面的东西,我百度一天了还是找不到解决之法,特来找各位求助,麻烦帮忙看看,提供下思路,感激不尽,鞠躬 --一只奋斗的小菜鸟 解决方案 求指教,求助攻啊!求不吝指教

XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格式化输出 1.1 xStream 1 XStream x = new XStream(); 2 x.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", null,TimeZone.getTimeZone("GMT+

maven的pom 提示错误 Failure to transfer com.thoughtworks.xstream:xstream:jar:

问题描述 Description    Resource    Path    Location    TypeFailure to transfer com.thoughtworks.xstream:xstream:jar:1.4.3 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update in