当前位置: 首页 > Linux学院 > 网络服务 > Web > 实现Apache XML-RPC开发客户端及服务端Java代码

实现Apache XML-RPC开发客户端及服务端Java代码

2012-11-23 21:50 来源:风信网 作者:末信 人气指数: 我要评论

本文将会首先介绍一下 XML-RPC 协议规范,然后介绍如何实现 Apache XML-RPC 开发客户端及服务端 Java 代码。最后对 Apache XML-RPC 的高级特性进行了介绍。

在新技术、新概念甚至新思维层见叠出的 IT 行业,XML-RPC 绝对不是最新的热门技术,但它自诞生之日起,一直在 IT 行业占有一席之地。XML-RPC 具有简单且易于实现,可以高效跨越不同的软硬件平台上应用系统等优点。相对于庞大、复杂的分布式计算机制,它一直是中小型应用的最佳选择之一。比如,流行于软件研发团队的任务计划管理系统 JIRA、开源的测试用例管理工具 TestLink 等都提供了开放的 XML-RPC 接口,供用户定制开发时进行调用。

XML-RPC(XML-based Remote Procedure Call,基于 XML 的远程过程调用)是一种工作在互联网上的远程过程调用协议。一个 XML-RPC 请求消息就是一个 HTTP-POST 请求消息,其请求消息主体基于 XML 格式。客户端发送 XML-RPC 请求消息到服务端,调用服务端的远程方法并在服务端上运行远程方法。远程方法执行完毕后,返回响应消息给客户端,其响应消息主体同样基于 XML 格式。远程方法的参数支持数字,字符串、日期等;也支持列表数组和其他复杂结构类型。

主流的开发语言都提供了 XML-RPC 协议的客户端程序和服务端程序的实现,这些语言包括 Java、Ruby、Python、C/C++ 、Perl 和 PHP 等。本文选择以 XML-RPC 的 Java 实现 Apache XML-RPC 为例,来研究 XML-RPC 协议规范。Apache XML-RPC 完全兼容 XML-RPC 协议规范,同时也提供了一些扩展特性,使其还具有下述能力:

  • 支持 Java 的全部基本数据类型,如 long、byte、short,以及 double
  • 支持 Calendar 对象
  • 支持支持 DOM 节点、JAXB 对象实例能通过 XML-RPC 进行传输。事实上,任何实现 java.io.Serializable 接口的对象都可以被传输
  • 客户端和服务端都可以通过配置在流模式(stream mode)下进行操作,这样比基于大字节数组的默认模式节省资源

下面就以实例来学习 XML-RPC 的请求和响应消息的格式。本文以当前工作使用的 Window 机器为客户端,IP 为 192.168.1.105。服务端为 Ubuntu 机器,IP 为 192.168.1.126。

步骤 1. 下载本文附带的源代码文件,内含三个 Eclipse Java 项目,请把他们导入到 Eclipse 工作区间:

    • XML-RPC-Client XML-RPC 客户端实现的例子
    • XML-RPC-EmbeddedWebServer 嵌入式服务端端实现的例子,可以直接运行
    • XML-RPC-Server Servlet 服务端端实现的例子 , 需要部署在 Servlet 容器,比如 Tomcat、Jetty 等

步骤 2. 右键选择 XML-RPC-Server 项目,导出为 WAR 文件,命名为 xmlrpc.war。把它部署在服务端的 Servlet 容器上,本文以部署在 Ubuntu 12.04 上的 Tomcat 7.0 为例,复制 xmlrpc.war 到 Tomcat 安装根目录下的 webapps 文件夹下。启动 Tomcat 服务器,使用浏览器访问 http://192.168.1.126:8080/xmlrpc/xmlrpc, 如能正常显示,则表明在服务端上部署成功。

步骤 3,下载安装 SmartSniff(下载地址见参考资源部分)。SmartSniff 用于捕获客户端与服务端的 XML-RPC 消息交互数据包。运行该软件,在菜单 Options-Capture Filter 与 Display Filter 里设置捕获过滤、展示过滤:include:remote:tcpudp: 192.168.1.126:8080,这样只显示我们感兴趣的协议数据。点击 Start Capture 按钮,启动捕获监听。注意:SmartSniff 只能运行在 Window 机器上,并且只能捕获不同的机器之间的 TCP/IP 网络数据交互。如果 XML-RPC 客户端与服务端运行在相同的机器上,无法使用该工具捕获协议交互数据。

步骤 4,运行客户端的单元测试类,研究 XML-RPC 消息格式。在 Eclipse 项目 XML-RPC-Client 中,打开单元测试类 junit.TestClientServletWebServer.java。选择 testXMLRPC()方法,以 JUnit Test 方式运行。可以发现 JUnit 单元测试可以运行成功,SmartSniff 捕获的协议见图 1。使用相同的方法,可以运行更多的测试类,研究更多的 XML-RPC 消息的格式。

图 1. 捕获 XML-RPC 协议消息 

实现Apache XML-RPC开发客户端及服务端Java代码

大家感兴趣的内容
小伙伴最爱的新闻
小伙伴还关注了以下信息
小伙伴关注的焦点

小伙伴都在关注的热门词

新服 缤纷活动 航海世纪 芈月传 暗黑道具 萌乐网 苹果发布会 最新谍照 三国令 剑雨江湖 怎样修炼战骑 页游 怎样修炼伙伴 木甲世界 仙侠道2 推黑科技 页游模式 武圣试炼场 街机玩法 蓝月传奇 个人BOSS玩法 哥们网 九阴绝学 仗剑出鞘 全新模式 范伟打天下 全新元神玩法 七大神兵简介 新手攻略 跑腿任务 门派五行 城战礼包 页游界 泥石流 傅园慧 经典网页游戏 耐玩 盘点 玉石攻略 提升角色 大黑 实装属性 神兵攻略 问鼎莽荒 莽荒纪 手持神兵 土豪梦 万世 开学清单 财富赚不停 天书世界 大黑游戏 资源战场 ppwan 天问 激战 全国大战 雄霸一方 新增宠物技能 绝对小能手 花千骨 三尾章鱼 风色轨迹 双枪手 弑之神 缤纷好礼 惊喜六重连 帮会 中秋福利 自制月饼 九阴真经 玩家 五周年纪念 纪念银币 名动三界 新服资料片 画江山 勇战妖魔 邪恶势力 上古降魔 老司机玩法 坐骑揭秘 黑科技 竞技场攻略 铁血皇城 披风玩法 书剑恩仇录 装备强化攻略 野外BOSS玩法 全网曝光 赤壁传说 半回合制国 ACT 奇珍商城 热血战歌 传奇宝藏抽奖 打开方式 门徒 门徒获取玩法 三大萌宠简介