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。