浏览 3093 次
锁定老帖子 主题:Castor学习笔记
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-28
在大型的企业应用中,互发接口使用的大部分都是基于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形式进行存储,即写到了结点的属性里。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |