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 - 也可以指定一個域名:
yiibai.com
- 可以將端口號與域名一起指定爲
yiibai.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