Apache Axis2 是開源 Web 服務引擎,支援 SOAP 與 REST 風格服務。JVM 原設計僅支援 Java,隨著 Jython、JRuby 等腳本語言移植至 JVM,開發者期望以腳本語言開發/調用 Web 服務。本文闡述如何擴展 Axis2,使其支援基於 JVM 的腳本語言(以 Jython 為例),實現「腳本即服務、腳本即客戶端」的雙向能力。
| 範式 | 核心關注 | 優勢 |
|---|---|---|
| Code-First (代碼優先) | 先寫 Java 代碼,再生成 WSDL | 簡單省時、易整合遺留系統、無需深諳 WSDL |
| Contract-First (契約優先) | 先定 WSDL,再實現契約 | 鬆耦合、互操作性強、隱藏實現細節、促進協作一致 |
Axis2 擴展需同時支援兩種範式。
開發 Axis2 客戶端 API 包裝庫,建立抽象層重新定義介面接受 Jython 腳本:

from org.wso2.wsf.jython.client import WSClient, WSFault, WSMessage
req_payload = "<webSearch><appid>ApacheRestDemo</appid><query>Sri Lanka</query></webSearch>"
LOG_FILE = "/home/heshan/.../jython_yahoo.log"
END_POINT = "https://search.yahooapis.com/WebSearchService/V1/webSearch"
try:
client = WSClient({"to": END_POINT, "http_method": "GET", "use_soap": "false"}, LOG_FILE)
req_msg = WSMessage(req_payload, {})
print "Sending OM:", req_payload
res_msg = client.request(req_msg)
print "Response:", res_msg
except WSFault as e:
e.printStackTrace()
核心流程:解析 WSDL → 產生物件模型 (XML) → 依模板 (XSLT) 解析模型 → 產生原始碼。架構簡單且易擴展。

Emitter 為語言相關的代碼生成核心,一語言一 Emitter。擴展步驟:

結合 MDP (訊息傳遞設計模式) 與 Proxy、Remote Adapter、Facade 模式,隱藏通訊協定、安全機制複雜度,遠端組件如本地般使用。支援 Web Services、REST、EJB、RMI、HTTP、SSL 等協定。

框架提供端到端訊息層安全 (非傳輸層),支援選擇性加密、任意訊息格式。核心安全組件:MessageCipher (加解密)、Component Registry (註冊查詢)、AccessManager (授權驗證)。安全機制對發送/接收方透明,以「管道」形式內建,另支援宣告式安全與自訂機制。
透過擴展 Axis2 客戶端 API、代碼生成器、部署器與訊息接收者,Jython 等 JVM 腳本語言可無縫融入 Web 服務生態:
這為多語言服務開發提供了標準化、工程化的路徑。




