在本节中,将通过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 - 也可以指定一个域名:
xuhuhu.com
- 可以将端口号与域名一起指定为
xuhuhu.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
上一篇:
XML-RPC总结
下一篇:
XML-RPC实例(PHP)