美文网首页
基于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案例

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