繁体中文
设为首页
加入收藏
当前位置:JSP技术首页 >> 资料/其它 >> XML-RPC 之 Apache XML-RPC 实例

XML-RPC 之 Apache XML-RPC 实例

2005-03-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:作者:王恩建来源:http://www.sentom.netXML-RPC 是工作在 Internet 上的远程过程调用协议。通俗点讲,就是使用 HTTP 协议交互,交互的载体是 XML 文件。XML-RPC 具体的规范说 明请参考这里。 图片来自XML-RPC官...
关键字:RPC XML 实例 Apache

作者:王恩建来源:http://www.sentom.netXML-RPC 是工作在 Internet 上的远程过程调用协议。通俗点讲,就是使用 HTTP 协议交互,交互的载体是 XML 文件。XML-RPC 具体的规范说 明请参考这里。

图片来自XML-RPC官方网站

XML-RPC 规范定义了六种数据类型,下表是这六种数据类型与 Java 的数据类型对应表。

XML-RPCJavaintbooleanjava.lang.Stringdoublejava.util.Datejava.util.Hashtablejava.util.Vectorbyte[ ]

XML-RPC 规范的各种平台都有具体实现,XML-RPC 规范的 Java 实现都有好几种,这里我们选择了 Apache XML-RPC。

XML-RPC 服务端实现先定义一个简单业务对象 MyHandler,远程客户端将调用该对象的方法,具体代码如下:

package net.sentom.XMLrpc;public class MyHandler {public String sayHello(String str){return "Hello," + str;}}

然后定义一个 Servlet 名叫 MyXMLRpcServer,远程客户端通过 HTTP-POST 访问该 Servlet。

package net.sentom.XMLrpc;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.XMLrpc.XMLRpcServer;public class MyXMLRpcServer extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {XMLRpcServer XMLrpc = new XMLRpcServer();XMLrpc.addHandler("myHandler", new MyHandler());byte[] result = XMLrpc.execute(request.getInputStream());response.setContentType("text/XML");response.setContentLength(result.length);OutputStream out = response.getOutputStream();out.write(result);out.flush();}}

需要特别说明是:

XMLrpc.addHandler("myHandler", new MyHandler());

为了便于理解,这里可以看成普通的:

MyHandler myHandler = new MyHandler();

最后在web.XML文件中加入以下几行:

MyXMLRpcServer net.sentom.XMLrpc.MyXMLRpcServer MyXMLRpcServer /MyXMLRpcServer

XML-RPC 客户端实现客户端相对简单一些,先来一个 Java 客户端实现 MyXMLRpcClient:

package net.sentom.XMLrpc;import java.io.IOException;import java.net.MalformedURLException;import java.util.Vector;import org.apache.XMLrpc.XMLRpcClient;import org.apache.XMLrpc.XMLRpcException;public class MyXMLRpcClient {public static void main(String[] args) {try {XMLRpcClient XMLrpc = new XMLRpcClient("http://localhost:8080/XMLRPC/MyXMLRpcServer");Vector params = new Vector();params.addElement("Tom");String result = (String) XMLrpc.execute("myHandler.sayHello",params);System.out.println(result);} catch (MalformedURLException e) {System.out.println(e.toString());} catch (XMLRpcException e) {System.out.println(e.toString());} catch (IOException e) {e.printStackTrace();}}

http://localhost:8080/XMLRPC/MyXMLRpcServer 为 MyXMLRpcServer 的访问URL。

String result = (String) XMLrpc.execute("myHandler.sayHello",params);

再来一个 Python 客户端实现

import XMLrpcliburl = 'http://localhost:8080/XMLRPC/MyXMLRpcServer';server = XMLrpclib.Server(url);print server.myHandler.sayHello('Tom');

责任编辑:admin
相关文章