Castor学习笔记

准确说是一种Java XML数据绑定技术。
在大型的企业应用中,互发接口使用的大部分都是基于XML文档接口的数据信息,抛出复杂的信息本 身,其实从结构上讲,大部分都是较为简单的结构,因为这个文档本身只是为传递一些信息存在的。例如如下这个文档结构。

熟悉hibernate的或许知道hibernate的意义在于数据库和javabean之间的映射,俗称ORM,那么简单的理解Castor的含义,那就可以叫做OXM了。Object-XML-Mapping。Castor可以将一个javabean直接写入到xml中,可以将一个结构规则的xml装入javabean中去,强大吧。
开始使用Castor
新建一个java项目,引入castor的引用包,应该是两个,一个是castor,一个是xercesImpl的包。
http://www.castor.org/1.3/download.html
第一个Castor程序
这里,先要写一个javabean,这里的David是一个简单的javabean,拥有name,age,borndate3个属性,下面重点的是如何用castor来生成和解析xml文件
public static void main(String[] args) {
// TODO Auto-generated method stub

David bean = new David();
bean.setAge(24);
bean.setName("David");
bean.setBorndate(new Date());

try {
// write it out as XML
File file = new File("files//David.xml");
Writer writer = new FileWriter(file);
Marshaller.marshal(bean, writer);
// now restore the value and list what we get
Reader reader = new FileReader(file);
David read = (David) Unmarshaller.unmarshal(David.class, reader);
System.out.println("David: " + read.getName() + read.getBorndate()
+ read.getAge());
} catch (IOException ex) {
ex.printStackTrace(System.err);
} catch (MarshalException ex) {
ex.printStackTrace(System.err);
} catch (ValidationException ex) {
ex.printStackTrace(System.err);
}
}

<?xml version="1.0" encoding="GBK"?>
<david age="24">
<borndate>2010-01-06T13:09:20.218+08:00</borndate>
<name>David</name>
</david>



认识Castor
Castor提供的API中Marshaller和Unmarshaller是非常重要的两个,其中Marshaller用于生成xml,而后者用于从xml解析出javabean,如上面的代码所示,简单的给Marshaller传入需要生成xml的bean对象和负责写入文件的writer后,Marshaller在内部进行了诸如获取对象的字段信息,调用writer写入xml等等等等复杂的事情。而Unmarshaller需要的仅仅是类的结构和负责读取文件的reader。而且,对于用户来说,Castor还提供了默认的xml文档格式,在上面的代码中,如果我们不关心xml的格式,我们甚至不用去考虑这些事情。
格式描述文件
了解hibernate的应该知道,hibernate中有种文件格式称做映射文件,而那个文件的作用是用来描述对象和数据库表之间的映射关系。castor中也有用于描述对象和xml之间映射关系的文件,这个文件用来规定Marshaller如何来写这个xml文件。
废话不多说,看一个例子:
如果我想要让xml格式变更一下,例如变成如下的格式:
<?xml version="1.0" encoding="GBK"?>
<david age="24" borndat="2010-01-06T13:00:02.234+08:00" name="David"/>

这里把所有的子结点都写成了属性的形式。很显然,如果不改动代码,程序一定不会改变文档的结构,那么,这就涉及到了我们先前提到的xml格式描述文件。
<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.exolab.org/mapping.dtd">
<mapping>
<description>Basic mapping example</description>
<class name="org.david.castor.David" auto-complete="true">
<map-to xml="David"/>
<field name="name">
<bind-xml name="name" node="attribute"/>
</field>
<field name="borndate">
<bind-xml name="borndate" node="attribute"/>
</field>
</class>
</mapping>


通过这个文件我们可以把每个feild的映射方式进行设定,这里<bind-xml name="borndate" node="attribute"/> ,name规定了这个值在xml中的显示名,而node规定了该值的xml存储方式,这里是用attribute形式进行存储,即写到了结点的属性里。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值