首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 服務跨容器部署實戰:從 Axis 到 JSR-181 統一標準

     編輯:Java 相關知識

隨著 W3C 核心規範更新與 JCP 整合,Web 服務技術日趨成熟。然而,當應用需跨多個 Web 容器(WebSphere、WebLogic、JBoss、Tomcat)部署時,缺乏統一的標準部署描述符(如 web.xml 之於 Servlet)成為主要痛點。本文詳細剖析 Java Web 服務在不同容器上的部署差異,展示各類部署描述符生成實踐,並闡述 JSR-181 如何通過註解簡化開發部署流程。

跨容器部署的核心挑戰

Web 服務提供者(伺服器端)若將實現(如 Axis)打包進 WAR,易引發類加載器衝突;最佳實踐是使用容器內建實現。但各容器部署描述符迥異:

  • J2EE 1.4 標準:需 webservices.xml、WSDL、JAX-RPC 映射文件、序列化類。
  • Axis:需 deploy.wsdd,啟動後透過 Axis AdminService 部署,或預先生成 service-config.wsdd 打包入 WAR。
  • WebLogic:早期版本專有描述符,9.x 推薦 JSR-181 註解 + jwsc Ant 任務生成標準構件。
  • WebSphere:專有工具生成標準 + 專有描述符。
  • JBoss:支援 J2EE 1.4 標準,亦支援 JSR-181 拖放部署。

構建流程與工具鏈

以開源工具集為例,目標:單一專案生成可跨容器部署的 WAR,僅修改描述符無需重編譯。

J2EE 1.4 標準構件生成

使用 JWSDP wscompile 處理服務端點介面(SEI),生成 WSDL、映射文件、存根/綁定代碼。配置文件指定服務名、命名空間、套件名、SEI 及實現類。

最終必須手工編寫 webservices.xml 綁定所有構件:

<webservices ...>
  <webservice-description>
    <webservice-description-name>StatsWS</...>
    <wsdl-file>WEB-INF/wsdl/StatsWS.wsdl</...>
    <jaxrpc-mapping-file>WEB-INF/mapping.xml</...>
    <port-component>
      <service-endpoint-interface>com.example.StatsService</...>
      <service-impl-bean><servlet-link>StatsWS</...></...>
    </port-component>
  </webservice-description>
</webservices>

web.xml 中聲明 Servlet 綁定實現類:

<servlet>
  <servlet-name>StatsWS</servlet-name>
  <servlet-class>com.example.StatsServiceImpl</servlet-class>
</servlet>

Axis 部署描述符生成

兩步驟:

  1. Java2WSDL Ant 任務從 SEI 生成 WSDL。
  2. WSDL2Java 生成部署描述符 deploy.wsdd(及伺服器端綁定代碼)。

部署時需修改 web.xml 註冊 AxisServlet 及映射,啟動容器後執行 Axis AdminClient 部署 deploy.wsdd,或預先生成 service-config.wsdd 打包入 WAR 實現自動部署。

容器具體部署步驟

容器關鍵步驟
JBoss 4.0.4編寫 webservices.xml + web.xml Servlet 綁定 → 打包 WAR 部署
WebSphere專有工具從 SEI 生成 WSDL → 生成專有部署描述符 → 打包 WAR
Tomcat + Axisweb.xml 註冊 AxisServlet → 生成 deploy.wsdd → 啟動後 AdminClient 部署或預打包 service-config.wsdd
WebLogic 9.xJSR-181 註解 SEI/實現類 → JDK 5.0 編譯 → jwsc Ant 任務生成構件 → 打包 WAR

JSR-181:以註解統一 Web 服務開發部署

JSR-181 (Web Services Metadata) 引入 JDK 5.0 註解,目標:簡化開發模型、減少構件維護、定義構建部署標準、工具可操作語法。

核心編程模型

  • 從 Java 起步(必須支援):編寫實現類 + 註解 → 註解處理器自動生成 WSDL、Schema、部署描述符。
  • 從 WSDL 起步:生成 SEI、Schema 類 → 編寫實現類補充綁定/位置資訊 → 註解實現類。
  • Java + WSDL 並行:實現類註解映射至 WSDL 契約,處理器驗證一致性。

關鍵註解速覽

註解用途位置
@WebService標記類/介面為 Web 服務,指定 name、targetNamespace、serviceName、endpointInterface類/介面
@SOAPBinding控制 SOAP 風格 (RPC/Document) 與編碼類/介面
@WebMethod自定義操作名、SOAPAction、是否暴露方法
@WebParam自定義參數名、模式 (IN/OUT/INOUT)、命名空間參數
@WebResult自定義返回值名稱方法

註解處理器實現多樣性

規範未限制處理器實現細節,僅要求產出可部署服務且 WSDL 一致。主要兩類:

  1. 運行時處理器(如 JBossWS):啟動時掃描註解直接發布服務,零描述符產出,最簡單(拖放部署)。
  2. 預處理器/Ant 任務(如 WebLogic jwsc、Apache Beehive):構建期生成容器專有描述符,允許進一步自定義。

實戰:使用 JBoss 4.0.4 測試 JSR-181

  1. 安裝 JDK 5.0+ 並設為預設編譯器。
  2. 安裝 JBoss 4.0.4 (含 EJB3/JBossWS)。
  3. 為實現類添加 @WebService、@WebMethod 等註解。
  4. 編譯打包 WAR,拖放至 deploy 目錄啟動,JBossWS 自動部署。

總結

跨容器部署 Java Web 服務歷經從手工編寫多套描述符、到 Axis 統一運行時、再到 JSR-181 註解驅動的演進。JSR-181 將架構設計意圖(介面用途)與部署綁定,讓開發者聚焦業務邏輯,由平台負責轉譯為可部署方案。雖處理器實現各異,但「一次編寫,多處部署」的願景已基本實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved