免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1831 | 回复: 0
打印 上一主题 下一主题

XML-RPC 之 Apache XML-RPC 实例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-18 14:18 |只看该作者 |倒序浏览
[color="#ff1493"]XML-RPC 是工作在 Internet 上的远程过程调用协议。通俗点讲,就是使用 HTTP 协议交互,交互的载体是 XML 文件。XML-RPC 具体的规范说 明请参考
[color="#ff1493"]这里
[color="#ff1493"]。
[color="#ff1493"]作者:
[color="#ff1493"]王恩建
[color="#ff1493"]XML-RPC 是工作在 Internet 上的远程过程调用协议。通俗点讲,就是使用 HTTP 协议交互,交互的载体是 XML 文件。XML-RPC 具体的规范说 明请参考
[color="#ff1493"]这里
[color="#ff1493"]。


图片来自XML-RPC官方网站
[color="#ff1493"]XML-RPC 规范定义了六种数据类型,下表是这六种数据类型与 Java 的数据类型对应表。
[color="#ff1493"]XML-RPC
[color="#ff1493"]Java
[color="#ff1493"] 或
[color="#ff1493"]int
[color="#ff1493"]
[color="#ff1493"]boolean
[color="#ff1493"]
[color="#ff1493"]java.lang.String
[color="#ff1493"]
[color="#ff1493"]double
[color="#ff1493"]
[color="#ff1493"]java.util.Date
[color="#ff1493"]
[color="#ff1493"]java.util.Hashtable
[color="#ff1493"]
[color="#ff1493"]java.util.Vector
[color="#ff1493"]
[color="#ff1493"]byte[ ]
[color="#ff1493"]XML-RPC 规范的各种平台都有具体实现,XML-RPC 规范的 Java 实现都有好几种,这里我们选择了
[color="#ff1493"]Apache XML-RPC
[color="#ff1493"]。
[color="#ff1493"]XML-RPC 服务端实现[color="#ff1493"]先定义一个简单业务对象 MyHandler,远程客户端将调用该对象的方法,具体代码如下:
[color="#ff1493"]package net.sentom.xmlrpc;
public class MyHandler {
       
        public String sayHello(String str){
                return "Hello," + str;
        }
}

[color="#ff1493"]然后定义一个 Servlet 名叫 MyXmlRpcServer,远程客户端通过 HTTP-POST 访问该 Servlet。
[color="#ff1493"]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();
        }
}

[color="#ff1493"]需要特别说明是:
[color="#ff1493"]xmlrpc.addHandler("myHandler", new MyHandler());

[color="#ff1493"]为了便于理解,这里可以看成普通的:
[color="#ff1493"]MyHandler myHandler = new MyHandler();

[color="#ff1493"]最后在web.xml文件中加入以下几行:
[color="#ff1493"]
            MyXmlRpcServer
            net.sentom.xmlrpc.MyXmlRpcServer
            MyXmlRpcServer
            /MyXmlRpcServer

[color="#ff1493"]XML-RPC 客户端实现[color="#ff1493"]客户端相对简单一些,先来一个 Java 客户端实现 MyXmlRpcClient:
[color="#ff1493"]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();
                }
        }

[color="#ff1493"]http://localhost:8080/XMLRPC/MyXmlRpcServer 为 MyXmlRpcServer 的访问URL。
[color="#ff1493"]String result = (String) xmlrpc.execute("myHandler.sayHello",params);

[color="#ff1493"]再来一个 Python 客户端实现
[color="#ff1493"]import xmlrpclib
url = 'http://localhost:8080/XMLRPC/MyXmlRpcServer';
server = xmlrpclib.Server(url);
print server.myHandler.sayHello('Tom');

[color="#ff1493"]参考资料
[color="#ff1493"]XML-RPC HOWTO
[color="#ff1493"]Python 2.4 Documentation
[color="#ff1493"]

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5142/showart_16340.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP