本文使用 Apache Geronimo 作为您编写的 XMLBeans 的开发容器(但可以使用任何服务器)。本文假设您过去使用过 XML 并熟悉 XML 模式、XQuery、XPath 等概念。即使您不是专家也不用担心,因为 XMLBeans 隐藏了这些技术的复杂性。
XMLBeans 是什么?
XMLBeans 由 BEA 引入作为其 WebLogic Workshop 产品的一部分。2003 年 9 月,BEA 将 Page Flow、XMLBeans 和其他技术捐赠给开放源码社区。两个随之启动的项目是 Apache Beehive 和 Apache XMLBeans。
可以将 XMLBeans 看作对象-关系 (OR) 映射器,但这是针对 XML 文件而非关系数据库而言的。XMLBeans 允许您像访问任何 Java 对象或 JavaBean 一样访问 XML 文件。也就是说,它是一个 XML-Java 绑定工具。
Castor 和 Java Architecture for XML Binding (JAXB) 是执行类似 XML-Java 绑定的其他有名的技术。Castor 是一种有趣的技术:除了 XML-Java 数据绑定之外,它还提供类似典型 OR 映射工具的 Java-SQL 绑定。Castor 还支持运行时自省能力;它尝试将 XML 的元素和属性与 Java 类的类和字段相匹配。JAXB 是来自 Sun 的技术,提供一些基本能力。
过去,当评估 OR 工具时,最不可能考虑的是该工具是否可以用 XML 表示对象。今天,随着 SOA 成为潮流,这已经成为评估此类工具时最重要的标准。XMLBeans 技术虽然是最新的,但也可能是最高级的 XML-Java 绑定技术。经验表明,它最易使用,并提供最好的特性和性能。(对 XML-Java 绑定技术的详细比较超出了本文范围。)
图 1 演示了 XMLBean 的行为。在底层,XML 文件始终与 bean 表示保持同步。如果具有符合某个 XML 模式的文件,则可以使用 getter 和 setter 操作该文件,正如在 JavaBean 中所做的一样。XML 文档被当作一级数据对象 对待(这意味着它们可以被无限制地使用),以类似 JavaBean 的方式被访问。
图 1. XML-Java 绑定
清单 1. book 对象的 XML 文件
<mybook> <title>Pro Apache Beehive</title> <authors> <author>Kunal Mittal</author> <author>Srinivas Kanchanvally</author> </authors> <isbn>1590595157</isbn> </mybook> |
使用 XMLBeans 处理该文件时,相应的 Java 类维护该关系。 清单 2 展示了一些伪 Java 代码,以处理由该 XML 文件产生的 XMLBean。
清单 2. 处理 XMLBean 的伪 Java 代码
MyBook doc = MyBook.Factory.newInstance(); Book book = doc.addNewBook(); book.setTitle("Pro Apache Beehive"); book.setIsbn("1590595157"); String[] authors = new String[2]; authors[0] = new String("Kunal Mittal"); authors[1] = new String("Srinivas Kanchanavally"); book.setAuthors(authors); |
XMLBeans 和 SOA 开发
很容易推知 XMLBeans 如何与基于 SOA 的开发相关。XML 位于大多数 SOA 技术的核心,不管它们是否使用 Web 服务。即使假设 SOA 等同于 Web 服务(不用争论这个问题,目前本来就是这样),作为致力于 SOA 项目的开发人员,您无疑要使用 XML。您可能具有这样的实践经验,即利用 XML 解析器操作 XML 内容,然后将 XML 文件手动转换为更易操作的对象结构。您可能解析过 XML 并在这些文件中查找特定数据。或者您可能将一种 XML 结构转换为另一种。XMLBeans 解决了 SOA 世界中的这个问题:它为您挑起重担,而您可以专注于编写 Web 服务或其他 SOA 服务。
使用 SOA 或 Web 服务时,不用编写应用服务器或 XML 解析器。相反,使用供应商构建的或作为开放源码提供的一种技术,这种技术被广泛采用和测试,且遵循自己的生命周期。那么为什么要编写和管理代码来将 XML 转换为 Java 对象呢?使用 XMLBeans 有助于缩短服务的开发和测试时间,从而让您在服务交付时更敏捷。
回页首
在 Apache Geronimo 中使用 XMLBeans
如前所述,本文在示例中使用 Apache Geronimo 作为部署容器。在本节中,您将编写一个简单的 XMLBean,然后将其部署在 Geronimo 中。
首先,需要一个 XML 模式。可以使用现有的也可以生成一个 XML 模式。几个 XML 工具,比如 XMLSpy 和 <oXygen/> XML,可以轻易完成该操作。还可以在 XMLBeans 模式生成站点(参阅本文底部 参考资料 一节中的链接)在线生成 XML 模式(参阅本文底部 参考资料 一节中的链接)。
示例 XML 文件如 清单 3 所示。(本文不提供任何示例代码。您应该采用过去使用的 XML 文件,由之生成模式,然后再生成 XMLBean。这使您在阅读本文时可以看到 XMLBeans 发挥作用。
清单 3. book 的 XML 示例
<?xml version="1.0" encoding="UTF-8"?> <bookDetail xmlns="http://beehive.apress.com/bookstore/vo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://beehive.apress.com/bookstore/vo file:/C:/ /code/chapter8/bookdetails.xsd"> <book_Id>1</book_Id> <title>Pro Apache Beehive</title> <book_type>Book</book_type> <author>Kunal Mittal, Srinivas Kanchanvally</author> <publication>Apress</publication> <publication_Date>2005-08-31</publication_Date> <catalogNo>123</catalogNo> <isbn>1590595157</isbn> <price>49.99</price> <comments>The 1st book on Apache Beehive</comments> <pages>300</pages> <available>false</available> </bookDetail> |
还可以在 XMLBeans Web 站点直接生成 XMLBeans,而不必下载或运行任何实用程序。为此,转到 XMLBeans Schema Validator 站点(参阅 参考资料 中的链接),并进入链接。图 2 展示了屏幕截图。此外,还可以下载 XMLBeans 发行版;它包含一个命令行实用程序和一个可以生成 XMLBean 的 Ant 任务。
图 2. XML 模式验证站点
如果还没有完成上述操作,则下载并安装 Apache Geronimo(参阅 参考资料 中的下载链接)。假设您已经将 Apache Geronimo 安装在 c:\java\geronimo-1.0 中,将 XMLBeans 安装在 c:\java\xmlbeans-2.1.0 中。下文将这两个目录引用为 GERONIMO_HOME 和 XMLBEANS_HOME。如果选择使用不同的目录结构,一定要相应地修改这些目录名。
虽然使用 XMLBeans 不需要应用服务器,但可以将 XMLBeans 用于部署在任何应用服务器中的 Java 2 Platform, Enterprise Edition (J2EE) 应用程序中,其中包括 Geronimo。本文解释高级概念并展示了一些演示如何操作的伪代码。但是,您应该使用实际文件来完成这些操作以获得最大收益。
设置 J2EE 应用程序
假设您要构建一个简单的应用程序,通过 Web 服务与库或 Amazon.com 交换有关书的信息。典型场景假设您要尝试消费 Amazon Web 服务。可以尝试本文提到的场景之一,或者使用按照前述步骤创建的 XMLBean。
第一步是将 XMLBEANS_HOME\lib 目录中的 .jar 文件复制到 Enterprise Archive (EAR) 中。基于您计划如何以及在哪里使用 XMLBean,可能需要将这些文件放在 APP-INF/lib 或 WEB-INF/lib 中。甚至可以将它们放在 GERONIMO_HOME\lib 目录中,使之可用于部署在本服务器实例上的任何 J2EE 应用程序。
接下来,将 J2EE 应用程序部署在 Apache Geronimo 中,如 developerWorks 文章 “Deploy J2EE applications on Apache Geronimo”(developerWorks,2006 年 1 月)所述。现在可以让 XMLBeans 的能力发挥作用了。
设置 XMLBean
将为 XMLBean 构建的 .jar 文件(使用作为 XMLBeans 发行版一部分提供的实用程序或 XMLBeans Web 站点)放在 APP-INF/lib 或 WEB-INF/lib 中。现在需要的就是针对 XMLBean 编写代码。对于本例,将编写一个简单的 JavaServer Page (JSP),其中包含使用 XMLBean 的一些 Java 代码。
编写代码以处理 XMLBean
清单 2 中的代码允许您创建新 XML 文档;它使用基本 JavaBean 类型的 getter 和 setter 来使用 XMLBean 创建 XML 文档。清单 4 包含的代码允许您将 XML 文件导入 XMLBean 中。
清单 4. 将 XML 文件读入 XMLBean 中
BookDocument book = null; try { book = BookDocument.Factory.parse(pathtobookxmlfile); } catch (XmlException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } |
在 JSP 中尝试这种类型的代码,并将 JSP 部署在 Geronimo 中以查看结果。
developerWorks 文章 “Deploy Web services in Apache Geronimo”(developerWorks,2005 年 4 月)展示了如何消费 Amazon Web 服务以及如何在 Apache Geronimo 中使用这些服务。作为练习,可以修改这种技术来使用 XMLBeans。
回页首
结束语
在这篇简短的动手文章中,学习了 XMLBeans 的基础知识以及如何使用 XMLBeans。还学习了如何在 Apache Geronimo 中使用 XMLBeans 的主要步骤。这与在 IBM? WebSphere? Application Server、Apache Tomcat、JBoss 或 BEA WebLogic 中使用 XMLBeans 没有任何不同。本文讨论的主题可以无缝地应用于这些产品。
本文还解释了在致力于 SOA 项目时,XMLBeans 可以如何为您节省时间。就特性、灵活性和性能(最重要)而言,它是最好的 Java-XML 绑定技术。