xml已经成为了绝大多数项目不可或缺的部分。xml的确提供了各种益处,但是大多数使用java编程的人都清楚:在java里使用xml是件多么头疼的事。和基本的java文档对象模型(jdom)或者sax api相比,jdom api确实让情况变得简单了一点,但是要设计出另一种选择方案,使其能和xml协同工作仍是相当必要的。开发者需要一个框架,这个框架将焦点放在内容的表示而不是xml文档的结构上。
java-xml数据绑定就像是医生开出的药方。这种方法说起来大概就是将xml映射到java专用的表示上,反向亦然。xml绑定适用的应用程序是那些只关心内容而不关心如何送出这些内容的应用程序。所以如果你的应用程序并不真正地关心“用户名”是否会被转作独立的节点或者作为“用户”结点的属性,那么java-xml数据绑定能够极大地简化你的开发和维护工作。
java-xml数据绑定的优势包括:
开发者不需要java-xml api的预备知识,如dom或者sax。对于我来说,这无疑是个巨大的优势。就算是对这些api有些经验的人,要弄清楚根节点的第三个子节点的第二项属性也不是件容易的事。在管理一个项目小组的时候,让java程序员同java对象打交道要比让项目组成员使用dom或者sax检索数据要容易得多,也要保险得多。
xml数据绑定利用xml强大的中间件存储配置信息。你可以在启动时就读取这些信息并在应用程序中使用;而你所要做的只是为你的配置文件定义一个映射,再把数据加入到易于使用的java对象中。
你可以从某个xml结构中检索(反调度)数据,然后将它插回(调度)到另一个不同的xml结构中。例如,你可以从xml中检索一些值,使用基本的java程序计算它们,再把整理好了的结果送回到另一个不同的xml结构中。使用xsl转化,如果有必要的话,你就可以以html的形式表示结果。
基本概念
java-xml数据绑定涉及以下这些基本概念:
调度(marshalling)是在内存中为java对象生成xml表示的过程。这是通过提供明确的映射指令或者使用api缺省的调度规则而实现的。
反调度(unmarshalling)描述的是将xml表示转换到java对象的过程,而这个对象是你可以使用java代码进行操作的。
映射(mapping)可以生成你所需要的确切的xml结构或者java对象,尽管java-xml绑定api确实遵循了一些缺省规则,将xml表示转化到相应的java对象。
当前支持java-xml数据绑定的api有:
用于xml绑定的java构架(jaxb):这个用于xml数据绑定的框架是最近sun发布的几个新的xml api之一。这个api才刚刚起步:1.0版的jaxb的最终草案要到2002年第4季度才能定下来。
castor:这个已经使用了好几年的成熟的api似乎是当前最好的选择。castor所能实现的功能远远不止java-xml数据绑定。
quick:这是个快速、简单的绑定替换方案,它需要对原始设计者所定义的绑定计划有所了解。
zeus:当前的版本是beta 3.5,zeus绑定的实现是基于你定义的限制条件。
在以上众多选择中,jaxb可能将是你最容易向你上级推销的api,因为它来自sun。但是要记住的是,jaxb才刚刚起步,所以很容易起变化。
castor可以被列为已经被广泛使用的成熟api。而且castor同时擅长于将java映射到sql表或者ldap目录。总而言之,这个api似乎是众多选择中最好的,至少目前是如此。我将在我下一篇文章里谈到castor的java-xml数据绑定的特别之处。
闽公网安备 35060202000074号