Castor XML 简介和内省模式

Castor XML是一个数据绑定框架,用于把Java 对象编组到XML或从XML解组数据生成Java 对象。与DOM和SAX不同的是,这两者的关注点是XML文档的结构,而Castor XML关注的XML文档里的数据。Castor XML 处理数据绑定有三种方式:内省模式、映射文件、类描述器模式。

内省模式是最简单的方式。Castor XML 使用Java 的反射机制和默认的命名规则来处理XML文档里属性、元素与Java 类、属性之间的绑定关系。

内省模式主要使用org.exolab.castor.xml.Marshaller和 org.exolab.castor.xml.Unmarshaller的静态方法来编组和解组。

下面是一个要编组和解组的Java 类:

@SuppressWarnings("unchecked")
public class CD {
private String name = null;
private String artist = null;
private List tracks = null;

public CD() {
super();
}

public CD(String name, String artist) {
super();
this.name = name;
this.artist = artist;
}

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

public String getName() {
return name;
}

public void setArtist(String artist) {
this.artist = artist;
}

public String getArtist() {
return artist;
}

public void setTracks(List tracks) {
this.tracks = tracks;
}

public List getTracks() {
return tracks;
}

public void addTrack(String trackName) {
if (tracks == null) {
tracks = new ArrayList();
}
tracks.add(trackName);
}
}


下面是一个编组到XML的代码:

public class IntrospectMarshaller {
public static void main(String[] args) {
try {
CD sessions = new CD("Sessions for Robert J", "Eric Clapton");
sessions.addTrack("Little Queen of Spades");
sessions.addTrack("Terraplane Blues");

FileWriter writer = new FileWriter("cds.xml");
Marshaller.marshal(sessions, writer);
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace(System.err);
}
}
}


编组生成的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<CD>
<artist>Eric Clapton</artist>
<name>Sessions for Robert J</name>
<tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="java:java.lang.String">Little Queen of Spades</tracks>
<tracks xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="java:java.lang.String">Terraplane Blues</tracks>
</CD>


从生成的XML文档解组,生成Java 对象的代码:

public class IntrospectUnmarshaller {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
FileReader reader = new FileReader("cds.xml");
CD cd = (CD) Unmarshaller.unmarshal(CD.class, reader);
System.out.println("CD title: " + cd.getName());
System.out.println("CD artist: " + cd.getArtist());
List tracks = cd.getTracks();
if (tracks == null) {
System.out.println("No tracks.");
} else {
for (Iterator i = tracks.iterator(); i.hasNext();) {
System.out.println("Track: " + i.next());
}
}
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace(System.err);
}
}
}

结果输出:
CD title: Sessions for Robert J
CD artist: Eric Clapton
Track: Little Queen of Spades
Track: Terraplane Blues


内省模式的缺点:
1、Java 类及属性与XML文档的元素、属性之间的绑定的命名规则是由Castor XML框架定义的,这是可能改变的,如果改变了,已有代码可能不能运行。
2、如果XML文档的元素、属性名是我们无法控制的,则无法解决。
3、无法解决一个Java 类映射到多个平台的XML文档(每个平台的XML文档都不同)的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值