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解析成对象就完成了;