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

Java 呼叫 .NET WebService (SOAP) 完整範例:Axis 客戶端實作

     編輯:Java 綜合教學

Java 呼叫 .NET WebService (SOAP) 完整範例:Axis 客戶端實作

使用 Apache Axis 1.x 呼叫 .NET (ASMX) WebService,展示關鍵設定:SOAPActionURI、QName 命名空間、參數型別對應。

完整呼叫代碼

try {
    // 1. WSDL 位址
    String url = "https://192.168.12.106/yhcapp/MesServerMng.asmx?wsdl";
    
    // 2. 建立 Axis Service 與 Call
    Service service = new Service();
    Call call = (Call) service.createCall();
    call.setTargetEndpointAddress(new java.net.URL(url));
    
    // 3. 設定操作名稱:QName(命名空間, 方法名)
    // 命名空間來自 WSDL targetNamespace
    call.setOperationName(new QName(
        "https://www.hustcad.com/InteCAPP/XMLWEBServices/",
        "Mes_ProjectInfo"
    ));
    
    // 4. 新增參數:QName(命名空間, 參數名), XMLType, 參數模式
    call.addParameter(
        new QName("https://www.hustcad.com/InteCAPP/XMLWEBServices/", "ProjectNo"),
        org.apache.axis.encoding.XMLType.XSD_STRING,
        javax.xml.rpc.ParameterMode.IN
    );
    
    // 5. 設定返回型別
    call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
    
    // 6. 【關鍵】設定 SOAPAction URI,否則 .NET 端會報錯
    call.setSOAPActionURI("https://www.hustcad.com/InteCAPP/XMLWEBServices/Mes_ProjectInfo");
    
    // 7. 呼叫並傳入參數
    String projectNo = "要傳入的資料";
    String result = (String) call.invoke(new Object[]{projectNo});
    
    System.out.println("返回結果:" + result);
    
} catch (Exception e) {
    System.out.println("呼叫失敗:" + e.getMessage());
    e.printStackTrace();
}

關鍵點解析

步驟說明
WSDL URL.NET ASMX 服務預設提供 ?wsdl 端點
QName 命名空間必須與 WSDL targetNamespace 完全一致,區分大小寫
參數型別使用 XMLType.XSD_STRING 對應 .NET string;整數用 XSD_INT,日期用 XSD_DATETIME
SOAPActionURI.NET 強制要求,格式通常為 命名空間/方法名,缺失會拋出「Server did not recognize the value of HTTP Header SOAPAction」
多參數call.addParameter() 多次呼叫,invoke(new Object[]{p1, p2, ...}) 依序傳入

常見錯誤與解決

  • ClassNotFound: org.apache.axis... → 缺少 axis.jar、axis-saaj.jar、commons-discovery.jar、jaxrpc.jar、saaj.jar、wsdl4j.jar
  • SOAPAction 錯誤 → 檢查 WSDL soap:operation soapAction 屬性,確保完全一致
  • 命名空間不匹配 → 用瀏覽器開啟 WSDL,複製 targetNamespace 值
  • 編碼問題 → 確保 Java 檔案 UTF-8,傳入中文參數無亂碼

Axis 1.x 已停止維護,新專案建議使用 JAX-WS (wsimport 生成客戶端) 或 CXF 框架,但維舊專案此範例仍具參考價值。

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