前段时间公司的办公环境切换到云,顺便清理了外网权限,导致我的外发权限没有了。所以现在很多新的博客都只能发到公司内部博客了,这里的更新速度就变慢了点。不过这里也是不会废弃的,还是会抽空在这里发
最近其中一项工作,是分析本行业欧洲项目的IT系统集成状况,所以稍微了解了一下XML-RPC,有一些想法记录一下
一、XML-RPC的本质
只要熟悉web service,要掌握XML-RPC就非常简单,因为它们本质上是一样的
无论以何种方式实现RPC,都需要解决2个问题,第一是传输问题,即系统间必须有通讯链路,消息才能传输;第二是数据格式问题,系统间的数据,必须能够互相解析
XML-PRC解决这2个问题的方法是:用HTTP作为传输层,用XML传递数据格式
以client的流程举例(server端类似)
发送XML-RPC请求,会经过以下几个步骤
1、首先将请求的格式(方法名、方法参数等)封装成XML格式的数据(XML格式是由XML-RPC规范规定的)
2、然后将XML数据放到HTTP请求体中
接收XML-RPC响应,会经过以下几个步骤
1、从HTTP响应中取出XML
2、将XML解析为本地数据
二、XML-RPC解决的问题,和没有解决的问题
前面说过,XML-RPC可以解决2个问题,第一个就是RPC的能力,另一个由于XML-RPC规范中定义的数据结构是通用的,所以也解决了异构系统集成的问题,比如
<int>23</int>
这个参数,在JAVA平台可以处理为int类型,在.NET平台也可以解析为对应的数据类型
但是,XML-RPC规范中没有规定安全的问题如何解决,还有如何公开发布一个XML-RPC服务,在规范中也没有明确的说明。但是其实我觉得这也是有利有弊,XML-RPC的规范是非常简单的,上个厕所的时间就可以读完:
http://xmlrpc.scripting.com/spec.html
因此,XML-RPC也是相当轻量级的,在各个平台也有成熟的实现(JAVA平台常用的实现是Apache XML-RPC)。所以,在简单的集成场景下,放弃笨重的web service,选择轻量级的XML-RPC,其实也是不错的选择
三、XML-RPC在JAVA平台的实现思路
理解了XML-RPC的本质,实现起来并不困难
对于client,首先用一个组件将调用请求包装为XML数据,然后用HTTP组件(比如commons-http),封装HTTP消息并发送;收到的响应,也先用HTTP组件处理得到XML,再从XML中还原得到本地数据,继续进行业务处理
对于server,有一种方式是通过ServerSocket侦听HTTP请求,然后进行处理,但是这样显然太麻烦。所以更好的选择是基于JAVA平台的Servlet规范来实现,将HTTP处理的部分交给servlet容器来完成,只需要关注怎么实现method的路由,以及XML的转换即可
这里也有2种选择,第一种是为每个XML-RPC服务开发一个单独的Servlet,这样的好处是省略了方法路由的处理;缺点是如果XML-RPC服务很多的话,会有很多的Servlet,并且也不利于动态扩展。第二种办法就是采用“front-end controller”的设计模式,只开发唯一的一个Servlet,在里面进行方法路由,根据client请求的方法名,映射到不同的业务实现类。阅读cxf的源码可以发现,cxf正是采用这种思路来实现
四、XML-RPC的前景
前面说过,XML-RPC是相当轻量级的异构系统RPC规范,我个人很喜欢轻量级的技术。但是XML-RPC目前基本上被web service取代了,这里面可能有XML-RPC先天不足的原因,另外商业的推广可能是更重要的原因。(web service在前十年得到了很多IT巨头厂商的大力推广)以IBM为典型代表的IT龙头老大很擅长这套,先发明一个BUZZ-WORD,然后围绕着出一系列解决方案,然后赚一波钱,接着再发明下一个BUZZ-WORD,其实回头看看,很多时候不是什么新东西,只是包装得很好
另一方面,前段时间突然又重新流行起来的RESTful,也是直接批判了XML-RPC,当然说的也不无道理。但是无论如何,我个人的看法是,技术没有好坏之分,只有适用场景。对于简单的集成场景,很多时候XML-RPC可以满足需求,又很简单,那么也可以作为一个选择
五、web service
web service本质上和XML-RPC完全是一样的,也是遵循本地数据-XML-HTTP这个模型。但是web service在XML这层,采用的是SOAP协议(其实就是更复杂的XML-RPC),原理上毫无区别
web service有明显的“第二版效应”,竭力想弥补第一个版本的缺失,因而在功能上非常的“丰富”和“复杂”,其中有些是很好的,有些是用不上并且相当笨重的
web service相对于XML-RPC,在服务发布上有比较明显的优势。通过WSDL,可以清晰地描述一个服务,然后在client,就可以根据这个WSDL,很容易地生成客户端的代码
另外的一些特性,比如ws-security、wsdd等,很强大,很复杂,很笨重,没用上
- 大小: 4 KB
分享到:
相关推荐
【PHP中的XML-RPC与Web Service】 Web Service是一种软件架构模式,它允许不同平台和语言的应用程序之间进行互操作性通信。XML-RPC(XML Remote Procedure Call)是Web Service的一种简单实现,它基于HTTP协议,...
XML-RPC利用XML作为数据交换格式,提供了简单、跨平台的RPC解决方案,极大地简化了Web Service的应用开发。这篇博文将深入探讨Apache XML-RPC的原理、使用方法以及它如何简化Web Service应用的构建。 XML-RPC的核心...
对于想要使用XML-RPC构建Web Service的开发者来说,确保环境中有正确的`xmlrpc`扩展至关重要。具体安装步骤如下: 1. **Windows平台**: - 将`php_xmlrpc.dll`文件从PHP安装目录拷贝至`C:\Windows`或`C:\Winnt`...
具体地,开发者能够学习如何安装xmlrpc扩展、理解XML-RPC的工作原理,并通过具体实例代码学习实践XML-RPC Web Service开发。需要注意的是,教程中提及的操作和代码示例都是基于xmlrpc扩展正确安装和配置的前提下的。...
目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。 PHP中集成了XML-RPC和SOAP两种...
在Java EE环境中,它常与Web服务(Web Service)紧密关联。 XML-RPC是一种轻量级的远程调用协议,它使用XML来编码方法调用和参数,通过HTTP作为传输协议。在Java中,javax.xml.rpc包提供了相关的接口和类,使得...
通过以上内容,我们可以了解到XML-RPC作为一种简单的Web Service协议,非常适合那些不需要高度安全性或复杂性的应用场景。它不仅易于实现,而且能够在多种编程语言和平台上运行,从而大大简化了跨系统间的通信过程。...
Programming Web Services with XML-RPC <br>Simon St. Laurent <br>Joe Johnston <br>Edd Dumbill <br>Publisher: O'Reilly <br>First Edition June 2001 ISBN: 0-596-00119-3, 230 pages
- `javax.xml.rpc.Service`:这是服务端点接口的抽象基类,提供了与服务交互的基本方法,如获取操作的端点地址、获取消息处理器等。 - `javax.xml.rpc.ServiceException`:当服务访问过程中发生错误时抛出的异常。 -...
PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是... 我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。
在Web开发中,JSON-RPC常用于实现客户端与服务器之间的异步通信,尤其在AJAX应用中,可以提供类似本地调用的体验。 Spring MVC是Spring框架的一部分,它是一个模型-视图-控制器(MVC)架构,用于构建可维护性和可...
本篇内容重点介绍了 Java API for XML-based RPC(简称 JAX-RPC)1.0 版本,这是一种用于开发基于 Java 的 Web 服务的技术。通过 JAX-RPC,开发者可以创建可移植且互操作的 Web 服务。 #### 二、学习目标 - **理解...
JSON-RPC 使用 JSON(JavaScript Object Notation)作为数据交换格式,而 XML-RPC 使用 XML。JSON-RPC 提供了一种轻量级的方式来进行跨平台的通信,它支持单个请求/响应模型,以及批量调用和通知。XML-RPC 同样是...
- **JAX-RPC (Java API for XML-based RPC)**:用于实现 Web Service 的 Java API。 - **特性**: - **基于 Servlet 的 Web Service 端点模型**。 - **WSDL 与 Java 映射**:实现 WSDL 文档到 Java 类的映射。 - ...
在JAX-RPC中,这通常在服务端部署描述符(如`service-config.xml`)中完成。以下是一个简单的配置示例: ```xml <handler-chains xmlns="http://java.sun.com/xml/ns/jaxrpc/2003/handler-chain"> <handler-chain>...
【javax.xml.ws.Service】是Java平台上用于Web服务客户端的一个核心接口,它位于Java Web Services (JWS) API中,主要用于创建和使用Web服务。这个接口是JAX-WS(Java API for XML Web Services)规范的一部分,它...