现在的位置: 首页 > 综合 > 正文

xStream完美转换XML、JSON

2013年03月07日 ⁄ 综合 ⁄ 共 3486字 ⁄ 字号 评论关闭

xStream框架

xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;

前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html

以及Jackson这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html

它们都完美支持JSON,但是对xml的支持还不是很好。一定程度上限制了对Java对象的描述,不能让xml完全体现到对Java对象的描述。这里将会介绍xStream对JSON、XML的完美支持。xStream不仅对XML的转换非常友好,而且提供annotation注解,可以在JavaBean中完成对xml节点、属性的描述。以及对JSON也支持,只需要提供相关的JSONDriver就可以完成转换。

一、准备工作

1、 下载jar包、及官方资源

xStream的jar下载地址:

https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip

官方的示例很全,官方参考示例:http://xstream.codehaus.org/tutorial.html

添加xstream-1.3.1.jar文件到工程中,就可以开始下面的工作;需要的jar如下:

clip_image002

2、 测试用例代码

package com.hoo.test;

 

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.StringReader;

import java.io.Writer;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

import org.codehaus.jettison.json.JSONException;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.hoo.entity.Birthday;

import com.hoo.entity.Classes;

import com.hoo.entity.ListBean;

import com.hoo.entity.Student;

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;

import com.thoughtworks.xstream.io.json.JsonWriter;

 

/**

 * <b>function:</b>Java对象和XML字符串的相互转换

 * jar-lib-version: xstream-1.3.1

 * @author hoojo

 * @createDate Nov 27, 2010 12:15:15 PM

 * @file XStreamTest.java

 * @package com.hoo.test

 * @project WebHttpUtils

 * @blog http://blog.csdn.net/IBM_hoojo

 * @email hoojo_@126.com

 * @version 1.0

 */

@SuppressWarnings("unchecked")

public class XStreamTest {

    

    private XStream xstream = null;

    private ObjectOutputStream  out = null;

    private ObjectInputStream in = null;

    

    private Student bean = null;

    

    /**

     * <b>function:</b>初始化资源准备

     * @author hoojo

     * @createDate Nov 27, 2010 12:16:28 PM

     */

    @Before

    public void init() {

        try {

            xstream = new XStream();

            //xstream = new XStream(new DomDriver()); // 需要xpp3 jar

        } catch (Exception e) {

            e.printStackTrace();

        }

        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);

    }

    

    /**

     * <b>function:</b>释放对象资源

     * @author hoojo

     * @createDate Nov 27, 2010 12:16:38 PM

     */

    @After

    public void destory() {

        xstream = null;

        bean = null;

        try {

            if (out != null) {

                out.flush();

                out.close();

            }

            if (in != null) {

                in.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        System.gc();

    }

    

    public final void fail(String string) {

        System.out.println(string);

    }

    

    public final void failRed(String string) {

        System.err.println(string);

    }

}

通过XStream对象的toXML方法就可以完成Java对象到XML的转换,toXML方法还有2个相同签名的方法,需要传递一个流。然后通过流来完成xml信息的输出。

3、 需要的JavaBean

package com.hoo.entity;

 

public class Student {

    private int id;

    private String name;

    private String email;

    private String address;

    private Birthday birthday;

    //getter、setter

    public String toString() {

        return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;

    }

}

二、Java转换成XML

1、 JavaBean转换XM

/**

 * <b>function:</b>Java对象转换成XML字符串

 * @author hoojo

 * @createDate Nov 27, 2010 12:19:01 PM

 */

@Test

public void writeBean2XML() {

    try {

        fail("------------Bean->XML------------");

        fail(xstream.toXML(bean));

        fail("重命名后的XML");

        //类重命名

        //xstream.alias("account", Student.class);

        //xstream.alias("生日", Birthday.class);

        //xstream.aliasField("生日", Student.class, "birthday");

        //xstream.aliasField("生日", Birthday.class, "birthday");

抱歉!评论已关闭.