ITPub博客

首页 > > > 实现 Castor 数据绑定--转-2

实现 Castor 数据绑定--转-2

作者:longmanma 时间:2020-01-06 09:36:34 0 删除 编辑

;

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);

}

}

}

最后一个类如清单 3 所示,是一个用于解组的类。

清单 3. 用于测试解组的类

package ibm.xml.castor;

import java.io.FileReader;

import java.util.Iterator;

import java.util.List;

import org.exolab.castor.xml.Unmarshaller;

public class UnmarshalTester {

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);

}

}

}

像下面这样编译这些类:

[bmclaugh:~/Documents/developerworks/castor] javac -d . *.java

Note: CD.java uses unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

如果使用的是 Java 5 或更高的版本,而在CD.java中没有使用参数化的类型,就会出现上面的警告。不要担心,这不会有什么影响。现在需要运行编组程序测试类。

[bmclaugh:~/Documents/developerworks/castor] java ibm.xml.castor.MarshalTester

找到并打开cds.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 文档中看到在MarshalTester类中创建的 CD 的所有信息。

现在需要确保可以将 XML 文档转换回 Java。运行解组测试程序:

[bmclaugh:~/Documents/developerworks/castor] java ibm.xml.castor.UnmarshalTester

CD title: Sessions for Robert J

CD artist: Eric Clapton

Track: Little Queen of Spades

Track: Terraplane Blues

这些代码非常简单,无需解释。如果你获得了这样的输出,就说明已经用 Castor 打开了 XML 文件,并且已经将其转换为一个 Java 类。

现在 — 我们假设您已经用UnmarshalTester获得了相同的cds.xml和输出 — 您安装的 Castor 能够正常运行。您还没有使用 Castor 做任何比较复杂的工作,只是确保了它能正常运行、正确设置了 JAR 文件以及 Castor 能够根据需要实现不同的功能。

 

回页首

结束语

现在,您有了一个能够正常运行的 Castor 环境。清单1、2和3让您对 Castor 的工作原理有了一定的了解。看看自己能否实现编组和解组功能吧。在下一篇文章中,您将会更进一步了解 Castor 的 XML 特性,以及如何使用映像文件。到那时,请继续体验 Castor 的功能。

原文:http://www.ibm.com/developerworks/cn/xml/x-xjavacastor1/index.html

第 2 部分: 编组和解组 XML

需要准备什么

开始之前需要保证具备了本文所需要的前提条件。确保满足这些要求最简单的办法就是按照 本系列第一篇文章(链接参见本文参考资料部分)介绍的步骤操作。第一篇文章介绍了如何下载、安装和配置 Castor,并用一些简单的类进行了测试。

从您手头的项目中选择一些类转换成 XML 然后再转换回来也没有问题。本文(以及上一期文章)提供了一些例子,但是要掌握 Castor,最好的办法是把这里学到的东西应用到您自己的项目中。首先从一些简单的对象类开始,比如代表人、唱片、图书或者某种其他具体对象的类。然后可以阅读本文中关于映射的内容,从而增加一些更复杂的类。

 

回页首

编组 101

Castor 最基本的操作是取一个 Java 类然后将类的实例编组成 XML。可以把类本身作为顶层容器元素。比如Book类很可能在 XML 文档中得到一个名为 “book” 的根元素。

类的每个属性也表示在 XML 文档中。因此值为 “Power Play” 的title属性将生成这样的 XML:

<title>Power Play</title>

很容易由此推出一个简单 Java 类所生成的 XML 文档的其余部分。

 

回页首

编组类的实例

开始编组代码之前有几点需要注意。第一,只能编组类的实例而不能编组类本身。类是一种结构,等同于 XML 约束模型,如 DTD 或 XML Schema。类本身没有数据,仅仅定义了所存储的数据的结构和访问方法。

实例化类(或者通过工厂以及其他实例生成机制获得)将赋予它具体的形式。然后用实际数据填充实例的字段。实例是惟一的,它和同一类的实例具有相同的结构,但数据是不同的。图 1 直观地说明了这种关系。

图 1. 类提供结构,实例即数据

因而编组的只能是实例。后面将看到如何使用约束模型和映射文件改变 XML 的结构。但是现在要做的是让 XML 结构(元素和属性)和 Java 结构(属性)匹配。

基本的编组

清单 1 是本文中将使用的一个简单的Book类。

清单 1. Book 类

package ibm.xml.castor;

public class Book {

/** The book's ISBN */

private String isbn;

/** The book's title */

private String title;

/** The author's name */

private String authorName;

public Book(String isbn, String title, String authorName) {

this.isbn = isbn;

this.title = title;

this.authorName = authorName;

}

public String getIsbn() {

return isbn;

}

public void setTitle(String title) {

this.title = title;

}

public String getTitle() {

return title;

}

public void setAuthorName(String authorName) {

this.authorName = authorName;

}

public String getAuthorName() {

return authorName;

}

}

编译上述代码将得到Book.class文件。这个类非常简单,只有三个属性:ISBN、标题和作者姓名(这里有些问题,暂时先不管)。仅仅这一个文件还不够,Castor 还需要几行代码将Book类的实例转化成 XML 文档。清单 2 中的小程序创建了一个新的Book实例并使用 Castor 转化成 XML。

清单 2. Book 编组器类

package ibm.xml.castor;

import java.io.FileWriter;

import org.exolab.castor.xml.Marshaller;

public class BookMarshaller {

public static void main(String[] args) {

try {

Book book = new Book("9780312347482", "Power Play", "Joseph Finder");

FileWriter writer = new FileWriter("book.xml");

Marshaller.marshal(book, writer);

} catch (Exception e) {

System.err.println(e.getMessage());

e.printStackTrace(System.err);

}

}

}

编译然后运行该程序。将得到一个新文件book.xml。打开该文件将看到如下所示的内容:

清单 3. 编译后的程序创建的 XML

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

<book><author-name>Joseph Finder</author-name>

<isbn>9780312347482</isbn><title>Power Play</title></book>

为了清晰起见我增加了断行。实际生成的 XML 文档在author-name元素的结束标记和isbn元素的开始标记之间没有断行。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2730/viewspace-3136581/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: linux服务-简介
请登录后发表评论 登录
全部评论

注册时间:2019-12-18

  • 博文量
    492
  • 访问量
    11992