xtream demo

1 xStream框架
xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;
官网:
[url]http://xstream.codehaus.org/[/url]

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值