Web 服务的力量在于互操作性。由于业界在 Web 服务技术方面(SOAP、WSDL、UDDI)的协作,更具体地说,是由于 Web 服务互操作性组织(Web Services Interoperability organization,WS-I.org)的工作,Web 服务才可以与其他的 Web 服务进行交互,而不管 Web 服务开发和运行在哪一个平台上(比如是 Microsoft .NET 还是 IBM WebSphere)。Web 服务客户机分为多种类型,比如另一个 Web 服务、用脚本语言编写的客户机、C# 客户机、Java 客户机等等。本文重点讲解 Java 客户机,它可以用于访问任何遵循 Web 服务规范的 Web 服务(不仅仅是 Java Web 服务)。通过阅读本文,您将了解到需要用来通过不同的查找和访问方法调用相同的 Web 服务的 Web 服务客户机代码。本文所用的示例是“Hello” Web 服务,它提供了“getGreeting”操作。这种操作接受一个字符串参数(例如Jane),然后返回一句问候语“Hello Jane!”。
Web 服务角色
这一部分将描述调用 Web 服务的过程。Web 服务提供者用 Web 服务描述语言(Web Services Description Language,WSDL)文档来描述 Web 服务。Web 服务一般发布到统一描述、发现和集成(Universal Description, Discovery and Integration,UDDI)注册中心。Web 服务请求者在 UDDI 注册中心查找 Web 服务,绑定到 Web 服务,然后调用它。Web 服务角色显示在 图1中。本文将重点讲解从服务请求者到服务提供者的水平箭头(绑定)。本文将把请求者称为 客户机,它也可以称为 消费者。
用于
Java 技术标准的开发随着 Java 规范提案(Java Specification Request,JSR)提交给Java Community Process(JCP)而出现。两个 JSR 涵盖了 Java Web 服务体系结构:
JSR 101: 用于基于 XML 的 RPC 的 Java API(Java API for XML based RPC,JAX-RPC)
JSR 109: 实现企业 Web 服务(Implementing Enterprise Web services)
两个规范提供了厂商的实现的一致性和互操作性需求。
JAX-RPC —— Java 到 XML 和 XML 到 Java 映射 API
JAX-RPC 为基于 XML 的远程过程调用(Remote Procedure Call,RPC)和 Java 应用程序编程接口(Java Application Programming Interface,API):
WSDL 到 Java 和 Java 到 WSDL 映射:例如,将 WSDL 端口类型映射到 Java 服务端点接口(Java Service Endpoint Interface,SEI)。
XML 数据类型到 Java 数据类型和 Java 数据类型到 XML 数据类型映射,包括简单类型、复杂类型和数组。
除了 XML 映射之外,JAX-RPC 还定义了服务器端编程模型和 API,我将在后面的部分中更详细地介绍它。AX-RPC 1.1 根据 Web 服务互操作性组织(Web Services Interoperability organization,WS-I)基本概要版本 1.0(Basic Profile version 1.0)添加了互操作性需求。
JSR 109 —— J2EE 环境的 API
JSR 109 指定了 Java 2 Enterprise Edition(J2EE)环境的 Web 服务编程模型和体系结构。JSR 109 构建在 SOAP 1.1 和 WSDL 1.1 的基础上,它涵盖了 J2EE 环境中 JAX-RPC 的使用( 图 2)。它还定义了 J2EE 应用程序服务器中的部署模型。JSR 109 的客户端编程模型(我将在下面的几个部分中介绍)符合 JAX-RPC。