XML-RPC是一个远程过程调用(远端程序呼叫)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。
 
中文名
XML-RPC
外文名
XML Remote Procedure Call
属    于
标准通用标记语言
类    型
一个子集

关于XML-RPC

基本介绍

XML-RPC是工作在Internet上的远程过程调用协议。一个XML-RPC消息就是一个请求体为xml的http-post请求,被调用的方法在服务器端执行并将执行结果以xml格式编码后返回。

Request example

Here's an example of an XML-RPC request:
POST /RPC2 HTTP/1.0User-Agent: Frontier/5.1.2 (WinNT)Host: betty.userland.comContent-Type: text/xmlContent-length: 181
1
2
3
4
5
6
7
8
9
10
11
<?xmlversion="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value>
<i4>41</i4>
</value>
</param>
</params>
</methodCall>

Response example

Here's an example of a response to an XML-RPC request:
HTTP/1.1 200 OKConnection: closeContent-Length: 158Content-Type: text/xmlDate: Fri, 17 Jul 1998 19:55:08 GMTServer: UserLand Frontier/5.1.2-WinNT
1
2
3
4
5
6
7
8
9
10
11
12
<?xmlversion="1.0"?>
<methodResponse>
<params>
<param>
<value>
<string>
SouthDakota
</string>
</value>
</param>
</params>
</methodResponse>

XML-RPC入门程序

基本做法

以下的入门程序包括一个管理器(HelloHandler)、一个服务器(HelloServer)、一个客户程序(HelloClient)。
首先要做的是创建用于远程过程调用的类和方法,人们常常称之为管理器。Xml-rpc管理器是一个方法和方法集,它接受xml-rpc请求,并对请求的内容进行解码,再向一个类和方法发出请求。
 

管理器类

 
1
2
3
4
5
6
7
packagexmlRpc;
/***@authortrier**<b><code>HelloHandler</code></b>isasimplehandlerthancan*beregisteredwithanXML-RPCserver*/
publicclassHelloHandler{
publicStringsayHello(Stringname){
return"Hello"+name;
}
}
服务器程序将创建的管理器注册到服务器上,并为服务器指明应用程序其他特定的参数。
 

服务器类

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
packagexmlRpc;
/**
*
*<b><code>HelloServer</code></b>isasimpleXML-RPCserver
*thatwilltakethe<code>HelloHandler</code>classavailable
*forXML-PRCcalls.
*<o:p
*/
importorg.apache.xmlrpc.WebServer;
importorg.apache.xmlrpc.XmlRpc;
importjava.IOException;
publicclassHelloServer{
publicstaticvoidmain(String[]args){
if(args.length<1){
System.out.println("Usage:javaHelloServer[port]");
System.exit(-1);
}
try{
XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
//starttheserver
System.out.println("StartingXML-RPCServer......");
WebServerserver=newWebServer(Integer.parseInt(args[0]));
//registerourhandlerclass
server.addHandler("hello",newHelloHandler());
System.out.println("Nowacceptingrequests......");
}catch(ClassNotFoundExceptione){
System.out.println("CouldnotlocateSAXDriver");
}catch(IOExceptione){
System.out.println("Couldnotstartserver:"+e.getMessage());
}
}
}
 

客户程序

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
packagexmlRpc;
/**
*
*<b><code>HelloClient</code></b>isasimpleXML-RPCclient
*thatmakesanXML-RPCrequestto<code>HelloServer</code>
*/
importjava.i.IOException;
importjava.util.Vector;
importorg.apache.xmlrpc.XmlRpc;
importorg.apache.xmlrpc.XmlRpcClient;
importjava.t.MalformedURLException;
importorg.apache.xmlrpc.XmlRpcException;
publicclassHelloClient{
publicstaticvoidmain(String[]args){
if(args.length<1){
System.out.println("Usage:javaHelloClient[yourname]");
System.exit(-1);
}
try{
//UsetheApacheXerecesSAXDriver
XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
//Specifytheserver
XmlRpcClientclient=newXmlRpcClient("http://localhost:8585");
//createrequest
Vectorparams=newVector();
params.addElement(args[0]);
//makearequestandprinttheresult
Stringresult=(String)client.execute("hello.sayHello",params);
System.out.println("Responsefromserver:"+result);
}catch(ClassNotFoundExceptione){
System.out.println("CouldnotlocateSAXDriver");
}catch(MalformedURLExceptione){
System.out.println("IncorrectURLfroxml-rpcserverforamt:"+e.getMessage());
}catch(XmlRpcExceptione){
System.out.println("XmlRpcException:"+e.getMessage());
}catch(IOExceptione){
System.out.println("IOException:"+e.getMessage());
}
}
}
 

RPC和RMI的简单比较

调用形式

在RMI和RPC之间最主要的区别在于方法是如何被调用的。在RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。
 

classname.methodname的形式

在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。
 

methodname

这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。
 

匹配成功后

一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。 

XML-RPC-1概述的更多相关文章

  1. 什么是XML RPC?

    # -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...

  2. The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly

    The type javax.xml.rpc.ServiceException cannot be resolved.It is indirectly 博客分类: 解决方案_Java   问题描述:T ...

  3. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  4. 关于XML的DTD概述

    1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...

  5. xml rpc SimpleXMLRPCServer [python]

    SimpleXMLRPCServe 其实里面xml的概念不是很强,主要是rpc !不用关心什么xml . rpc 是就是远程调用,把函数什么的放到远程服务器上,本地调用就行了.用 SimpleXMLR ...

  6. [03] mapper.xml的基本元素概述

    1.select 我们基于这个持久层接口 GirlDao: public interface GirlDao { List<Girl> findByAge(int age); Girl f ...

  7. alluxio源码解析-rpc调用概述(1)

    alluxio中几种角色以及角色之间的rpc调用: 作为分布式架构的文件缓存系统,rpc调用必不可少 client作为客户端 master提供thrift rpc的服务,管理以下信息: block信息 ...

  8. xml的解析(概述)

    使用java解析xml☆☆☆ 四个类:分别是针对dom和sax解析使用的类   -dom :     DocumentBuilder:解析器类       -这个类是个抽象类,不能new,       ...

  9. Android之布局androidmanifest.xml 资源清单 概述

    转载:https://www.cnblogs.com/wytings/p/4083463.html AndroidManifest.xml配置文件对于Android应用开发来说是比较细但又很重要的基础 ...

  10. supervisord支持扩展(xml RPC API & Third Party Applications and Libraries)

    XML-RPC API Documentation http://www.supervisord.org/api.html Third Party Applications and Libraries ...

随机推荐

  1. SpringBoot缓存技术

    一.SpringBoot整合Ehhcache 添加maven依赖 <dependency> <groupId>org.springframework.boot</grou ...

  2. Jupyter Notebook 远程连接配置(转载)

    转载博客的Jupyter Notebook远程连接配置方法. 0 - 参考资料 https://www.jianshu.com/p/08f276d48669?utm_campaign=maleskin ...

  3. Vue+MySQL实现购物车的增删改查

    1,创建简单数据库数据表 2,创建Mapper文件 <!--查询商品--> <select id="selectcommodity" resultType=&qu ...

  4. orcale11g安装

    一.centos7.5安装orcale 安装环境 内存最小1G,推荐2G或者更高 内存为1-2g,swap是内存的1.5倍左右 内存大于2G, swap和内存相等 硬盘最小为30G oracle版本 ...

  5. 持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

    目录 一.整体流程 二.Jenkins 配置 2.1.首先安装插件 2.2.配置目标服务器 2.3.创建 job 2.4.配置 gitlab 触发 三.改进 一.整体流程 二.Jenkins 配置 2 ...

  6. 《C语言程序设计教程》学习笔记

    <C语言程序设计教程>--朱鸣华.刘旭麟等 第一章 C语言概述 1.C语言的特点: 1)兼具高级.低级语言的双重能力(C语言允许直接访问物理地址,能够进行位操作,能实现汇编语言的大部分功能 ...

  7. JS CSS写下拉菜单 竖行

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Lnamp的高级网站架构+动静分离+反向代理

    Lnamp的架构 环境: 图上面是5台服务器 192.168.1.116 是nginx负载均衡+动静分离 192.168.1.117:linux+apache+php 192.168.1.118:li ...

  9. MySQL 事务一览

    MySQL 中的事务? 对 MySQL 来说,事务通常是一组包含对数据库操作的集合.在执行时,只有在该组内的事务都执行成功,这个事务才算执行成功,否则就算失败.MySQL 中,事务支持是在引擎层实现的 ...

  10. [bzoj4665]小w的喜糖_二项式反演

    小w的喜糖 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665 数据范围:略. 题解: 二项式反演裸题. $f_{i,j}$表示,前$i$种钦 ...