- 學習 XML-RPC
- XML-RPC - 首頁
- XML-RPC - 簡介
- XML-RPC - 資料模型
- XML-RPC - 請求
- XML-RPC - 響應
- XML-RPC - 錯誤
- XML-RPC - 示例
- XML-RPC - 總結
- XML-RPC 資源
- XML-RPC - 快速指南
- XML-RPC - 有用資源
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