Web 服務作為異構系統互操作的標準化協議棧,已成為企業級集成的基石。本文系統闡述 J2EE 平台上 Web 服務的工作原理、核心協議交互流程、體系架構分層及關鍵組件職能,為構建基於 Java 的服務導向架構(SOA)提供理論指導。
一、J2EE Web 服務工作原理
1. 服務發布與發現模型 (JAXR)

- 提供者:通過 JAXR 發布服務至註冊中心(UDDI/EbXML)
- 消費者:通過 JAXR 查找服務,獲取 WSDL
- 調用綁定:使用 JAX-RPC 基於 WSDL 生成 Stub,調用遠程服務
2. 消息傳遞與傳輸層交互 (SOAP over HTTP)

- 客戶端構建 SOAP 請求,將操作封裝於 XML Payload
- HTTP POST 發送至服務端點
- 服務端容器接收,解析 SOAP,路由至對應 J2EE 組件 (EJB/POJO)
- 業務邏輯執行,結果封裝為 SOAP Response
- HTTP 響應返回客戶端
優勢:基於開放標準 (XML/HTTP),穿透防火牆,避免 CORBA/DCOM 專有協議鎖定。
3. 服務描述層加持 (WSDL)

- 提供者發布 WSDL,描述服務接口、數據類型、綁定協議、端點地址
- 消費者下載 WSDL,生成客戶端代碼,獲取調用技術細節
- 支持多種綁定:HTTP SOAP、SMTP SOAP 等
4. 完整棧交互流程 (UDDI + WSDL + SOAP)

- 發布:編寫 WSDL → 發布業務信息與技術規範至 UDDI
- 發現:消費者查詢 UDDI → 下載 WSDL 獲取技術規範
- 綁定調用:根據 WSDL 確定消息格式、綁定協議 (HTTP SOAP) → 生成 Stub → 調用服務
二、J2EE Web 服務體系架構

1. 業務功能層
- 暴露粗粒度業務功能,而非細粒度方法調用
- 協調多 EJB、EIS 交互,完成長時間業務流程
- 保證事務完整性、安全性、多租戶隔離
- 例:在線訂書 → 庫存檢查 → 財務扣款 → 物流通知
2. Web 服務系統 (容器角色)
- 提供運行時環境:SOAP 請求接收、反序列化、路由分發
- 將 SOAP 請求映射至 Java 組件 (EJB/POJO)
- 結果序列化為 SOAP Response,可靠返回
3. Web 服務器 (網關角色)
- HTTP 監聽 (默認 80 端口),接收 SOAP 請求
- 存儲 WSDL 文件,提供全球可訪問 URL
- 將 SOAP 請求轉發至 Web 服務系統
4. Web 服務客戶端 (消費者)
- 跨平台:Java/VB/C++ 等任意語言實現
- 流程:查 UDDI → 獲取 WSDL URL → 下載 WSDL → 生成 SOAP Stub → 嵌入調用
- 技術信息:方法簽名、參數類型、端點地址
三、關鍵技術棧總結
| 層級 | 標準/技術 | J2EE API | 角色 |
| 服務描述 | WSDL 1.1 | JAXR (註冊)、JAX-RPC (綁定) | 接口契約、數據類型、綁定、端點 |
| 消息格式 | SOAP 1.1/1.2 | SAAJ、JAX-RPC | XML 信封、編碼規則、傳輸綁定 |
| 傳輸協議 | HTTP/HTTPS、SMTP | Servlet/JSP 容器 | 可靠傳輸、防火牆穿透 |
| 註冊發現 | UDDI 2.0/3.0、ebXML | JAXR | 服務發布、查找、分類 |
| 業務實現 | EJB、POJO、JCA | EJB 容器、JCA 容器 | 事務、安全、持久化、集成 |
四、架構設計原則
- 業務導向:服務粒度對齊業務能力,而非技術組件
- 契約優先:先定 WSDL,再實現業務邏輯
- 松耦合:消費者僅依賴 WSDL 契約,不依賴實現技術
- 無狀態:服務實例無會話狀態,支持水平擴展
- 異步支持:長流程採用異步調用 (WS-Addressing/WS-ReliableMessaging)
五、總結
J2EE Web 服務架構通過標準化協議棧 (UDDI/WSDL/SOAP/HTTP)實現異構系統互操作,以業務功能為服務邊界,借助容器托管簡化分布式開發。理解其分層職能、交互流程、設計原則,是構建可演進、可治理 SOA 系統的前提。