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

使用 Apache Axis 開發 Web Service 完整指南:Stubs 方式實戰

     編輯:Java 相關知識

Axis 環境搭建

所需軟體版本

  • J2SE SDK 1.4+
  • Tomcat 5.0+
  • Eclipse 3.2+ (或其他 IDE)

安裝步驟

  1. 從 Apache Axis 官網 下載安裝包
  2. 將 Axis 核心 JAR 檔放入 WEB-INF/lib 目錄
  3. 可選依賴 (activation.jar, mail.jar, xmlsec-1.4.Beta1.jar) 同樣放入 WEB-INF/lib,客戶端生成時需要

Axis 三種開發模式對比

模式特點推薦度
Dynamic Invocation Interface (DII) 無需生成 Stub,運行時動態構建 SOAP 請求 低:效能差、除錯難
Dynamic Proxy JDK 動態代理,介面導向 中:較靈活但類型安全較弱
Stubs (靜態代理) 預生成具體 Stub 類別,強類型、效能最佳、IDE 友善 高:生產環境首選

本文採用 Stubs 方式,業界主流推薦做法。

伺服器端開發流程

1. 編寫服務實作類別

package server;

public class SayHello {
    public String getName(String name) {
        return "hello " + name;
    }
}

編譯:javac server/SayHello.java

2. 編寫 WSDD 部署描述檔

<deployment xmlns="https://xml.apache.org/axis/wsdd/" xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
  <service name="SayHello" provider="java:RPC">
    <parameter name="className" value="server.SayHello"/>
    <parameter name="allowedMethods" value="*"/>
  </service>
</deployment>

儲存為 deploy.wsdd。

3. 部署服務

建立 deploy.bat:

set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=https://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

執行後訪問 https://localhost:8080/test/services 驗證服務列表。

客戶端開發流程

1. 獲取 WSDL 並生成 Stub

瀏覽器訪問服務端點 (如 https://localhost:8080/test/services/SayHello?wsdl) 下載 WSDL,儲存為 SayHello.wsdl。

建立 WSDL2Java.bat:

set Axis_Lib=D:\workspace\test\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\workspace\test\src
set Package=server
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

生成 4 個核心檔案:

  • SayHello.java - 服務介面 (PortType)
  • SayHelloService.java - 服務工廠介面
  • SayHelloServiceLocator.java - 服務定位器實作
  • SayHelloSoapBindingStub.java - SOAP 綁定 Stub 實作

2. 編寫客戶端測試代碼

import junit.framework.TestCase;

public class TestWSClient extends TestCase {
    public void testSayHello() throws Exception {
        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello();
        String retValue = client.getName("clientName");
        System.out.println(retValue); // 輸出: hello clientName
        assertEquals("hello clientName", retValue);
    }
}

進階主題與最佳實踐

複雜資料類型處理

自訂 Java Bean 需符合 JavaBean 規範 (無參建構子、getter/setter),Axis 會自動映射為 XML Schema 複雜類型。

異常處理與 SOAP Fault

  • 服務端拋出 RemoteException 或自訂異常 (需在 WSDD 宣告)
  • 客戶端捕獲 AxisFault 或 RemoteException 解析 SOAP Fault 詳情

效能優化建議

  • 重用 ServiceLocator 和 Stub 實例 (執行緒不安全,需池化或 ThreadLocal)
  • 啟用 HTTP Keep-Alive 減少連線開銷
  • 大數據傳輸考慮 MTOM/XOP 或附件機制

安全性考量

  • WS-Security 標準 (用戶名令牌、X.509 憑證、XML 加密/簽章)
  • Axis 對應模組:WSS4J 整合
  • 傳輸層 HTTPS + 應用層 WS-Security 雙重防護

總結

Axis Stubs 方式提供了強類型、高效能、易維護的 Web Service 開發體驗。核心流程:寫服務類 → 寫 WSDD → 部署 → 下載 WSDL → 生成 Stub → 寫客戶端。掌握此流程,即可快速構建跨語言、跨平台的企業級服務整合方案。

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