首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Castor XML 简介跟内省模式

2012-08-31 
Castor XML 简介和内省模式Castor XML是一个数据绑定框架,用于把Java 对象编组到XML或从XML解组数据生成Ja

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文档都不同)的情况。

热点排行