XML-RPC - 示例



為了演示 XML-RPC,我們將建立一個使用 Java 處理 XML-RPC 訊息的伺服器,並建立一個 Java 客戶端來呼叫該伺服器上的過程。

對話的 Java 端使用 Apache XML 專案的 Apache XML-RPC,可在 http://xml.apache.org/xmlrpc/ 獲取。

將所有 .jar 檔案放在適當的路徑中,讓我們使用 JAVA 建立一個客戶端和一個小型 XML-RPC 伺服器。

XML-RPC 客戶端

讓我們編寫一個 XML-RPC 客戶端來呼叫名為 sum 函式的函式。此函式接受兩個引數並返回它們的和。

import java.util.*;
import org.apache.xmlrpc.*;

public class JavaClient {
   public static void main (String [] args) {
   
      try {
         XmlRpcClient client = new XmlRpcClient("https:///RPC2"); 
         Vector params = new Vector();
         
         params.addElement(new Integer(17));
         params.addElement(new Integer(13));

         Object result = server.execute("sample.sum", params);

         int sum = ((Integer) result).intValue();
         System.out.println("The sum is: "+ sum);

      } catch (Exception exception) {
         System.err.println("JavaClient: " + exception);
      }
   }
}

讓我們看看上面示例客戶端中發生了什麼。

  • Java 包 org.apache.xmlrpc 包含用於 XML-RPC Java 客戶端和 XML-RPC 伺服器的類,例如 XmlRpcClient。

  • java.util 包對於 Vector 類是必需的。

  • 函式 server.execute(...) 將請求傳送到伺服器。過程 sum(17,13) 在伺服器上被呼叫,就像它是本地過程一樣。過程呼叫的返回值始終為 Object。

  • 這裡“sample”表示在伺服器中定義的處理程式。

  • 請注意,過程呼叫的所有引數始終都收集在 Vector 中。

  • XmlRpcClient 類是透過指定伺服器機器的“網路地址”,後跟 /RPC2 來構造的。

    • localhost - 表示本地機器

    • 您可以指定 IP 地址而不是 localhost,例如 194.80.215.219

    • 您可以指定域名,例如 xyz.dyndns.org

    • 您可以指定域名和埠號,例如 xyz.dyndns.org:8080。預設埠為 80

  • 請注意,遠端過程呼叫的結果始終為 Object,並且必須將其強制轉換為適當的型別。

  • 當出現問題(無連線等)時,會丟擲異常,並且必須使用 catch 語句捕獲它。

由於上述呼叫,客戶端會向伺服器傳送以下訊息。請注意,這是由 server.execute(...) 在內部處理的,您無需處理它。

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
   <methodName>sample.sum</methodName>
   <params>
      <param>
         <value><int>17</int></value>
      </param>
		 
      <param>
         <value><int>13</int></value>
      </param>
   </params>
</methodCall>

XML-RPC 伺服器

以下是用 Java 編寫的 XML-RPC 伺服器的原始碼。它利用了 org.apache.xmlrpc.* 中可用的內建類。

import org.apache.xmlrpc.*;

public class JavaServer { 

   public Integer sum(int x, int y){
      return new Integer(x+y);
   }

   public static void main (String [] args){
   
      try {

         System.out.println("Attempting to start XML-RPC Server...");
         
         WebServer server = new WebServer(80);
         server.addHandler("sample", new JavaServer());
         server.start();
         
         System.out.println("Started successfully.");
         System.out.println("Accepting requests. (Halt program to stop.)");
         
      } catch (Exception exception){
         System.err.println("JavaServer: " + exception);
      }
   }
}

讓我們看看我們在上面示例伺服器中做了什麼。

  • org.apache.xmlrpc 包含用於 XML-RPC 伺服器實現的 WebServer 類。

  • 遠端呼叫的過程 sum 在類的公共方法中實現。

  • 然後將同一個伺服器類的例項與客戶端可訪問的處理程式關聯。

  • 伺服器由埠號(此處為:80)初始化。

  • 當出現問題時,會丟擲異常,並且必須使用 catch 語句捕獲它。

對於給定示例客戶端中提到的呼叫,伺服器會將以下響應傳送回客戶端

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
   <params>
      <param>
         <value><int>30</int></value>
      </param>
   </params>
</methodResponse>

現在您的伺服器已準備就緒,因此請在您的提示符下編譯並執行它,如下所示

C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)

現在要測試功能,請按如下方式呼叫此伺服器

C:\ora\xmlrpc\java>java JavaClient
30
廣告

© . All rights reserved.