XML-RPC範例(Java)


在本節中,將通過Java程式設計語言演示如何使用XML-RPC,首先建立一個使用Java類來充當處理XML-RPC訊息的伺服器,然後再建立一個Java用戶端來呼叫伺服器上的過程(函式或方法)。

Java端使用Apache XML Project的Apache XML-RPC,可從 http://xml.apache.org/xmlrpc/ 獲得。

將所有.jar檔案放在適當的路徑(如:構建路徑)中,然後使用JAVA建立一個用戶端和一個小型XML-RPC伺服器。

1. 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("http://localhost/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類所必需的。
  • 這裡sample表示在伺服器中定義的處理程式。
  • 注意,過程呼叫的所有引數始終在Vector中。
  • 通過指定伺服器計算機的「Web地址」,然後指定/RPC2來構造XmlRpcClient類。
    • localhost - 是指在本地機器
    • 可以指定IP號而不是localhost,例如:194.80.215.219
    • 也可以指定一個域名:tw511.com
    • 可以將埠號與域名一起指定為tw511.com:8080,預設埠為:80
  • 請注意,遠端過程呼叫的結果始終是物件,所以必須將它轉換為適當的型別。
  • 當出現問題(沒有連線等)時,丟擲異常並且必須使用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>

2. 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:\worksp\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)

接下來測試用戶端的呼叫結果,請按如下方式呼叫此伺服器:

C:\worksp\xmlrpc\java>java JavaClient
30