将对象转换为xml以持久化的圣器 xtream
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对象
7 bean 转成 xml
测试代码:
测试结果:
------------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
结果:
------------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>
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对象
Java代码
- 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
测试代码:
Java代码
- 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
Java代码
- 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>
- 博客分类:
- 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对象
7 bean 转成 xml
测试代码:
测试结果:
------------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
结果:
------------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>
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对象
Java代码
- 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
测试代码:
Java代码
- 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
Java代码
- 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>