美文网首页
基于Java的XML-RPC案例

基于Java的XML-RPC案例

作者: JohnYuCN | 来源:发表于2021-01-29 21:59 被阅读0次

一、介绍

相较于Java RMI机制,XML-RPC机制出现了以下的变化(具体参看Java RMI 实现):

  1. 通信是基于XML数据,而不是RMI专用协议,使用跨平台调用成为可能。
  2. 基于Http协议,而不是长连接方式。


    XML RPC 原理图

二、基于org.apache.xmlrpc 的案例实现:

  1. 库引入
dependencies {
    compile group: 'org.apache.xmlrpc', name: 'xmlrpc-server', version: '3.1.3'
    compile group: 'org.apache.xmlrpc', name: 'xmlrpc-client', version: '3.1.3'
}
  1. 服务类:
package service;
 
public class Calculator {
 
    public int add(int i1, int i2) {
        return i1 + i2;
    }
 
    public int subtract(int i1, int i2) {
        return i1 - i2;
    }
}
  1. 类路径下的 MyHandlers.properties
Calculator=service.Calculator
  1. RPC Server
package webserver;
 
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.WebServer;
 
public class Server {
    private static final int port = 8080;   
    
    public static void main(String[] args) throws Exception {   
        WebServer webServer = new WebServer(port);   
         
        XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();   
         
        PropertyHandlerMapping phm = new PropertyHandlerMapping();
        
        phm.load(Thread.currentThread().getContextClassLoader(), "MyHandlers.properties");
        //这也是一种指定方案
        //phm.addHandler("Calculator", service.Calculator.class);

        xmlRpcServer.setHandlerMapping(phm);   
         
        XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();   
        serverConfig.setEnabledForExtensions(true);   
        serverConfig.setContentLengthOptional(false);   
 
        webServer.start();   
    }   
 
}
  1. 客户端:
package xmlrpc.client;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
public class ClientTest {
 
    public static void main(String[] args) {
        try {
            XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
            config.setServerURL(new URL("http://127.0.0.1:8080/XML_RPC_Server/service"));
            
            XmlRpcClient client = new XmlRpcClient();
            client.setConfig(config);
            
            Object[] params = new Object[] { 32, 9 };
            Integer result = (Integer) client.execute("Calculator.add", params);
            
            System.out.printf("两数相加的结果是:%d\n",result);
            
            result = (Integer) client.execute("Calculator.subtract", params);

            System.out.printf("两数相减的结果是:%d",result);
 
        } catch (XmlRpcException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
 
    }
}

*我们可以看到,客户端除了“类名,方法名”以外,没有与服务端有任何藕合!!!

相关文章

  • 基于Java的XML-RPC案例

    一、介绍 相较于Java RMI机制,XML-RPC机制出现了以下的变化(具体参看Java RMI 实现[http...

  • Spark之RDD和Dataset转换

    版本 基于Spark 2.0+以上版本。scala ,java案例不多,记录下java代码进行RDD和datase...

  • Python RPC 之 xml-rpc

    xml-rpc 简介: xml-rpc 的全称是 XML Remote Procedure Call,即XML远程...

  • 《Web Api的设计与开发》笔记01

    ch01 WebAPI的定义 基于SOAP及XML-RPC,也是通过HTTP协议使用XML数据格式来完成交互web...

  • RxJava 2.x知识笔记

    观察者模式的运用 传统的Java观察者模式可以参考此篇博客:Java观察者模式案例简析 RxJava 是基于Jav...

  • SpringMVC

    SpringMVC是一种基于Java实现NVC模型的轻量级Web框架 一、SpringMVC入门案例 1、在pom...

  • 记一次python XML-RPC简单学习

    小白刚入门,如有不足之处请多指教。谢谢! 今天简单记录一下XML-RPC 的学习过程。 1.什么是XML-RPC?...

  • Istio Service Mesh 教程

    本文是 Istio 管理 Java 微服务的案例教程,使用的所有工具和软件全部基于开源方案,替换了redhat-d...

  • python3库--xmlrpc

    XML-RPC是一个通过HTTP协议执行远RPC调用的轻重级方法。一些XML-RPC客户端与服务端的实现库现在被整...

  • Java网络编程模型(一)

    本系列主要介绍java网络编程的模型,沿着模型的进化线结合案例分析学习。本文主要介绍基于OIO的网络编程模型。 基...

网友评论

      本文标题:基于Java的XML-RPC案例

      本文链接:https://www.haomeiwen.com/subject/xamctltx.html