首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

擴展 Axis2 框架支援 JVM 腳本語言:以 Jython 為例實現 Web 服務開發與調用

     編輯:Java 相關知識

Apache Axis2 是開源 Web 服務引擎,支援 SOAP 與 REST 風格服務。JVM 原設計僅支援 Java,隨著 Jython、JRuby 等腳本語言移植至 JVM,開發者期望以腳本語言開發/調用 Web 服務。本文闡述如何擴展 Axis2,使其支援基於 JVM 的腳本語言(以 Jython 為例),實現「腳本即服務、腳本即客戶端」的雙向能力。

Web 服務開發兩大範式

範式核心關注優勢
Code-First (代碼優先)先寫 Java 代碼,再生成 WSDL簡單省時、易整合遺留系統、無需深諳 WSDL
Contract-First (契約優先)先定 WSDL,再實現契約鬆耦合、互操作性強、隱藏實現細節、促進協作一致

Axis2 擴展需同時支援兩種範式。

擴展 Axis2 客戶端 API:支援腳本調用服務 (Code-First 客戶端)

架構設計

開發 Axis2 客戶端 API 包裝庫,建立抽象層重新定義介面接受 Jython 腳本:

  1. 執行 Jython 客戶端腳本 → 建立對映的 Java 服務客戶端
  2. 激活輸出管道 → 處理器鏈 → 傳輸發送者發送 SOAP 訊息
  3. 傳輸接收者接收響應 → 輸入管道 → Jython 訊息接收者消費 → 交給應用

客戶端 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()

擴展 Axis2 代碼生成器:支援契約優先開發服務

Axis2 Code Generator 架構

核心流程:解析 WSDL → 產生物件模型 (XML) → 依模板 (XSLT) 解析模型 → 產生原始碼。架構簡單且易擴展。

代碼生成器架構

擴展點:Emitter 元件

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

  1. 實現 Jython Emitter:處理 WSDL → 產生 Jython 物件模型 (XML)
  2. 編寫 XSLT 模板:定義如何從模型生成 Jython 原始碼
  3. 生成兩類關鍵代碼:
    • Skeleton(框架類):服務端點入口
    • Message Receiver(訊息接收者):消費 SOAP 訊息,調用業務邏輯

擴展代碼生成器架構

透明遠端存取機制

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

伺服器端部署:暴露 Jython 實現的 Web 服務

核心元件

  • 自訂部署器:讀取 Jython 腳本註解,完成動態型別→靜態 Java 型別映射 (資料綁定),產生 XML Schema
  • Jython 訊息接收者:輸入管道終端,遍歷 AXIOM 結構提取資訊 → 傳給 Jython 服務執行 → 將回傳物件轉為 AXIOM → 送回處理鏈

部署流程

  1. 讀取 Jython 服務註解
  2. 建立 AxisService
  3. 每方法建立 AxisOperation
  4. 增加 AxisMessage (含參數型別)
  5. 彙總至 AxisService → 產生 XML Schema → Axis2 引擎生成 WSDL

伺服器端處理流程

安全與企業級特性

框架提供端到端訊息層安全 (非傳輸層),支援選擇性加密、任意訊息格式。核心安全組件:MessageCipher (加解密)、Component Registry (註冊查詢)、AccessManager (授權驗證)。安全機制對發送/接收方透明,以「管道」形式內建,另支援宣告式安全與自訂機制。

結語

透過擴展 Axis2 客戶端 API、代碼生成器、部署器與訊息接收者,Jython 等 JVM 腳本語言可無縫融入 Web 服務生態:

  • 將腳本開發為 Web 服務 (Contract-First/Code-First)
  • 以腳本語言編寫服務客戶端
  • 享有 Axis2 完整的 SOAP/REST、安全、ESB 整合能力

這為多語言服務開發提供了標準化、工程化的路徑。

客戶端架構

代碼生成器架構

Emitter擴展架構

伺服器端流程

透明存取

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved