歷史脈絡:Sun 主導的標準化之路
JAX-RPC 1.0(首代標準)
- 針對 rpc/encoded SOAP 樣式設計,映射 Java RMI 接口風格。
- 雖規範要求同時支持
doc/literal,但缺乏 Schema 綁定細節,導致 doc/lit 成為「二等公民」。
- 廣泛實現:Apache Axis 1.x(最流行)、Sun JAX-RPC RI。
JAX-RPC 2.0 → JAX-WS 2.0(改名重塑)
- 目標:支持 Java 5 新特性(Annotation、Generics)、異步調用、非 HTTP 傳輸、基於 JAXB 2.0 的完整 Schema 綁定。
- 為體現改動幅度,更名為 JAX-WS 2.0(Java API for XML Web Services)。
- 大量使用 Annotation(
@WebService, @WebMethod 等),簡化配置,但要求 Java 5+ 運行時。
- 缺點:缺乏基於部署描述符的後備配置機制,靈活性受限。
JAX-WS 2.0 與 JAXB 2.0 進入 JRE
Java 6 起將 JAX-WS/JAXB 作為核心庫內置(rt.jar),開發者無需額外打包,但也帶來版本鎖定風險(類似早期 JAXP 痛點)。
Apache 陣營:Axis → Axis2 的架構重寫
Axis 1.x 的局限
- 綁定 JAX-RPC 1.0 模型,擴展性差,難以支持新興 WS-* 標準(WS-Security, WS-ReliableMessaging 等)。
- doc/literal 支持薄弱,數據綁定僅內置簡單實現。
Axis2 核心創新
| 特性 | 說明 |
| AXIOM 對象模型 | 基於 StAX 的延遲構建 XML 模型,按需解析,性能大幅提升,內存佔用降低。 |
| 可插拔數據綁定 | 支持 AXIOM 原生、ADB(Axis Data Binding)、XMLBeans、JiBX、JAXB 2.0 等多種綁定,開發者自由選擇。 |
| 模塊化架構 | 核心僅負責 SOAP 處理,WS-* 功能以「模塊」形式插入(如 Rampart 做 Security,Sandesha 做 RM)。 |
| 不強綁定 JAX-WS | Axis2 核心獨立於 JAX-WS,可作為 JAX-WS 實現的底層引擎(如 Apache CXF、Metro 可選用 Axis2 內核)。 |
Axis2 生態:WS-* 模塊矩陣
- 核心內置:WS-Addressing、WS-Security (Rampart/WSS4J)
- Sandesha:WS-ReliableMessaging
- WSS4J:WS-Trust、WS-SecureConversation
- Kandula:WS-AtomicTransaction、WS-Coordination
Sun/GlassFish 陣營:Metro (JAX-WS RI + WSIT)
Sun 與 Microsoft 互操作承諾下,開源實現 WCF 棧對應技術(WS-Trust, WS-SecureConversation 等),歸屬 GlassFish/Metro 項目。Metro = JAX-WS RI + JAXB RI + WSIT (Web Services Interoperability Technologies)。
關鍵對比總結
| 維度 | Axis 1.x | Axis2 | JAX-WS 2.0 (Metro/CXF) |
| 規範基線 | JAX-RPC 1.0 | 無強綁定(可作為 JAX-WS 引擎) | JAX-WS 2.0 標準 |
| 數據綁定 | 內置簡單綁定 | 可插拔(ADB, XMLBeans, JiBX, JAXB...) | 強制 JAXB 2.0 |
| 擴展機制 | Handler 鏈 | 模塊 | Handler 鏈 + SPI |
| Annotation 支持 | 無 | 部分(通過包裝層) | 核心特性 |
| REST 支持 | 無 | 有限 | JAX-WS 2.0 提供基礎 REST |
| 成熟度/文檔 | 極高(歷史包袱) | 高(生產就緒) | 高(標準參考實現) |
選型建議
- 標準優先:新項目首選 JAX-WS 2.0 實現(Metro、CXF),代碼可移植,符合 Java EE 規範。
- 極致性能/靈活綁定:直接使用 Axis2 核心 + ADB/JiBX,繞過 JAX-WS 層,適合高吞吐、特殊 Schema 需求場景。
- 遺留維護:Axis 1.x 僅限存量系統維護,禁止新項目引入。
- 微服務/REST:考慮 JAX-RS (Jersey/RESTEasy) 或 Spring WebFlux,而非 SOAP 棧。
- 上一篇文章: Dom4j 核心用法深度解析:接口體系、遍歷三式、XPath、輸出格式化與中文編碼
- 下一篇文章: CXF Client 併發場景下線程安全問題根因分析與 ThreadLocal 解決方案
Copyright ©
程式碼之家 All Rights Reserved