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

Tomcat 4.0.4 上安裝測試 Apache SOAP Web Service 完整指南

     編輯:Java 相關知識

前言

Apache SOAP 是 Axis 之前的前身專案,雖然已停止維護,但在理解早期 Java Web Service 發展歷程、維護極舊系統時仍有參考價值。本文記錄在 Tomcat 4.0.4 上部署 Apache SOAP 2.3.1 並執行簡單 RPC 呼叫的完整步驟。

一、軟體下載與版本資訊

二、安裝步驟

  1. 將 Apache SOAP 安裝至 C:\soap-2_3_1。
  2. 將 Tomcat 4.0.4 安裝至 C:\Program Files\Apache Tomcat 4.0。
  3. 複製 C:\soap-2_3_1\webapps\soap.war 到 C:\Program Files\Apache Tomcat 4.0\webapps\ 目錄下。
  4. 建立測試目錄:C:\soaptest 與 C:\soaptest\classes。
  5. 修改系統環境變數 CLASSPATH,加入 C:\soaptest\classes\test.jar。
  6. 啟動 Tomcat 4.0.4(執行 startup.bat 或透過服務管理工具啟動)。

三、撰寫測試用 Java 類別

1. 服務端:SimpleMath.java

package test;

public class SimpleMath {
    public double getSinValue(double input) {
        double ret = Math.sin(input);
        return ret;
    }
}

2. 客戶端:SimpleMathClient.java

package test;

import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;

public class SimpleMathClient {
    public static void main(String[] args) throws Exception {
        System.err.println("SOAP call testing");
        double value = Math.random();
        SimpleMathClient smc = new SimpleMathClient();
        double returnValue = smc.doRequest(value);
        System.err.println("the sin value of " + value + " is: " + returnValue);
    }

    public double doRequest(double value) throws Exception {
        Call call = new Call();
        call.setTargetObjectURI("urn:test.math.sin");
        call.setMethodName("getSinValue");
        call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

        Vector params = new Vector();
        params.addElement(new Parameter("input", double.class, new Double(value), null));
        call.setParams(params);

        Response resp = call.invoke(new URL("https://127.0.0.1:8080/soap/servlet/rpcrouter"), "");

        if (resp.generatedFault()) {
            Fault fault = resp.getFault();
            System.out.println("the call failed: ");
            System.out.println(" Fault Code = " + fault.getFaultCode());
            System.out.println(" Fault String = " + fault.getFaultString());
            return 0.0d;
        } else {
            Parameter result = resp.getReturnValue();
            return ((Double) result.getValue()).doubleValue();
        }
    }
}

四、編譯與打包

cd c:\soaptest
javac -d classes *.java
cd classes
jar -cvf test.jar test

五、透過管理介面發布服務

  1. 瀏覽器開啟 https://localhost:8080/soap/admin/index.html。
  2. 點選 Deploy,填寫以下資訊:
    • ID:urn:test.math.sin
    • Scope:Request
    • Methods:getSinValue
    • Provider Type:Java
    • Provider Class:test.SimpleMath
    • Static:NO
  3. 送出部署,可點選 List 查看已發布服務清單。

六、執行測試驗證

cd c:\soaptest
java test.SimpleMathClient

若主控台輸出類似 the sin value of 0.123456 is: 0.123123 的數值,代表配置與測試成功。此後即可依此模式發布自訂 SOAP 服務。

七、關鍵技術點補充

  • RPC Router:/soap/servlet/rpcrouter 是 SOAP 處理所有 RPC 請求的端點。
  • TargetObjectURI:服務的邏輯名稱,客戶端與伺服端必須一致。
  • Encoding Style:使用 Constants.NS_URI_SOAP_ENC 表示 SOAP Section 5 編碼規則。
  • Parameter 物件:封裝參數名稱、型別、值與模式(IN/OUT/INOUT)。
  • Fault 處理:透過 resp.generatedFault() 判斷遠端呼叫是否拋出錯誤。

結語

Apache SOAP 雖已成為歷史,但其「部署描述檔 + 管理介面 + RPC Call 物件」的設計雛形,直接影響了後來 Axis 甚至 JAX-WS 的架構風格。理解這套流程有助於掌握 Java Web Service 技術演進的脈絡。

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