引言
在過去數年裡,隨著全球資訊網聯盟(World Wide Web Consortium,W3C)更新了核心規範,並引入了彌補 Web服務最初缺陷的新規範,Web服務發生了大量的變化。W3C 的Web Services Activity 小組所維護的規範以獨立於供應商的方式將 Web服務作為一組 XML 規範進行處理。
同時,Java™ Community Process (JCP) 也在維護自己的規範集,以將 W3C 的建議合并到 Java 語言中。Java APIs for XML(JAX-RPC、JAXB、JAXP、JAXR 和 SAAJ)是一組使用 Java 語言實現 Web服務規範的介面。
W3C 所維護的當前 Web服務規範和 JCP 維護的Java Web服務 API 處理“網路上”的Web服務,以確保平台獨立性和語言獨立性。遵循 XML 規範或使用 Java API 的開發人員將確保應用程式能夠通過任何通訊協定在任何平台上與採用任何語言編寫的Web服務進行通訊。Web服務可擴充任何應用程式的存取範圍,是經過驗證的對目前基於 Web 的應用程式有價值的整合技術。
但當基於 Web 的應用程式需要跨多個 Web應用程式容器(如 IBM® WebSphere® Application Server、BEA WebLogic 和 Tomcat 等,這裡僅指出三個)部署時,跨網路相容性不夠。對於 Java Web服務,沒有跨多個 Web應用程式容器實現的標準部署的“web.xml”可用。
如果您希望應用程式支援多個 Web應用程式容器提供的Web服務實現,則 Java Web服務應用程式的部署可能會成為一項挑戰。可以在 Web應用程式中使用單個 Web服務實現,如來自 Apache Web服務項目的Axis。對於 Web服務客戶機,這個策略通常能跨多個 Web 容器工作,因為客戶機代碼並不依賴於任何 Web服務部署描述符。對於 Web服務提供者(伺服器),如果將 Web服務實現嵌入 Web應用程式存檔(Web Application Archive,war)檔案中,可能會導致意外載入器衝突,因此使用供應商的Web服務實現是最理想的部署選擇。
本文剩下的部分將討論 Java Web服務的部署問題,向您展示各種部署描述符實現,並討論 Java 社區如何開始處理這個問題。
開發跨多個容器部署的單個 Web服務
對於 Web應用程式部署,我們希望進行開放性的選擇。如果您的客戶在 WebSphere 或 WebLogic 等商業 J2EE 實現進行了投資,他們將希望利用其投資的平台。另一方面,如果您的客戶希望降低初期投入成本,則可能希望採用 JBoss 或 Apache Tomcat 等開放原始碼解決方案。在這兩種情況下,如果您希望儘可能提高開發工作的可重用性,則可能無法依賴於可用的供應商特定 IDE。使用 J2EE應用程式供應商提供的IDE 進行開發工作可能會限制處理 Java Web服務時的靈活性,隱藏部署 Web服務的很多細節。
本文中的樣本使用開放原始碼社區提供的免費標準的開發工具集來為每個目標 Web應用程式容器構建 Web服務部署描述符。所有這些工具均在開發人員中得到了廣泛應用,且支援各種開放標準技術。
我們的目標是,獲得能夠產生可使用 Axis 跨目標 Web應用程式容器(WebSphere、WebLogic、JBoss 和 Tomcat)部署的Web服務的單個項目。相應的war 檔案應該能夠在只需很少修改而絕對不需要重新編譯原始碼的情況下部署到我們的目標 Web應用程式容器上。
本文並不打算作為有關 Web服務或 Web服務部署的教程,而旨在說明Java Web服務的一個問題,並闡述將來可以如何處理這個問題。如果您僅使用一個 Web應用程式容器,而沒有打算更改 Web應用程式容器,則可以跳過有關 Web Services Metadata (JSR-181) 的部分(此 JSR 可能會影響您將來的開發工作)。