XML-RPC笔记
1.什么是XML-RPC
RPC(Remote Procedure Call)就是相当于提供了一种“远程接口”来供外部系统调用,常用于不同平台、不同架构的系统之间互相调用。
XML-RPC(RPCXML Remote Procedure Call)是通过HTTP传输XML来实现远程过程调用的RPC,因为是基于HTTP、并且使用XML文本的方式传输命令和数据,所以兼容性更好,能够跨域不同的操作系统、不同的编程语言进行远程过程调用,凡有所得,必有所失,在兼容性好的同时速度也会慢下来。
一般一个RPC系统包括两个部分,RPC Client和RPC Server,Client向Server发送一个请求体为XML的HTTP POST请求,被调用的方法在Server端执行后将执行结果以XML格式返回,与平常的方法调用所不同就是接口“作用域”更大,并且多了一层数据的包装和转换(见本文最后的数据类型)。
2. XML-RPC实现
Apache XML-RPC是XML-RPC的一个Java实现,其底层是基于Helma的。
XML-RPC Server端
启动一个XML-RPC有两种方式,一种是集成在Web Servlet环境中,一般应用在Web环境;一种是启动独立的内嵌Web Server,内嵌的Web Server可以被嵌入到任意的Java应用中。
集成在Web Servlet
使用内嵌的Web Server
package org.cc11001100.xmlrpc; import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.server.XmlRpcStreamServer;
import org.apache.xmlrpc.webserver.WebServer; import java.io.IOException; public class XmlRpcServerDemo { public static void main(String[] args) throws IOException, XmlRpcException { WebServer webServer = new WebServer(8088); XmlRpcStreamServer xmlRpcServer = webServer.getXmlRpcServer(); // 调用映射相关配置
PropertyHandlerMapping propertyHandlerMapping = new PropertyHandlerMapping();
propertyHandlerMapping.load(Thread.currentThread().getContextClassLoader(), "xml-rpc.properties");
xmlRpcServer.setHandlerMapping(propertyHandlerMapping); // Server相关配置
XmlRpcServerConfigImpl xmlRpcServerConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
xmlRpcServerConfig.setEnabledForExceptions(true);
xmlRpcServerConfig.setContentLengthOptional(false); // 设置ACL
webServer.setParanoid(true);
webServer.acceptClient("127.0.0.1");
// webServer.denyClient("192.168.1.*"); webServer.start(); } }
xml-rpx.properties文件内容:
# XML-RPC配置文件 FooUtils = org.cc11001100.xmlrpc.FooUtils
XML-RPC Client端
客户端有两种调用方式,分别是同步调用和异步调用。
同步调用
package org.cc11001100.xmlrpc; import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList; public class XmlRpcClientDemo { public static void main(String[] args) throws XmlRpcException, MalformedURLException { final String RPC_SERVER = "http://127.0.0.1:8088"; XmlRpcClient xmlRpcClient = new XmlRpcClient(); // 客户端相关配置
XmlRpcClientConfigImpl xmlRpcClientConfig = new XmlRpcClientConfigImpl();
xmlRpcClientConfig.setServerURL(new URL(RPC_SERVER));
xmlRpcClient.setConfig(xmlRpcClientConfig); // 调用Server端方法
String result = (String) xmlRpcClient.execute("FooUtils.sayHello", new ArrayList());
System.out.println(result); } }
异步调用
比如某个被调用的远程过程执行的很慢,就可能会导致我们的程序处于假死状态,又或者我们只是调用它一下,对其返回结果并不是很关心,这个时候比较适合使用异步调用。
XML-RPC数据类型
| Tag | Java Type | Describe |
| <i4> | <int> | Integer/int | 4字节带符号整数值 |
| <boolean> | Boolean | 0==false, 1==true |
| <string> | String | 字符串 |
| <double> | Double | 双精度带符号浮点值 |
| <dateTime.iso8601> | java.util.Date | 日期/时间 |
| <base64> | byte[] | base64编码的二进制数据 |
| <struct> | java.util.Map | <K,V>对,key必须是string类型,value可以是任意其它类型,struct是可以递归使用的 |
| <array> | java.lang.Object[] | java.util.List | 对象数组 |
参考资料:
1. Apache XML-RPC http://ws.apache.org/xmlrpc/xmlrpc2/
2. JSON-RPC(使用JSON格式的RPC)
。
XML-RPC笔记的更多相关文章
- XML学习笔记
XML学习笔记 第一部分:XML简介 我们经常可以听到XML.HTML.XHTML这些语言,后两者比较清楚,一直不是很明白XML是什么,这里做一个总结. XML(eXtensible Markup L ...
- mybatis-config.xml简单笔记
mybatis-config.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- applicationContext.xml简单笔记
applicationContext.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <bean ...
- 什么是XML RPC?
# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...
- 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 ...
- delphi操作xml学习笔记 之一 入门必读
Delphi 对XML的支持---TXMLDocument类 Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写.可以利用TXMLDocum ...
- XML学习笔记7——XSD实例
在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改),也就是说,是 ...
- XML学习笔记6——XPath语言
在上一篇笔记的结尾,我们接触到了两个用于选择XML文档中特定范围的元素<selector>和<field>,这两个元素的取值都是XPath表达式,那么,什么是XPath呢?简单 ...
- XML学习笔记5——XSD复杂数据类型
和简单数据类型对应就是复杂数据类型了,XML元素的数据类型可以是简单数据类型,也可以是复杂数据类型,而XML属性的数据类型就只能是简单数据类型.这篇笔记,就来学习一下XSD中的复杂数据类型了. 1.定 ...
- XML学习笔记4——XSD简单数据类型
XSD提供了数据类型,并且支持自定义数据类型,但这一切都是建立在XSD内置数据类型和一套扩展内置数据类型的规则基础之上的,在这一篇笔记中,就来看看XSD中的数据类型. 1.XSD数据类型图 先看一下数 ...
随机推荐
- (转)Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...
- XHTML5 与 HTML 4.01的差异
在 HTML 4.01 中,td 元素的 "bgcolor"."height"."width" 以及 "nowrap" ...
- javascript之彻底理解this
彻底理解this,需要彻底理解函数 函数是复杂类型,存储在堆中. 函数是独立的, 对象中的方法只是对象中有个函数的引用 函数被调用时,调用者会像被调用者提供个上下文环境, 这个环境就是this 构造 ...
- 20个PHP程序性能优化的方法
1.数据库连接当使用完毕时应当关闭,不要使用长连接. 2.用@屏蔽错误消息的做法非常低效,极其低效. 3.使用选择分支语句(switch case)好于使用多个if,else if. 4.$row[' ...
- 网页显示百度地图 Jquery
cshtml: <div class="modal" style="visibility: hidden"> <div id="ma ...
- Spring Boot 初步小结
Spring Boot 是一种开发模式,不涉及任何新的技术 1.了解自动配置的原理 2.常用application.yml文件的配置项 3.Spring Boot 及 第三方提供的各种 starter ...
- 【bzoj4311】向量 线段树对时间分治+STL-vector维护凸包
题目描述 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 输入 第一行输入一个整数n, ...
- 【Java】编程技术经典书籍列表
这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统与网络.系统架构.算法与数据结构.前端开发.后端开发.移动开发.数据库.测试.项目与团队.程序员职业修炼.求职面试 和 编程相关的经典书籍. ...
- C++解析(6):函数参数的扩展
0.目录 1.函数参数的默认值 2.函数默认参数的规则 3.函数占位参数 4.小结 1.函数参数的默认值 C++可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 参数的 ...
- Remember the Word UVALive - 3942(dp+trie)
题意: 给S个不同的单词和一个长字符串 问将其分解为若干个单词有多少种方法(单词可重复使用) 解析: dp[i]表示在这个字符串中以某个位置i为起点的 的一段子字符串 则这个子字符串若存在某个前缀恰好 ...