Web 服務交換 XML 訊息,但應用層面向業務對象。數據綁定框架負責 XML ↔ Java 對象雙向轉換。Apache Axis2 設計之初即支援多種綁定:ADB(Axis 專用)、XMLBeans(全模式支援)、JiBX(現有類優先)。本文通過同一「圖書館服務」範例對比三者用法、優缺點與避坑指南。
核心工具 org.apache.axis2.wsdl.WSDL2Java 從 WSDL 生成客戶端 Stub 與服務端 Skeleton。關鍵參數:
-d adb|xmlbeans|jibx|none:選擇綁定(默認 adb)。-uw:解包 wrapped doc/lit 風格,簡化介面(ADB、JiBX 支援)。-ss -sd:生成服務端代碼與部署描述符。-Ebindingfile:JiBX 需預先提供綁定定義文件。操作:getBook(isbn)、getTypes()、addBook(type, isbn, authors[], title)、getBooksByType(type)。WSDL 採用 document/literal wrapped 風格(見原文清單 4)。
GetBook, GetBookResponse 等),可用 -u 拆分為獨立文件。-uw):直接映射參數/返回值,代碼極簡(清單 6)。但 Axis 1.2 仍有穩定性問題(異步調用拋 ClassCastException),需等待後續版本修復。maxOccurs="unbounded" 選擇器、attributeFormDefault 等)。Document 類(GetBookDocument),調用鏈更長(清單 7)。xsi:nil="true" 違反 schema)。需顯式調用 validate(),但效能極差。binding.xml) → 編譯時增強字節碼 → 運行時轉換。Book, Type),構造函數友好(清單 9)。getTypes() 直接返回陣列(清單 10)。自 Axis 1.1.1 起穩定可用。| 場景 | 推薦 | 理由 |
|---|---|---|
| 從現有 WSDL 起步、追求零依賴、需附件處理 | ADB | Axis 原生、生成完整、1.3 版模式支援大幅改善 |
| 極複雜 Schema、需全模式保真、可接受複雜 API | XMLBeans | 模式覆蓋最全,但需自行驗證、效能較差 |
| 已有領域模型類、想暴露為服務、重視代碼整潔 | JiBX | 綁定分離、解包穩定、配合 Jibx2Wsdl 部署極便利 |
Axis 1.2 開始實驗支援 JAXB 2.0 + JAX-WS 註解,後續版本將完善。Jibx2Wsdl 也可能整合 JAXB 註解作為自定義入口。下一部分將對比三大綁定的**效能基準**。