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

用Castor 处理XML文档

2011年10月08日 ⁄ 综合 ⁄ 共 3390字 ⁄ 字号 评论关闭

——Castor可以完成Java和XML的相互转换

前面有介绍过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

它们都可以完成Java对象到XML的转换,但是还不是那么的完善。还有XStream对JSON及XML的支持,它可以对JSON或XML的完美转换。在线博文:

http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

这里将介绍Castor来完成Java对象到xml的相互转换。它是怎么样转换的?和前面不同的是castor可以用一个mapping.xml文件来描述转换后的Java对象的xml基本形态,类似于xStream的annotation,这点还是非常不错的。下面我们就来看看Castor是怎么样完成Java对象到XML之间的相互转换吧。

一、 准备工作

1、 官方资源

本示例会运用到如下依赖包(jar包):

clip_image002

资源及jar包下载:http://www.castor.org/download.html

junit jar下载地址:

https://github.com/KentBeck/junit/downloads

关于官方提供的mapping配置相关示例、文档:

http://www.castor.org/xml-mapping.html

ibm提供的castor方面的文档资料:

http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&client=aff-cs-360se&hs=Gon&biw=1349&bih=603&q=castor+site%3Awww.ibm.com%2Fdeveloperworks%2Fcn%2Fxml%2F&aq=f&aqi=&aql=&oq=

2、 程序测试运行代码

package com.hoo.test;

 

import java.io.IOException;

import java.io.StringReader;

import java.io.StringWriter;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.exolab.castor.mapping.Mapping;

import org.exolab.castor.mapping.MappingException;

import org.exolab.castor.xml.MarshalException;

import org.exolab.castor.xml.Marshaller;

import org.exolab.castor.xml.Unmarshaller;

import org.exolab.castor.xml.ValidationException;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.hoo.entity.Account;

import com.hoo.entity.AccountArray;

import com.hoo.entity.Birthday;

import com.hoo.entity.ListBean;

import com.hoo.entity.MapBean;

 

/**

 * <b>function:</b>Castor完成Java对象到XML的相互转换

 * 依赖jar: castor-1.3.jar 

 * castor-1.3-core.jar 

 * junit-4.8.2.jar 

 * log4j-1.2.16.jar 

 * commons-logging.jar

 * @author hoojo

 * @createDate 2011-4-21 下午07:57:26

 * @file CastorTest.java

 * @package com.hoo.test

 * @project WebHttpUtils

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

 * @email hoojo_@126.com

 * @version 1.0

 */

public class CastorTest {

    

    private Account bean = null;

    private Mapping mapping = new Mapping();

    private StringWriter writer = null;

    private StringReader reader = null;

    

    @Before

    public void init() {

        bean = new Account();

        bean.setAddress("北京");

        bean.setEmail("email");

        bean.setId(1);

        bean.setName("jack");

        Birthday day = new Birthday();

        day.setBirthday("2010-11-22");

        bean.setBirthday(day);

        

        try {

            /**

             * 加载mapping.xml,此文件是对需要转换的Java对象的配置描述,

             * 即:转换后的Java对象的xml内容的转换规则

             */

            mapping.loadMapping(System.getProperty("user.dir") + "\\src\\mapping.xml");

        } catch (IOException e) {

            e.printStackTrace();

        } catch (MappingException e) {

            e.printStackTrace();

        }

    }

    

    @After

    public void destory() {

        bean = null;

        mapping = null;

        try {

            if (writer != null) {

                writer.flush();

                writer.close();

            }

            if (reader != null) {

                reader.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        System.gc();

    }

    

    public void fail(Object o) {

        System.out.println(o);

    }

    

    public void failRed(Object o) {

        System.err.println(o);

    }

}

Mapping对象可以完成Java对象到XML的编组和解组,它需要先设定一个mapping.xml,通过xml对JavaObject的描述。来完成JavaObject的编组、解组工作。

3、 看看即将被转换的JavaEntity代码

Account

package com.hoo.entity;

 

public class Account {

    private int id;

    private String name;

    private String email;

    private String address;

    private Birthday birthday;

    

    //setter、getter

    @Override

    public String toString() {

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

    }

}

Birthday

package com.hoo.entity;

 

public class Birthday {

    private String birthday;

    

    public Birthday(String birthday) {

        super();

        this.birthday = birthday;

    }

    //getter、setter

    public Birthday() {}

    

    @Override

    public String toString() {

        return this.birthday;

    }

}

AccountArray

package com.hoo.entity;

抱歉!评论已关闭.