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

Apache Axis 1.x 快速入門:Java Web Service 開發與部署全流程

     編輯:Java 相關知識

Axis 簡介

Apache Axis 是基於 Java 的 SOAP 引擎,實現了 JAX-RPC 規範,支持將 Java 類快速暴露為 Web Service。雖已進入維護模式 (Axis 2.x 為主流),但大量存量系統仍在運行,理解其部署模型對維護遷移仍有價值。

環境搭建 (Tomcat 4.x/5.x 為例)

  1. JDK 1.3+、Tomcat 4.1+ 安裝配置 CATALINA_HOME。
  2. 下載 Axis 1.1/1.4 發布包,解壓後將 webapps/axis 整個目錄複製到 $CATALINA_HOME/webapps/。
  3. 類路徑配置:將 axis/WEB-INF/lib/*.jar 加入系統 CLASSPATH,或依賴 Web 容器類加載機制 (推薦)。關鍵 Jar:axis.jar, commons-discovery.jar, commons-logging.jar, jaxrpc.jar, saaj.jar, log4j.jar, xercesImpl.jar, xml-apis.jar。

驗證安裝

啟動 Tomcat,訪問 https://localhost:8080/axis/happyaxis.jsp。頁面顯示綠色「All required libraries are present」及組件版本信息即成功。

兩種服務部署方式

方式一:即時部署 (JWS) —— 極速原型

  1. 編寫普通 Java 類,方法即為服務操作。
  2. 文件重命名為 .jws (如 Distance.jws) 放入 webapps/axis/。
  3. 訪問 https://localhost:8080/axis/Distance.jws?wsdl 即可獲取 WSDL。
// Distance.jws
public class Distance {
    public double convertMile2Kilometre(double mile) {
        return mile * 1.609;
    }
}

特點:無需編譯、無需描述文件、熱部署、適合測試/演示;缺點:需源碼、無法配置事務/安全/處理器鏈、生產環境不推薦。

方式二:定制部署 (WSDD) —— 生產標準

  1. 編寫 Java 類,編譯為 .class,放入 webapps/axis/包名/ (如 samples/capacity/Capacity.class)。
  2. 編寫部署描述符 deploy.wsdd:
<deployment xmlns="https://xml.apache.org/axis/wsdd/"
            xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
  <service name="Capacity" provider="java:RPC">
    <parameter name="className" value="samples.capacity.Capacity"/>
    <parameter name="allowedMethods" value="*"/> <!-- 暴露所有公共方法 -->
    <!-- 可配置 handler、faultFlow、security 等 -->
  </service>
</deployment>
  1. 運行 Axis 管理客戶端部署:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

輸出 <Admin>Done processing</Admin> 即成功。訪問 https://localhost:8080/axis/services/Capacity?wsdl 驗證。

客戶端調用開發

Axis 提供動態調用 API (Service/Call) 無需生成 Stub:

Service service = new Service();
Call call = (Call) service.createCall();

// 調用 JWS 服務
call.setTargetEndpointAddress("https://localhost:8080/axis/Distance.jws");
call.setOperationName("convertMile2Kilometre");
call.addParameter("op1", XMLType.XSD_DOUBLE, ParameterMode.IN);
call.setReturnType(XMLType.XSD_DOUBLE);
Double result = (Double) call.invoke(new Object[]{ 190.0 });
System.out.println("190 英里 = " + result + " 公里");

// 調用 WSDD 服務 (端點不同)
call = (Call) service.createCall();
call.setTargetEndpointAddress("https://localhost:8080/axis/services/Capacity");
call.setOperationName("convertGallon2Litre");
call.addParameter("op1", XMLType.XSD_DOUBLE, ParameterMode.IN);
call.setReturnType(XMLType.XSD_DOUBLE);
result = (Double) call.invoke(new Object[]{ 10.0 });
System.out.println("10 加侖 = " + result + " 升");

進階配置與最佳實踐

場景配置要點
複雜類型傳遞WSDD 中添加 <typeMapping> 映射 Java Bean 到 XML Schema;或使用 BeanSerializerFactory。
處理器鏈在 server-config.wsdd 定義 <handler> 和 <requestFlow>/<responseFlow> 實現日誌、驗證、加密等橫切關注點。
會話管理服務端 MessageContext.getSession() 獲取 HTTP Session;客戶端 call.setMaintainSession(true) 保持 Cookie。
異常處理拋出 java.rmi.RemoteException 或自定義異常 (需在 WSDD faultFlow 映射)。
性能調優啟用 HTTP Keep-Alive、調整線程池、使用 AxisEngine 直接調用繞過 Servlet 層 (嵌入式場景)。

遷移建議:Axis 1.x → Axis 2 / CXF / Spring Boot

  • Axis 1.x 基於 JAX-RPC (已過時),Axis 2 基於 JAX-WS/JAXB,架構重寫 (AXIOM 模型)、支持 REST、非阻塞 IO。
  • 遷移策略:WSDL 為契約,使用 wsimport (JAX-WS) 或 wsdl2java (CXF) 重新生成客戶端/服務端代碼,業務邏輯盡量復用。
  • Spring Boot 整合 CXF/JAX-WS 只需少量配置,獲得自動裝配、健康檢查、指標監控等現代化能力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved