📅  最后修改于: 2020-11-09 05:34:40             🧑  作者: Mango
为了演示XML-RPC,我们将创建一个使用Java处理XML-RPC消息的服务器,并且将创建一个Java客户端来调用该服务器上的过程。
对话的Java端使用Apache XML Project的Apache XML-RPC,可从http://xml.apache.org/xmlrpc/获得。
将所有.jar文件放在适当的路径中,让我们使用JAVA创建一个客户端和一个小型XML-RPC服务器。
让我们写一个XML-RPC客户端呼叫被叫求和函数函数。此函数接受两个参数并返回它们的总和。
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。
Vector类必须使用包java.util。
函数server.execute(…)将请求发送到服务器。过程sum(17,13)在服务器上被调用,就好像它是本地过程一样。过程调用的返回值始终是一个对象。
在此,“样本”表示在服务器中定义的处理程序。
请注意,过程调用的所有参数始终收集在Vector中。
通过指定服务器计算机的“ Web地址”后跟/ RPC2来构造XmlRpcClient类。
本地主机-表示本地计算机
您可以指定IP地址而不是localhost,例如194.80.215.219
您可以指定一个域名,例如xyz.dyndns.org
您可以将端口号和域名一起指定为xyz.dyndns.org:8080。默认端口为80
注意,远程过程调用的结果始终是一个对象,必须将其强制转换为适当的类型。
当出现问题(无连接等)时,将引发异常,并且必须使用catch语句捕获该异常。
由于上述调用,客户端将以下消息发送到服务器。请注意,这是由server.execute(…)在内部处理的,与它无关。
sample.sum
17
13
以下是用Java编写的XML-RPC Server的源代码。它利用了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 Server实现的WebServer类。
远程调用的过程总和在类中作为公共方法实现。
然后,将同一服务器类的实例与客户端可访问的处理程序相关联。
服务器通过端口号(此处为80)初始化。
发生问题时,将引发Exception,并且必须使用catch语句来捕获。
对于给定示例客户端中提到的呼叫,服务器将以下响应发送回客户端:
30
现在您的服务器已准备就绪,因此请按照以下提示编译并运行它:
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