XML-RPC实例Java

在本节中,将通过Java编程语言演示如何使用XML-RPC,首先创建一个使用java类来充当处理XML-RPC消息的服务器,然后再创建一个Java客户端来调用服务器上的过程(函数方法)。

Java端使用Apache XML Project的Apache XML-RPC,可从 http://xml.apache.org/xmlrpc/ 获得。

将所有@H_502[email protected]文件放在适当的路径(如:构建路径)中,然后使用JAVA创建一个客户端和一个小型XML-RPC服务器。

1. XML-RPC客户端

下面编写一个XML-RPC客户端来调用一个名称为:@H_502_5@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包@H_502[email protected]包含XML-RPC Java客户端和XML-RPC服务器的类,例如@H_502_5@XmlRpcclient。
  • 包类@H_502[email protected]是导入@H_502_5@Vector类所必需的。
  • 这里@H_502_5@sample表示在服务器中定义的处理程序。
  • 注意,过程调用的所有参数始终在@H_502_5@Vector中。
  • 通过指定服务器计算机的“Web地址”,然后指定/RPC2来构造@H_502_5@XmlRpcclient类。
  • 请注意,远程过程调用的结果始终是对象,所以必须将它转换为适当的类型。
  • 当出现问题(没有连接等)时,抛出异常并且必须使用@H_502_5@catch语句捕获它。

由于上述调用,客户端将以下消息发送到服务器。 请注意,这是由@H_502[email protected](...)在内部处理的,所以我们不需要做什么。

请求的内容和格式如下 -

<?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服务器的源代码。 它使用了@H_502[email protected].*中提供的内置类。

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);
      }
   }
}

看看上面的示例服务器中的实现工作 -

  • 包@H_502[email protected]包含用于XML-RPC服务实现的@H_502_5@WebServer类。
  • 远程调用方法:@H_502_5@sum是作为类中的公共方法实现的。
  • 然后,同一服务器类的实例与客户端可访问的处理程序相关联。
  • 服务器由端口号初始化(认端口号:@H_502_5@80)。
  • 出现问题时,抛出异常并且必须使用@H_502_5@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