Java Web 服务进阶

快速了解 Java Web Services Developer Pack

Comments

随着最近 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 服务实现的知识。

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,这是由于它们将在应用程序内部直接解析 XML,或者通过为 JAX-RPC 调用而生成的客户机存根代码间接解析 XML。

Java WSDP 中包括的注册中心浏览器可以用来定位和创建测试 UDDI 注册中心中的条目。这个注册中心浏览器使用 JAXR API 并通过使用被作为参考实现的一部分提供的 UDDI 绑定获得一个到注册中心服务器的连接。由于 UDDI 是一个基于 XML 和 SOAP 的协议,所以,在本示例中,JAXR 使用 SAAJ 进行 SOAP 消息传递,并且使用 JAXP 进行 XML 解析。另一个 JAXR 提供程序可能不是基于 SOAP 的,或者它可能有其自己的 SOAP 协议实现并因而将不使用 SAAJ。

当一个 Java 应用程序要使用一个或多个 Web 服务时,在 图 1中并非显而易见的另一类型的关系就会发生。对于每一个被使用的 Web 服务来说,开发人员通常获得所部署的、描述这个 Web 服务的 WSDL 文档。这个文档可能已经注册到了 UDDI 注册中心;若是如此,理论上开发人员将在开发环境的协助下使用 JAXR 来浏览 UDDI 注册中心并获得这个 Web 服务的 WSDL。一旦获得了 WSDL,开发工具将生成客户机存根代码,这些代码会被编译到应用程序中。正在使用这个 Web 服务的客户机应用程序可能并不知道有个过程调用正在被 JAX-RPC 接口使用 XML 和 SOAP 数据编入到远程服务器上。

同样,客户机应用程序可能需要使用 ebXML 与远程伙伴应用程序交互。要为与伙伴交互作用作准备,这个应用程序将使用 JAXR 并获取一个 ebXML 绑定以便可以浏览 ebXML 注册中心(Java WSDP 中不提供这个 ebXML 注册中心)。一旦交换了贸易和伙伴协议(在实际生活中这需要做许多工作),这个应用程序将使用 JAXM 并获取一个支持 ebXML 的 JAXM 提供程序,然后开始交换消息。

服务器端组件

大多数在客户机上使用的接口也可以用在服务器上,或者在服务器上有一个使用这些相同接口的参考实现组件。这种情况的一个示例便是 JAX-RPC Servlet。JAX-RPC 调用中的大多数代码是双向的,因此,在服务器上使用的相同代码也可在客户机上使用。来自客户机的 JAX-RPC 调用被定向到 JAX-RPC Servlet。JAX-RPC Servlet 使用 SAAJ 的参考实现来处理这个 SOAP 消息,使用 JAX-RPC 的参考实现来对来自 SOAP 主体的方法名称和参数进行数据编出。一旦这个信息被获取,特定于服务器的实现代码必须获得到被请求方法的接口,并动态地调用这个方法,然后返回结果。从这个方法返回的结果使用相同的 JAX-RPC 和 SAAJ 接口被数据编入回到客户机。这是服务器端组件使用客户机端代码所用的相同的包的一种方法。

由 Java WSDP 提供的服务器端组件通常是不针对生产环境的参考实现。(这些组件在 图 1中用青绿色表示。)好消息是,所有的 API 都使用良好建立的标准,这些标准大多基于 SOAP 协议。因此,由 Java WSDP 提供的客户机端代码可被用来在多种平台上与来自多个供应商的服务器交互。正如前面所描述的那样,这样的跨平台功能的普通示例可以是使用 Java 代码来调用基于 Microsoft .Net 的 Web 服务。

Java WSDP 中包括了另外一些不是 Java XML Pack 的一部分的服务器组件,它们是针对用 Java 平台支持 Web 服务的关键技术。Sun Microsystems 与 Apache Software Foundation 合作,生产其许多关键技术的健壮的参考实现,这是有充分理由的。在我看来,大多数 Apache 已经开发的标准参考实现是可以供生产使用的。Tomcat Servlet 容器是 Java Servlet 2.3 规范的一个经过充分测试的实现,所附带的 JSP 1.2 实现也已得到充分使用。它们都应能够在生产过程中占有一席之地。

结束语

如果您正在尝试学习如何使用 Java 平台来构建 Web 服务,那么 Java Web Services Developers Pack 便是一个优秀的、集所有功能于一身的包,它能帮助您入门。在您下载了 Java WSDP 后,请别忘了也把附带的 Java WSDP 教程下载下来。这个教程包含许多不错的信息,可以帮您开始您的 Web 服务开发工作。

一旦您理解了 Java XML API 和 Web 服务标准的本质,您便可以开始处理 Web 服务了。Web 服务的主要优点之一是您可以在所选择的平台上开发服务。如果您选择使用 Java 平台,您会发现有许多优秀的 Web 服务标准的实现可供选择。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=21628
ArticleTitle=Java Web 服务进阶
publish-date=11012002