作者:James McCarthy 翻译:Allen
有兴趣开始学习使用 Web 服务的 Java 开发人员应当查看 Java Web Services Developers Pack(WSDP)。在本文中,James McCarthy 会带您迅速浏览这个包。您将认识到这个包中的工具能为您做些什么,并且找出哪些组件仅仅用于测试而哪些组件可以原样照搬用到生产中。
随着最近 Sun Microsystems 的 Java Web Services Developers Pack(Java WSDP)版本 1.0 的发布,Java 开发人员现在可以拥有一个方便的、集所有功能于一身的下载包,用来帮助在 Java 平台上开发 Web 服务。Java WSDP 包含 Java XML Pack 中的所有用于 XML 的 Java API(Java APIs for XML(JAX)),还包含有 Apache Tomcat 服务器以及为开发与测试 Web 服务提供一个功能完备的环境所需的其他组件。Java XML Pack 中所有技术,一年前也在 Java WSDP 中公布,并且通过了 Java Community Process(JCP)的所有设计审查要求。请参阅参考资料部分,查看 Java WSDP 和其他相关技术的链接。
Java WSDP 并不是一个产品,而更倾向于是 Web 服务标准的参考实现,它是一个方便的、易于安装的包。这个包由一些可以投入生产的实现和几个应该仅仅用于测试目的的组件组成。所以,Java WSDP 不应是一个用来部署生产应用程序的环境,而更倾向于是一个用来开发和测试 Web 服务的环境;它主要用来帮助 Java 开发人员开始学习使用 Web 服务。Java WSDP 是一个优秀的用于理解、开发与测试 Web 服务的工具;并且,由于它是基于开放标准的,因此当您转到新的生产环境时并不需要重新开始。如果您认为已经为部署 Web 服务做好了准备,请跟随参考资料部分中的一些链接,学习有关一些可以投入生产的高级 Web 服务实现的知识。
与 WebSphere 一起使用 Java Web 服务
如果您想与另一个 Java Servlet 实现(如 IBM WebSphere)一起使用支持 Web 服务的 Java XML 组件,那么您可能仅仅是想单独使用 Java XML Pack。Java XML Pack 有许多与本文中所描述的组件相同的组件,但它却并未提供服务器平台。有了 Java XML Pack,确定在 WebSphere 适当的类路径中需要安装哪些包就比较容易了。想获取更多有关 WebSphere 的信息,请参阅下面的参考资料部分。
Java WSDP 中有哪些组件?
当安装 Java WSDP 分发包时,您将创建一个目录,所有组件都位于这个目录。缺省情况下,这个目录包含了一个功能完备的、可以用来开发与测试 Web 服务的服务器环境。Java XML Pack 中包含目前提供的所有用于 XML 的 Java API,并且包含了支持 Web 服务的主要组件。下面是 Java XML Pack 组件的列表以及对这些组件的功能的简要描述:
用于 XML 处理的 Java API(Java API for XML Processing(JAXP)):JAXP 是一个可插的 API,它对于 W3C 所推荐的 XML API(即 SAX、DOM 和 XSLT)的任意供应商实现都是开放的。JAXP 为获得 XML 解析器提供了标准接口;最新发布的 Java 平台(Java 2 平台,标准版 SDK v1.4(Java 2 Platform, Standard Edition SDK v1.4),请参阅参考资料以获取更多的信息)将 JAXP 作为一个标准接口包括在内。同其他 Java 接口一样,正在开发的 JAXP 参考实现已被指派给其他团体 ― 在这个例子中,是 Apache Software Foundation。Xerces 2 是 Apache 最新的 XML 解析器,它包括在 Java 2 平台,标准版 SDK v1.4 中。
用于 XML 消息传递的 Java API(Java API for XML Messaging(JAXM)):JAXM 旨在使用纯 Java API 使应用程序能够发送与接收面向文档的 XML 消息。JAXM 的目的是为更高级别的、基于标准的并且基于 SOAP 消息传递协议的消息传递协议(如 ebXML)提供一个基础。SAAJ 规范最近从 JAXM 被分离了出来,它包含一个同步的 SOAP 连接,因此 JAXM 现在主要用于异步消息。(我将在下面对 SAAJ 作更加详尽的讨论)。当以异步方式使用 JAXM 时,它使用消息传递提供程序来促进消息的路由选择。JAXM 包括一个消息传递提供程序,这个提供程序是 ebXML 传输、路由和打包(ebXML Transport, Routing, and Packaging)规范版本 1.0 的参考实现。
用于 Java 的带有附件的 SOAP API(SOAP with Attachments API for Java(SAAJ)):SAAJ 是一个包,它使开发人员能够生产并消费那些遵循 SOAP 1.1 规范的消息及其所包含的 SOAP 附件。SAAJ 原先是作为 JAXM 1.0 规范的一部分进行定义的;但随着最近 JAXM 1.1 的发布,SAAJ 已被分离出来,自成一个规范,这样其他规范就能够依靠 SAAJ 包而无需依靠 JAXM。
用于基于 XML 的 RPC 的 Java API(Java API for XML-based RPC(JAX-RPC)):JAX-RPC 是用于支持 SOAP 1.1 基于 XML 的 RPC 调用的实现包。核心 JAX-RPC 包包含一个用于调用 Web 服务的功能完备的 JAX-RPC 客户机以及 JAX-RPC 服务器的一个参考实现。除了核心包以外,Java WSDP 分发包还包含有许多命令行工具,这些命令行工具用于从 Web 服务定义语言(Web Services Definition Language(WSDL))文件构建客户机存根,也用于部署服务器组件。
用于 XML 注册的 Java API(Java API for XML Registries(JAXR)):XML 注册中心通常用来存储有关已发布的 Web 服务的信息,而 JAXR API 则提供了访问这种信息的统一的方法。现在,Web 服务最常用的 XML 注册中心是统一描述、发现和集成(Universal Description, Discovery, and Integration(UDDI))注册中心;JAXR 包含一个用于访问 UDDI 的提供程序。
除了 Java XML Pack 中的包之外,Java WSDP 还包含有一些其他组件,这些组件使其成为用于测试 Web 服务的功能完备的服务器环境。以下便是这些额外组件的清单,这些组件使得 Java WSDP 更加完善:
Tomcat(Java Servlet 和 JavaServer Page 容器):Apache Software Foundation 被委派完成为 Java Servlet 容器(包括 JSP 和 JSTL)创建与维护参考实现的任务。Apache 已经以它惯有的方式制定出了一个优秀的、能与许多商业产品相媲美的开放源代码解决方案。Java WSDP 与 Apache Tomcat 4.1.2 一起被分发,虽然后者现在只是一个测试发行版,但它是针对 Java Servlet 2.3 和 Java Server Page 1.2 的参考实现版本。在写本文的时候,来自 Apache 的最新版本是 Tomcat 4.0.4,它也是 Java Servlet 2.3 和 JSP 1.2 的参考实现。
JavaServer Page 标准标记库(JavaServer Pages Standard Tag Library(JSTL)):JSTL 是一个标记库,它包含 JavaServer Page(JSP)中常见的许多通用功能。由于 JSTL 使用的只是 JSP 1.2 规范中的功能,所以您将需要一个 JSP 1.2 容器来使用该标记库。幸运的是,上面描述的 Apache Tomcat Server 恰恰是这样一个容器,因此您将能够使用 Java WSDP 来对 JSTL 进行测试或者开发您自己的标记库。JSTL 的功能太多了,我们无法在此详细地描述,但是如果您的 JSP 需要访问数据库、操作 XML 或执行标准的格式化,那么您应当考虑使用 JSTL。
注册中心服务器:注册中心服务器与 Java WSDP 一起被分发,它是统一描述、发现和集成(UDDI)版本 2 的一个功能完备的实现,可用于测试 Web 服务的注册与发现。注册中心服务器与许多其他 WSDP 组件不同,它应只用于测试目的,并因此在包的发布说明中将它列了出来,以免被与任何其他产品一起重新分发。除了这个局限性,注册中心服务器是学习和测试 UDDI 版本 2 的优秀工具,并且是 Java WSDP 必不可少的部分。
Java WSDP 还提供了许多其他工具,这些工具在 Web 服务存根代码的构建和 Web 服务服务器端组件的部署与管理中起了帮助作用。下面提到的 Java WSDP 教程向您说明了如何使用这些其他工具。
Java WSDP 各组件间的关系
需要被问到的问题是:所有这些 Java WSDP 组件是如何相互协作以支持 Web 服务的呢?Java WSDP 是经过精心打包的,很容易就可以安装并运行(假设在 8080 端口上不冲突)。在这一部分中,我将试着解释这些组件是如何相互协作的,以让您能够明白它们之间的关系。通过仔细观察图 1,您会开始明白这些组件之间显而易见的依赖性。尽管图 1 并未显示每一个可能的关系,但它应该能使您理解这些组件是如何相互协作的。这个图使用简单的颜色编码方案来说明有关这些组件的其他信息:
紫色的组件是 Java API for XML(JAX)包的一部分,在 Java XML Pack 中也可以找到它们。大多数 JAX 包都包含可部署的参考实现。
在我看来,青绿色的组件在生产环境中是不可部署的。这些组件的大多数是在生产中将被商业或开放源代码解决方案所替代的服务器端实现。
黄色用来表示那些由 Apache Software Foundation 维护的组件。在我看来,由于它们在开放源代码社区中被广泛使用,所以您可以在生产环境中安全地部署它们。请注意,在本图中没有显示 Xerces 和 Xalan,但它们是与 Java WSDP 一起被分发的。
白色用来表示所生成的代码、由开发人员在部署过程中提供的数据或瘦客户机应用程序(例如,Web 浏览器)。
图 1. 各组件间的关系
客户机端组件
这个包的客户机端组件通常被部署到客户机应用程序中或者安装在正在作为客户机层进行交互的远程服务器上。基于服务器的客户机层通常在 JavaServer Page 中被用来与远程 Web 服务交互。图 1 中所示的 Web 浏览器客户机便说明了这样一个体系结构。在这个图中,基于 JSP 的 Web 应用程序可以使用 JAX-RPC 客户机存根来与运行在另一个平台(如 Microsoft .Net)上的远程 Web 服务会话。
从图中的说明可以清楚地看到,客户机上的大多数交互作用都将使用 SAAJ,这是由于所涉及到的协议使用了 SOAP 消息传递。此外,所有的接口都将使用 JAXP,这是由于它们将在应用程