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

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
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文件内容:

1
2
3
# XML-RPC配置文件
         
FooUtils = org.cc11001100.xmlrpc.FooUtils

 

 

XML-RPC Client端

客户端有两种调用方式,分别是同步调用和异步调用。

同步调用

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
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 TypeDescribe
<i4> | <int>Integer/int4字节带符号整数值
<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   对象数组

 


https://www.cnblogs.com/cc11001100/p/7266387.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值