- 学习 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