castor解析

Castor解析Demo
近来的项目中涉及到了JAVA对象到XML格式数据转换问题,经过查找发现Castor是个好东西,于是便简单用了一下!
熟悉hibernate的或许知道hibernate的意义在于数据库和javabean之间的映射,俗称ORM,那么简单的理解Castor的含义,那就可以叫做OXM了。Object-XML-Mapping。Castor可以将一个javabean直接写入到xml中,可以将一个结构规则的xml装入javabean中去,强大吧。
开始使用Castor
新建一个工程castorDemo
应用castor所用的一些jar包:castor-1.3.1-anttasks.jar;
castor-1.3.1-codegen.jar;castor-1.3.1-core.jar;castor-1.3.1-ddlgen.jar
castor-1.3.1-jdo.jar;castor-1.3.1-xml-schema.jar;castor-1.3.1-xml.jar;
castor-1.3.1.jar;commons-lang-2.1.jar;commons-logging-1.1.jar

然后新建第一个实体类在此就叫Person:
public class Person implements Serializable
{
    private static final long serialVersionUID = 5084837923808890553L;
   
    private String address;
   
    private List<Man> mans;
}  

此处省略set/get方法.
Person里面有个集合,他的类型为Man,所以还要新建另一个类—Man:
public class Man implements Serializable
{

    /**
     * 注释内容
     */
    private static final long serialVersionUID = 5084837923808890553L;
   
    private String name;
   
    private int age;
}
此处省略set/get方法.
接下来就是要写Pseron类对应的映射文件:PersonMapping.xml
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"  
                         "http://castor.org/mapping.dtd">

<mapping>
<description>Person Mapping</description>

 <class name="com.huawei.bean.Person">
  <field name="address">
   <bind-xml name="address" node="attribute"></bind-xml>
  </field>

  <field name="mans" type="com.huawei.bean.Man" collection="collection">
   <bind-xml name="man" location="mans"></bind-xml>
  </field>

 </class>

 <class name="com.huawei.bean.Man">
 <map-to xml="man"/>
  <field name="name">
   <bind-xml name="node-name" node="attribute"></bind-xml>
  </field>

  <field name="age">
   <bind-xml name="node-age" node="attribute"></bind-xml>
  </field>
 </class>

</mapping>

BeanToXML:
public class BeanToXML
{
    public static void main(String[] args)
    {
        URL url = BeanToXML.class.getResource("personMapping.xml");
        //即将要生成的xml文件
        String destFile = "configuration/person.xml";
        Person person = new Person();
        person.setAddress("jiangsu");
       
        Man m = new Man();
        m.setAge(3);
        m.setName("Tom");
       
        Man m2 = new Man();
        m2.setAge(6);
        m2.setName("lili");
       
        List list = new ArrayList();
        list.add(m);
        list.add(m2);
       
        person.setMans(list);
       
        javaBeanToXML(url, destFile, person);
       
    }
   
    public static void javaBeanToXML(URL mappingFileURL, String destFile,
            Person person)
    {
        Mapping mapping = new Mapping();
       
        try
        {
            //将person对应的映射文件加入到Mapping中
            mapping.loadMapping(mappingFileURL);
            Marshaller marshaller = new Marshaller();
            marshaller.setMapping(mapping);
            //或者        XMLContext context = new XMLContext();
            //            context.addMapping(mapping);
            //            Marshaller marshaller = context.createMarshaller();
            marshaller.setWriter(new OutputStreamWriter(new FileOutputStream(
                    new File(destFile))));
            marshaller.marshal(person);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (MappingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (MarshalException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (ValidationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
   
}

XMLToBean:
public class XMLToBean
{
   
    /** 
     * 
     * @param args [参数说明]
     *
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        //即将要解析的person.xml
        String url = "configuration/person.xml";
        //person实体类对应的映射文件
        String mappingFile = XMLToBean.class.getResource("personMapping.xml")
                .getPath();
        xmlToBean(url, mappingFile, Person.class);
       
    }
   
    static void xmlToBean(String url, String mappingFile, Class person)
    {
        Mapping mapping = new Mapping();
        try
        {
            mapping.loadMapping(mappingFile);
            Unmarshaller unmarshaller = new Unmarshaller();
            unmarshaller.setMapping(mapping);
            unmarshaller.setClass(person);
            Person p = (Person)unmarshaller.unmarshal(new FileReader(url));
            System.out.println(p);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (MappingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (MarshalException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (ValidationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
好了,整个castor解析成xml和xml解析成对象就完成了;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值