标题:Java 编程中的 XML-RPC(一)
时间: 2004-12-31
来源:IBM DW 作者:Roy Miller
应用程序间通信对程序员来说可能是个不好对付的问题。而许多可用的选择(如 JNI)又难于掌握。XML-RPC 提供了一种非常简单的解决方案。该方法简洁、易于实现,且得到了大多数流行编程语言(例如 Java 语言和 C++)的开放源代码库的良好支持。例如,如果您有一个 Java 应用程序需要与另一个用 C++ 编写的应用程序进行对话,那么 XML-RPC 正好可能是最简单的方法。在本文中,软件开发人员兼培训师 Roy Miller 谈论了 XML-RPC 是什么以及如何有效地使用它。
我无数次从开发同伴那里听说最新的热门技术就是对软件开发世界中使人烦恼的问题的解决方法。XML 首次出现时,许多人就是这样说的。此时,我没有感到兴奋,而且从那时起,我的态度也没有太多改变。我一直认为 XML 是种极佳的方法,用以定义结构化数据,而无需笨拙地将之转化为关系型结构。但是,XML 不是一种编程语言 —— XLST 在语法上较为复杂,且至少对于我来说有点奇怪。因此,我一直在等待出现需要进行结构化数据交换的问题,而这才是创造 XML 的真正目的。在最近的项目中就出现了这个特殊问题,XML(用作 XML-RPC)正是合适于该工作的工具。
编程挑战
我们的客户制造了一种硬件设备。我们加入该项目之前,用户配置每台设备的惟一方法就是用命令行接口。要不是每个客户在每个网络上可能有 20 台或更多(也许甚至成百或上千)这样的硬件设备,该方法也并非必定糟糕。迫使客户用命令行接口一个接一个地配置每台设备很可能会削减销售。当客户在订货到达后不得不对多台设备进行初始设置和配置的时候,该问题将会更为尖锐。每个设备的配置包含在一个 XML 文件中,而设备在启动时将读取该文件。
客户聘请我们创建一个配置应用程序,用以在一个或更多位置集中的管理机器上运行。该应用程序需要简化所有设备的初始设置,将之重新配置为要进行固件升级、纠正错误等等,以及监控现有设备。其中有点困难的问题就是设备上的软件是用 C 编写的,而我们的台式机应用程序却需要用 Java 编程语言进行编写。我们首先考虑的是 JNI,但是觉得应该存在更简单的东西。那就是称作 XML-RPC 的有用的小东西。
XML-RPC 入门
XML-RPC 网站是这样描述的:
它是允许运行在不同操作系统、不同环境中的软件进行基于 Internet 过程调用的规范和一组实现。这种远程过程调用使用 HTTP 作为传输协议,XML 作为编码格式。XML-RPC 的定义尽可能简单,但能够传送、处理和返回复杂的数据结构。
在阅读该描述时,我们就知道我们有了答案。每台设备的配置保存在一个文件之中(其内容也是 XML,但这对于该论述无关紧要)。这意味着我们已经拥有告诉每台设备如何配置自身的语义。如果我们给设备发送它所期待的配置文件,那就会很好了。但是将如何发送呢?我们可以仅仅发送字节,但那样会危及安全性,况且用字节操作来完成这一切也不是谁所真正需要的。我们意识到可以用定义良好的 XML-RPC 消息来发送字符串有效负荷,而 XML-RPC 消息将允许我们调用每台设备上严格限制的软件公共接口中的 C 函数。
XML-RPC 重点
概括地说,您可以将 XML-RPC 认为是简化的 SOAP。它可能是您曾需要的惟一的应用程序间的通信。XML-RPC 网站上有个极佳的“入门”文档,该网站还提供了一些发展历史以及各种语言的实例。但是,您可能只需要阅读其规范。在不到六页的内容上包括了一个简单的模型。本节中,我们将介绍一些重点,以便为如何在项目中使用 XML-RPC 做好准备。
一个 XML-RPC 消息就是一个请求体为 XML 的 HTTP-POST 请求。您需要一个 XML-RPC 客户程序来创建消息,以及一个 XML-RPC 服务程序来接收消息。服务程序一旦完成了请求,就同样以 XML 格式送回一个 XML-RPC 响应消息。请求可以包含参数(整数、字符串、日期以及其他类型,如果需要还可以包括数组和复杂记录)。每个请求的格式都极其简单,如清单 1 所示:
清单 1. XML-RPC 请求示例
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
您需要一个指定“处理程序”名(清单 1 中为 examples)的字符串 methodName 和一个调用该处理程序的方法(清单 1 中为 getStateName )。无论如何,服务程序可以解释这个名字字串。我们所使用的 Java 服务程序(我们将稍候讨论)将用处理程序名 examples 找到一个对象,并且调用该对象之上的 getStateName 方法。其响应也很简单,如清单 2 所示:
清单 2. XML-RPC 响应示例
HTTP/1.1 200 OK
Connection: close
Content-Length: 158
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:08 GMT
Server: UserLand Frontier/5.1.2-WinNT
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>South Dakota</string></value>
</param>
</params>
</methodResponse>
当您发出一个 XML-RPC 调用时,您将获得一个 XML 响应,其中包含一个 元素,该元素中又依次包含一个 元素,其中再包含一个元素,该元素中则包含一个需要进行处理的返回值。大多数情况下,这就是您所希望获得的响应。但是现实从来都不是那么简单的。如果发生某些错误,服务程序则会返回“故障”响应,如清单 3(反映在 RPC 中发送太多参数的故障)所示:
清单 3. XML-RPC 故障响应示例
HTTP/1.1 200 OK
Connection: close
Content-Length: 426
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:02 GMT
Server: UserLand Frontier/5.1.2-WinNT
<?xml version="1.0"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><int>4</int></value>
</member>
<member>
<name>faultString</name>
<value><string>Too many parameters.</string>
</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
元素的 元素中包含一个带有 faultCode member 成员和 成员的结构。这就像是 Java 类中的 toString()。如果发生错误,并且是由编码所致,toString() 则会通过错误代码和出错消息告诉您是什么。而 XML-RPC 故障响应完成同样的工作。
这也涉及您需要用以理解 XML-RPC 相关处理的所有内容。实际上,您真的无需了解 XML 消息布局的细节。只要提供了有效输入,您所选择的 XML-RPC 实现库将为您完成所有工作。因此,您所缺乏的用以读取规范的惟一工具就是客户程序和服务程序实现。在这个应用程序中,我们需要 Java 实现的客户程序和 C 实现的服务程序。
分享到:
相关推荐
标题"Java的XML-RPC函数库源代码"表明,我们关注的是Java编程语言中的XML-RPC实现,特别关注其底层的源代码。源代码的可用性使得开发者可以深入了解库的工作原理,自定义功能,或者对库进行调试和优化。 描述中提到...
Apache XML-RPC(XML Remote Procedure Call)是一种轻量级的基于HTTP协议的远程调用技术,它允许在不同的网络环境中,使用不同的编程语言实现的服务器之间进行通信。XML-RPC利用XML作为数据交换格式,提供了简单、...
XML-RPC(XML Remote Procedure Call)是一种轻量级的远程过程调用协议,它允许不同编程语言编写的系统之间进行通信。在这个实例中,我们将探讨如何使用XML-RPC实现Java与Delphi之间的互相调用,以及提供的源码和可...
1. **服务器端**:创建一个实现了XML-RPC处理逻辑的Java类,这个类中的方法将被远程调用。然后,使用XML-RPC服务器启动器(如`org.apache.xmlrpc.server.XmlRpcServerServlet`)将这个类注册到服务器上,使它们可以...
Java作为一种广泛使用的编程语言,具备良好的跨平台特性,而XML-RPC与Java结合能够提供强大而灵活的服务接口。此外,Java丰富的库资源和强大的网络功能使得它成为实现XML-RPC的理想选择。 ##### 4.2 XML-RPC Java库...
XML-RPC(XML Remote Procedure Call)是一种基于XML的远程过程调用协议,它允许不同的编程语言和操作系统之间进行跨平台的数据交换和远程方法调用。本示例是关于如何在Delphi环境中通过XML-RPC与Java JSP应用程序...
XML-RPC基础概念 XML-RPC协议详解 XML-RPC与SOAP比较 XML-RPC数据类型 XML-RPC消息格式 XML-RPC错误处理机制 XML-RPC客户端开发 XML-RPC服务器端开发 ...XML-RPC实战:Java服务器端编程 XML-RPC实战:PHP集成案例
在"xml-rpc-2.2.zip"这个压缩包中,可能包含的是XML-RPC协议2.2版本的相关资料和库文件,用于理解和应用XML-RPC技术。 XML-RPC的基本工作原理是这样的: 1. **请求构造**:客户端将方法名和参数封装成一个XML文档...
总之,通过学习和使用这个Android XML-RPC博客客户端源码,开发者不仅可以掌握XML-RPC通信技术,还能了解到Android应用的网络编程、数据解析、界面设计等多个方面,为今后的Android开发积累宝贵经验。
在这个入门教程中,我们将探讨如何在Java环境中使用Apache XML-RPC创建一个简单的Servlet服务,并启动服务器线程。 首先,我们需要了解XML-RPC的基本原理。在XML-RPC中,客户端发送一个包含方法名和参数的XML请求到...
最近要用XML-RPC机制实现delphi程序与Qt程序之间的通信,从开源网站http://sourceforge.net/projects/delphixml-rpc/下载Delphi XML-RPC 后发现中文字符串会出现乱码,跟踪代码后发现XML-RPC默认的字符编码是UTF-8,...
- **为何选择XML-RPC for Java**:Java作为一种广泛使用的编程语言,非常适合于开发跨平台的Web服务。XML-RPC在Java中的应用充分利用了Java的强大功能和广泛的库支持。 - **XML-RPC Java库**:本书介绍了可用的Java...
1. 引入`jsonrpc4j`依赖:在项目构建文件(如pom.xml或build.gradle)中添加依赖。 2. 创建JSON-RPC服务类:定义要暴露的远程方法。 3. 注册服务:使用`jsonrpc4j`提供的`JsonRpcServer`,将服务类注册到服务器实例...
在Java开发中,JSON-RPC库可以帮助开发者实现客户端和服务端之间的通信,尤其在分布式系统或者微服务架构中广泛应用。本压缩包“java开发常用jar包之json-rpc.rar”包含了与JSON-RPC相关的Java库,便于开发者集成到...
标题中的“wordpress-java:Java库使用Wordpress的xml-rpc功能”表明这是一个关于使用Java语言与WordPress交互的项目,主要依赖于XML-RPC协议。XML-RPC(远程过程调用)是一种轻量级的网络通信协议,允许客户端通过...
【Spring整合JAVA XMLRPC】是一个重要的IT主题,它涉及到Java应用程序如何通过XML-RPC(远程过程调用)协议与远程服务器进行通信,并结合Spring框架来实现更高效、更灵活的服务集成。XML-RPC是一种轻量级的基于HTTP...
在Java编程环境中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛用于不同系统之间的通信。而`javax.xml.rpc`是Java平台标准版(Java SE)的一部分,它提供了一组API来支持Web服务的开发。这个...
用于 Java 的 JSON-RPC用于 Java 的 JSON-RPC该项目旨在为 Java 编程语言提供轻松实现 JSON-RPC 的功能。jsonrpc4j 使用 Jackson库在 Java 对象和 JSON 对象之间进行转换(以及其他与 JSON-RPC 相关的内容)。 功能...
JAX-RPC(Java API for XML-based RPC)是一种基于XML的远程过程调用(RPC)机制,用于构建Web服务和使用远程调用和XML客户端的API。在这个机制中,远程过程调用由SOAP(Simple Object Access Protocol)这种基于XML...