为了演示XML-RPC,我们将创建一个使用Java处理XML-RPC消息的服务器,我们将创建一个Java客户端来调用该服务器上的过程.
<对话的Java端使用Apache XML Project的Apache XML-RPC,可从 http://xml.apache获得. org/xmlrpc/
将所有.jar文件放在适当的路径中,让我们使用JAVA创建一个客户端和一个小型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类所必需的.
函数 server.execute(...)将请求发送到服务器.在服务器上调用过程sum(17,13),就好像它是本地过程一样.过程调用的返回值始终是Object.
这里"sample"表示在服务器中定义的处理程序.
请注意,过程调用的所有参数总是在Vector中收集.
XmlRpcClient类是通过指定服务器计算机的"Web地址",然后指定/RPC2来构造.
localhost - 表示本地计算机
您可以指定IP号而不是localhost,例如194.80.215.219
您可以指定域名,例如xyz.dyndns.org
您可以将端口号与域名一起指定为xyz.dyndns.org: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>
以下是用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