Axis 1.x 基於 JAX-RPC,限制內部設計並引發效能問題。Axis2 重寫內核,支援多種數據綁定(ADB、JiBX、JAXB)與全新的 JAX-WS 2.x 標準,實現「綁定即插即用」與「程式模型解耦」。
WSDL2Java -d jaxb ... 生成代碼,調用 JAXB 參考實現 XJC 產出數據模型類(含 @XmlType、@XmlElement 等註解)。stub.getBook(new GetBook(...)),服務端繼承 JaxbLibrarySkeleton 實現業務邏輯,均操作封裝器對象。WsImport 而非 WSDL2Java,同樣產出 JAXB 數據模型,但生成 未封裝服務介面(方法參數直接對應消息部件,無封裝器層)。@WebService、@WebMethod、@WebParam、@RequestWrapper 等註解綁定 WSDL 操作,客戶端調用如 stub.getBook(isbn) 更符合程式習慣。@WebService(endpointInterface=..., wsdlLocation=...) 並實現介面,部署為 JAR 放入 WEB-INF/servicejars(非 AAR)。((BindingProvider)stub).getRequestContext().put(ENDPOINT_ADDRESS_PROPERTY, target)。| 維度 | JAXB (WSDL2Java) | JAX-WS (WsImport) |
|---|---|---|
| 編程模型 | 封裝模式,較繁瑣 | 未封裝模式,更自然 |
| WSDL 處理 | 嵌入 Schema 易報錯 | 支援嵌入 Schema |
| 自定義綁定 | 無法傳遞 XJC 選項 | 可配合 binding 文件 |
| WS-Security | 支援(Axis2 模組) | 不支援(Axis2 限制) |
| 部署制品 | .aar | .jar (servicejars) |
結論:簡單服務、無安全需求、偏好未封裝 API 選 JAX-WS;需 WS-Security、複雜 Schema 自定義、或整合既有 Axis2 模組選 JAXB。下一期將探討 Metro 框架對雙標準的原生支援。