您的位置:首页 > 其它

Castor的XML数据绑定应用

2005-01-12 22:19 417 查看

Castor的XML数据绑定应用

板桥里人 http://www.jdon.com 2002/07/27

Java与.net最大不同之处在于,Java是在开放源代码领域中成长的,所以,你不必苦苦等待某一个公司的产品开发进度,在开源领域,每天都诞生有关Java令人激动的新技术,你可以仔细研究它,可能是昙花一现,更可能是一种全新技术的发现,这种心情已经让你忘记了自己孤独的境遇。

Castor无疑是一种新的实用的概念,它的XML对象化操作和JDO概念都是令人激动的。我们这里只谈谈它的XML数据绑定技术。

对XML操作,我们已经知道SAX DOM 和JDOM, Castor有什么不同?

Castore能够将XML数据映射成Java对象数据,这样你只要和Java数据对象操作,就相当于对XML数据操作,这种概念无疑方便我们将XML作为类似数据库那样的数据源。

我们知道,现在操作数据库通过EJB JDO来实现对Java对象数据操作,Castor为我们提供了对XML的这样的操作,这样岂不是更方便?而SAS DOM JDOM是对XML中具体数据结构进行操作,没有Castor那样完全对象化的概念。

举例说明:

有page.xml文件如下

<homepagecollection name="this is sample">

<homepagecontent id="1">

<name>About Us</name>

<navlink>1.jsp</navlink>

<icon>images/icon.gif</icon>

<description>An in-depth look at creating applications with XML.</description>

</homepagecontent>
<homepagecontent id="2">

<name>Product|Service</name>

<navlink>2.jsp</navlink>

<icon>images/icon.gif</icon>

<description>let's tak a look at our products.</description>

</homepagecontent>

</homepagecollection>

这是个很典型的XML文件,homepagecollection中有多个homepagecontent

那么使用Castor,我们只要建立两个对象,就可以对这个XML文件进行读写操作。

public class Homepagecontent implements java.io.Serializable{
private Integer id;

private String name;

private String navlink;

private String icon;

private String description;

public Homepagecontent(){

}

public Integer getId(){ return id;}

public void setId(){ this.id=id;}

public String getName(){ return name;}

public void setName(){ this.name=name;}

public String getNavlink(){ return navlink;}

public void setLink(){ this.navlink=navlink;}

public String getIcon(){ return icon;}

public void setIcon(){ this.icon=icon;}

public String getDescription(){ return description;}

public void setDescription(){ this.description=description;}

}

上面这个Javabean中,setXXXX和getXXXX中的XXXX就是page.xml中homepagecontent中对应名称。

这个很类似于Javabean和数据库之间的对应关系。

再来看看Homepagecollection.java

public class Homepagecollection implements java.io.Serializable{
private String SiteName;

private List homepagecontents = new ArrayList();

public Homepagecollection() { }

// -- manipulate the List of Page objects

public void addHomePageContent(Homepagecontent homepagecontent) {

homepagecontents.add(homepagecontent);

}

public List getHomepagecontents() {

return homepagecontents;

}

// -- manipulate the name of the address book

public String getName() {

return SiteName;

}

public void setName(String name) {

this.SiteName = name;

}

}

Homepagecollection.java就是对应page.xml 由于page.xml中Homepagecollection内包含多个Homepage,程序里使用List来表示。

那么page.xml中的数据如何读入Homepagecollection.java中?

public HomePageHandle(String mapfile,String xmlfile) throws Exception{

this.xmlfile=xmlfile;

try{

mapping = new Mapping();

mapping.loadMapping(mapfile);

}catch(Exception e){

throw new Exception(e.getMessage());

}
}

// -- page.xml中的数据读入Homepagecollection

public Homepagecollection read() throws Exception{

Homepagecollection homepages=null;

try{

Unmarshaller un = new Unmarshaller(Homepagecollection.class);

un.setMapping(mapping);

FileReader in = new FileReader(xmlfile);

homepages = (Homepagecollection) un.unmarshal(in);

in.close();

}catch(Exception e){

throw new Exception(e.getMessage());

}

return homepages;

}

注意。只要使用Unmarshaller这一句就将XML的数据读入JavaBean Homepagecollection中,这样以后只要对Homepagecollection.class进行数据操作就可以。

比如使用Homepagecollection.getName()就可以得到page.xml中的"this is sample".

是不是很方便?

注意这里要配置mapping.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<mapping>

<description>a map file for our new template system</description>
<class name="Homepagecontent">

<map-to xml="homepagecontent"/>

<field name="id" type="integer">

<bind-xml name="id" node="attribute" />

</field>

<field name="name" type="string" />

<field name="navlink" type="string" />

<field name="icon" type="string" />

<field name="description" type="string" />

</class>

<class name="Homepagecollection">

<map-to xml="homepagecollection"/>

<field name="name" type="string">

<bind-xml name="name" node="attribute" />

</field>

<field name="homepagecontents" type="Homepagecontent" collection="collection" />

</class>

</mapping>

这个文件主要让Castor来对page.xml和Homepagecollection.class Homepagecontent.class装载(Unmarshaller)或卸载(Marshaller)数据用。

关于Castor进一步在项目中的使用见《Java实用系统开发指南》第4章

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: