`
中国爪哇程序员
  • 浏览: 167299 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

xtream demo

    博客分类:
  • java
 
阅读更多
1 xStream框架
xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;
官网:
http://xstream.codehaus.org/

2 about xtream
xtream  是一个简单的工具包,用来把对象序列化成xml配置文件,并且也可以把xml反序化成对象。

4Features 功能特点
简单易用,不需要配置映射,速度快并且占用内存小,生成的xml配置文件很干净,不带额外无用信息,这样在反映序列化的时候容易读取。不需要修改序列化对象的类型。支持类图。与xmlapi 整合。详细的返回错误信息。可修改的输出 显示。

4 点型应用
传输:网络传输
持久化:生成的XML可以写到文件,做持久化。
配置:XML最常用的配置文件。
单元测试

5局限
If using the enhanced mode, XStream can re-instantiate classes that do not have a default constructor. However, if using a different JVM like an old JRockit version, a JDK 1.3 or you have restrictions because of a SecurityManager, a default constructor is required.
The enhanced mode is also necessary to restore final fields for any JDK < 1.5. This implies deserialization of instances of an inner class.
Auto-detection of annotations may cause race conditions. Preprocessing annotations is safe though.

6准备一个pojo对象

package com.entity;

import java.util.Date;

public class Student {
	private int id;
	private String name;

	private String email;
	private String address;
	private Birthday birthday;
	private Date registDate;
	
	public Date getRegistDate() {
		return registDate;
	}

	public void setRegistDate(Date registDate) {
		this.registDate = registDate;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Birthday getBirthday() {
		return birthday;
	}

	public void setBirthday(Birthday birthday) {
		this.birthday = birthday;
	}

	// getter、setter
	public String toString() {
		return this.name + "#" + this.id + "#" + this.address + "#"
				+ this.birthday + "#" + this.email;
	}
}



7 bean 转成 xml

测试代码:
package com.test;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import com.entity.Birthday;
import com.entity.Student;
import com.thoughtworks.xstream.XStream;

@SuppressWarnings("unchecked")
public class XStreamTest {

	private XStream xstream = null;
	private ObjectOutputStream out = null;
	private ObjectInputStream in = null;

	private Student bean = null;

	@Before
	public void init() {
		try {
			xstream = new XStream();
			bean = getTestStudent();
			// xstream = new XStream(new DomDriver()); // 需要xpp3 jar
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		XStreamTest test = new XStreamTest();
		test.init();
		test.testWriteBean2XML_01();
	}

	public final void fail(String string) {
		System.out.println(string);
	}

	public final void failRed(String string) {
		System.err.println(string);
	}

	/**
	 * bean 2 XML
	 * */
	@Test
	public void testWriteBean2XML_01() {
		try {
			fail("------------Bean->XML------------");
			fail(xstream.toXML(bean));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 类重命名后的XML
	 * */
	@Test
	public void testWriteBean2XML_02() {
		try {
			fail("-----------类重命名后的XML------------");
			// 类重命名
			xstream.alias("student", Student.class);
			xstream.aliasField("生日", Student.class, "birthday");
			xstream.aliasField("生日日期", Birthday.class, "birthday");
			fail(xstream.toXML(bean));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 类重命名后的XML
	 * */
	@Test
	public void testWriteBean2XML_03() {
		try {
			fail("-----------属性重命名后的XML------------");
			// 属性重命名
			xstream.aliasField("邮件", Student.class, "email");
			fail(xstream.toXML(bean));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 包重命名后的XML
	 * */
	@Test
	public void testWriteBean2XML_04() {
		try {
			fail("-----------包重命名后的XML------------");
			//包重命名
			xstream.aliasPackage("modile", "com.entity");
			fail(xstream.toXML(bean));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 构造数据
	 * */
	private Student getTestStudent() {
		Student bean = new Student();
		bean.setAddress("china");
		bean.setEmail("jack@email.com");
		bean.setId(1);
		bean.setName("jack");
		Birthday day = new Birthday();
		day.setBirthday("2010-11-22");
		bean.setBirthday(day);
		bean.setRegistDate(new Date());
		return bean;
	}
}


测试结果:
------------Bean->XML------------
<com.entity.Student>
  <id>1</id>
  <name>jack</name>
  <email>jack@email.com</email>
  <address>china</address>
  <birthday>
    <birthday>2010-11-22</birthday>
  </birthday>
  <registDate>2011-07-11 22:33:02.359 CST</registDate>
</com.entity.Student>
-----------类重命名后的XML------------
<student>
  <id>1</id>
  <name>jack</name>
  <email>jack@email.com</email>
  <address>china</address>
  <生日>
    <生日日期>2010-11-22</生日日期>
  </生日>
  <registDate>2011-07-11 22:33:02.390 CST</registDate>
</student>
-----------属性重命名后的XML------------
<com.entity.Student>
  <id>1</id>
  <name>jack</name>
  <邮件>jack@email.com</邮件>
  <address>china</address>
  <birthday>
    <birthday>2010-11-22</birthday>
  </birthday>
  <registDate>2011-07-11 22:33:02.406 CST</registDate>
</com.entity.Student>
-----------包重命名后的XML------------
<modile.Student>
  <id>1</id>
  <name>jack</name>
  <email>jack@email.com</email>
  <address>china</address>
  <birthday>
    <birthday>2010-11-22</birthday>
  </birthday>
  <registDate>2011-07-11 22:33:02.406 CST</registDate>
</modile.Student>

8 List 2 XML

			fail("------------Listg<Strudent>->XML------------");
			List<Student> list = new ArrayList<Student>();
			list.add(bean);
			Student s1 = getTestStudent();
			s1.setId(2);
			list.add(s1);
			fail(xstream.toXML(list));


结果:
------------Listg<Strudent>->XML------------
<list>
  <com.entity.Student>
    <id>1</id>
    <name>jack</name>
    <email>jack@email.com</email>
    <address>china</address>
    <birthday>
      <birthday>2010-11-22</birthday>
    </birthday>
    <registDate>2011-07-11 22:47:08.0 CST</registDate>
  </com.entity.Student>
  <com.entity.Student>
    <id>2</id>
    <name>jack</name>
    <email>jack@email.com</email>
    <address>china</address>
    <birthday>
      <birthday>2010-11-22</birthday>
    </birthday>
    <registDate>2011-07-11 22:47:08.0 CST</registDate>
  </com.entity.Student>
</list>



分享到:
评论
1 楼 crazyqj 2013-04-08  
少一个sutent类

相关推荐

    Xtream Path1.4汉化版

    【Xtream Path1.4汉化版】是一款专为Adobe Illustrator CS5设计的插件,它极大地扩展了软件的功能,特别是在路径编辑和图形创作方面提供了更多便捷的操作。这款插件经过汉化处理,使得中国用户能够更加方便地理解和...

    Xtream Path_汉化版

    ai插件 Xtream Path_汉化版

    Xtream Path 1.5 – AI圆角插件 FOR CS6

    CValley Xtream Path是一款国外开发的超强大的Adobe Illustrator的路径编辑插件。使用Xtream Path可以实现很多对于路径的操作(拖曳,拉伸,推动等),当编辑路径时也不会受控制点的约束,允许把路径拖曳到任何地方,...

    xtream使用

    【标题】:“xtream使用” 在IT行业中,"xtream"通常指的是Xtream Code,这是一个流行的流媒体服务器管理系统,广泛应用于IPTV业务。它提供了管理频道、用户、播放列表以及实现计费功能的全面解决方案。这篇博客...

    AI圆角插件 - CValley Xtream Path v1.6 for Adobe Illustrator - FOSI

    AI圆角插件 - CValley Xtream Path v1.6 for Adobe Illustrator - FOSI 相信大家和足迹一样,从Adobe CS6出世的那天就在等待同版本的圆角插件的面世,有的恐怕和足迹一样为了使用圆角插件而选择安装两个版本的ai,...

    Xtream_Path illustrator插件

    **Xtream_Path Illustrator插件详解** Xtream_Path是一款专为Adobe Illustrator设计的强大插件,它极大地扩展了Illustrator的基础功能,提升了设计师的工作效率。这款插件以其易用性和高效性深受用户喜爱,尤其在...

    Xtream Path 1.4英文版

    CValley Xtream Path是一款国外开发的超强大的Adobe Illustrator的路径编辑插件。使用Xtream Path可以实现很多对于路径的操作(拖曳,拉伸,推动等),当编辑路径时也不会受控制点的约束,允许把路径拖曳到任何地方,...

    Xtream ToolKit 使用总结

    Xtream ToolKit 是一套强大的开发工具集合,主要用于提高软件开发者在编程过程中的效率和便捷性。这个工具包可能包含了多种组件和库,用于不同领域的应用开发,如UI设计、数据处理、网络通信等。在深入探讨Xtream ...

    xtream path 1.5 for cs6破解版本亲测有效 极品珍惜资源

    xtream path 1 5 for cs6亲测有效 里面有注册码 32位和64位的都有 安装方法不再赘述 功能非常强大的一个插件 还有插件使用说明书 绝对的极品珍惜资源 学AI必备

    《Illustrator圆角插件:Xtream Path 1.3汉化版(CS至CS5通常)

    这时,第三方插件如“Xtream Path 1.3”就能发挥重要作用。 Xtream Path 1.3是一款专为Adobe Illustrator设计的圆角插件,经过汉化处理,更适合中国用户使用。它支持从Illustrator CS到CS5的多个版本,这意味着即使...

    CValley.Xtream.Path(AI圆弧插件)

    **CValley.Xtream.Path 插件详解** 在图形设计领域,Adobe Illustrator(简称AI)是一款被广泛使用的矢量图形编辑工具。然而,对于设计师来说,创建精确、流畅的圆弧并非总是那么简单。这时,CValley.Xtream.Path ...

    Xtream解析xml

    在处理大量XML数据时,效率成为一个关键问题,这时就需要高效的解析库,如Xtream。Xtream是一个轻量级的Java库,它提供了一种流式API来读取和写入XML,使得解析和生成XML变得更加高效和简洁。 **Xtream解析XML的...

    Adobe illustrator 倒角插件 Xtream Path+crack

    很好用的一个AI倒角插件,序列号在nfo文件中,

    Xtream.Path.v1.4.for.Adobe.Illustrator

    Now with Xtream Path, you can drag anywhere on a path without fiddling around with direction lines and control points. Boasting 36 useful tools, filters, and effects, it gives you the flexibility ...

    Xtream path 1.3 for illustrato cs4注册版

    好用的illustrator 路径编辑插件,支持cs4 解压后复制到Adobe Illustrator CS4\Plug-ins\Tools文件夹,运行ai后,点击该工具,会出现注册信息,复制,注册,OK

    jackson xtream应用

    Jackson XTream是Jackson库的一个重要组成部分,主要用于处理XML数据流。Jackson是Java中广泛使用的JSON库,而XTream模块则提供了处理XML数据的强大工具。在本文中,我们将深入探讨Jackson XTream的应用,包括其核心...

    xtream所有包

    在标题"xtream所有包"中,我们可以理解这是关于Xstream及其相关依赖包的集合。描述中的“可用的xstream的所有依赖包”表明了这个压缩包包含了运行Xstream所需的所有外部库。接下来,我们将详细探讨Xstream的核心功能...

    Xtream:Xtream是Java的开源复杂事件处理库

    Xtream Xtream是Java的开源复杂事件处理库。 如果您正在寻找仅用于提交一些查询的基于Java的cep,则有更好的选择(例如Esper),但是如果您需要一个简单易懂的CEP库来对其进行处理,扩展,使用它,尤其是用于研究流...

    Xtream Xttoolkit

    是一个很好的界面库,可以解决MFC界面不够完美的问题

    xtream-codes-api-v2:API V2文档

    xtream-codes-api-v2 最终公开的Xtream-Codes API V2官方正式文档,该文档在现已终止的xtream-codes.com论坛上发布原始网址: : 作者:BlackDream

Global site tag (gtag.js) - Google Analytics