[原创]xml-rpc入门例程及一个通用服务器

原创 2004年09月20日 11:04:00

一,准备过程

远程过程调用RPC,基于XML的传输方式,当然低层API,就不用我们操心了,但必须的软件还是要有的,先给个列表清单
JDK1.4.2 不用说了
Xerces解析器  到http://xml.apache.org/上去下载吧,
XML-RPC开发包, http://ws.apache.org/xmlrpc/上可以下得到

将以上所有的jar包放到开发环境的classpath中。

二,Hello World

XML-RPC如果想跑起来,最后需要四个组件,WEB server, 服务器类,处理类,客户类

1.WEB Server.

在我们已经下载的XML-RPC包中就有一个轻型级的WEB SERVER。
在程序中,我们只需要简单的用以下语句就可以启动。
//建立一个对象,传输一个端口
WebServer server = new WebServer(Integer.parseInt("8989"));     
//启动
server.start();

2.编写处理类

处理类相当RMI中的远程类,只不过在这里更轻量类,无须任何接口.

在这个类中包含一个或多个公有方法以供远程的客户端来调用。

public class HelloHandler {

public String sayHello(String name) {
return "Hello " + name;
}


}


3.服务器

负责调用以上代码来启动用服务器,同时还要将远程对象绑定到该服务器上。

import java.io.IOException;
//引入必须的包,当然你的xml-rpc的包应该在classpath中
import org.apache.xmlrpc.WebServer;
import org.apache.xmlrpc.XmlRpc;
public class HelloServer {
 /**
主方法
     */
    public static void main(String[] args) {
   
        try {
            // 使用Xerces的XML解析器
            XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
            // 给出提示,并在端8989上启动服务器
            System.out.println("Starting XML-RPC Server...");
            WebServer server = new WebServer(Integer.parseInt("8989"));     
            server.start();     
           
            // 将HelloHandler类的实例编定到WEB SERVER上,hello是该处理类的标识,在客户端调用时要用得到
            server.addHandler("hello", new HelloHandler());
            System.out.println(
                "Registered HelloHandler class to /"hello/"");        
              
         
                       
        } catch (ClassNotFoundException e) {
            System.out.println("Could not locate SAX Driver");
        } catch (Exception e) {
            System.out.println("Could not start server: " +
                e.getMessage());
        }                               
    }
}

4.客户端
根据“标识名.方法名“来定位远程的处理方法。

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Vector;

//导入必须的包
import org.apache.xmlrpc.XmlRpc;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;


public class HelloClient {
 

    public static void main(String args[]) {
  
      String yourname="liu xiaobai";
        try {
            // 使用 Apache Xerces SAX 解析器
            XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
           
            // 定位远程服务器,http://主机地址:端口号, 8989是上文服务器启动时用的端口
            XmlRpcClient client =
                new XmlRpcClient("http://localhost:8989/"); 
               
            // 创建调用请求,方法的参数列表如果一个Vector对象来存储。
            Vector params = new Vector();           
            params.addElement(yourname);
           
            // 发出请求,并返回结果,execute需要两个参数,第一个参数用“标识名.方法名”,第二参数是一个 刚刚建立的向量对象


            String result =
               (String)client.execute("hello.sayHello", params);
            System.out.println("Response from server: " + result);

       
         
        } catch (ClassNotFoundException e) {
            System.out.println("Could not locate SAX Driver");
        } catch (MalformedURLException e) {
            System.out.println(
                "Incorrect URL for XML-RPC server format: " +
                e.getMessage());
        } catch (XmlRpcException e) {
            System.out.println("XML-RPC Exception: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO Exception: " + e.getMessage());
        }       
    }
}

5,编译以上代码,要确保解析器,XMP-RPC开发包的jar文件在classpath中。

运行服务器

   java  HelloServer

运行客户端

  java HelloClient

 

6.一个通用的XML服务器

功能描述:通过配置文件来配置要加载的处理器

1.配置文件的名称及位置

名字:config.properties

类文件的根目录中,如果你类是默认包,那么就是同一个目录;如果类的包名是com.hello,那么该文件应该与com目录放在同一级中。

内容:

#标识名=类名
hello=javaxml2.HelloHandler


2.通用的源代码

import java.io.*;
import org.apache.xmlrpc.*;
import java.util.Properties;
import java.util.Enumeration;
import java.util.Hashtable;
public class MyLightXMLServer
{
   private WebServer server;
   private int port;
   private String configfile;
  
   public MyLightXMLServer(int port,String config)
   {
    this.port=port;
    this.configfile=config;
    }
    //启动服务器
    public void start() throws IOException,ClassNotFoundException,Exception
    {
     XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");
     System.out.println("starting up xml-rpc server...");
     server=new WebServer(port);
     //调用注册函数
     registerHandlers(this.getHandlers());
     server.start();
     }
    
    public void registerHandlers(Properties handlers) throws Exception
    {
     Enumeration enum=handlers.propertyNames();
     while(enum.hasMoreElements())
     {
      String temp=(String)enum.nextElement();
      String tempcls=(String)handlers.get(temp);
      Class cls=Class.forName(tempcls);
      server.addHandler(temp,cls.newInstance());
     
      }
     }
    
    public Properties getHandlers()
    {
     try
     {
       Properties properties=new Properties();
       properties.load(new FileInputStream(new File("config.properties")));
      
        return properties;
      }
     catch(Exception e)
     {
      e.printStackTrace();
      }
     return null;
     }
   
    public static void main(String args[])
    {
     String port="8989";
     String configfile="";
     MyLightXMLServer server=new MyLightXMLServer(Integer.parseInt(port),configfile);
     try
     {
      server.start();
      }
     catch(Exception e)
     {e.printStackTrace();}
     }
   
   
 }

将MyLightXMLServer .java编译并运行之后,该服务器会在配置文件中加载该处理器


然后可以直接执行HelloClient

java HelloClient

 

 

xml-rpc入门例程及一个通用服务器

一,准备过程远程过程调用RPC,基于XML的传输方式,当然低层API,就不用我们操心了,但必须的软件还是要有的,先给个列表清单JDK1.4.2 不用说了Xerces解析器  到http://xml.a...
  • luckyspring
  • luckyspring
  • 2007年05月29日 12:10
  • 1235

使用XMLRPC搭建WebService服务器

1、XMLRPC概念 xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分: 1.rpc client,用来向rpc...
  • baochao95
  • baochao95
  • 2016年11月27日 14:08
  • 649

一个很菜鸟的问题(原创)

我是一个很业余的程序员啦,在做一些基于中间件平台的web系统开发,很多同学都问我一个很菜鸟的问题:jsp,javascript,asp它们的区别在哪里。当然我的回答也许不是很准确啦,不过我们大家一起来...
  • squirrelling
  • squirrelling
  • 2005年03月05日 00:20
  • 688

XML-RPC入门

一、什么是XML-RPCxml-rpc 是一套允许运行在不同操作系统、不同环境的程序实现基于internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,xml作为传送信息的...
  • luanxj
  • luanxj
  • 2006年12月06日 13:21
  • 559

《OpenCV3编程入门》学习笔记之官方例程学习

OpenCV官方资料做的相当完善,其中官方例程就是非常好的参考资料。 1. 其在...\opencv\sources\samples\cpp\tutorial_code 路径下,如图: 这里以...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2016年11月06日 16:15
  • 1629

SOAP、XML-RPC 以及 REST 之间的区别是什么?

SOAP、XML-RPC 以及 REST 之间的区别是什么?SOAP,或者说简单对象访问协议是一个基于 XML 的对象调用协议,它最初是为通过 HTTP 进行通信的分布式应用而开发的。SOAP 定义了...
  • defonds
  • defonds
  • 2016年07月11日 15:55
  • 6200

python几个简单的入门程序

#分片示例 #对http://www.something.com形式的URL进行分割 url=input("Please enter a URL: ") domain=url[11:-4] print...
  • qq_16964363
  • qq_16964363
  • 2017年10月04日 15:59
  • 173

xml-rpc简单服务器调用

1. 创建一个会话bean。请参见Sun ONE应用服务器开发人员企业Java Bean指南,从而获得创建无状态会话bean的详细指导。 2. 创建一个执行查找EJB操作的web服务。以下代码示...
  • god123209
  • god123209
  • 2011年10月21日 11:08
  • 378

python xmlrpc中遇到的问题

在用python的xmlrpc时遇到了点问题,把它记录下来 在64位机子上,在传送对象时,出现"OverflowError, int exceeds XML-RPC limits" 解决方法:在/...
  • xiaoxiaoluo
  • xiaoxiaoluo
  • 2012年07月18日 10:57
  • 1269

用XML-RPC协议读写WordPress上的文章

WordPress提供了XML-RPC接口使得第三方的博客写作软件(如windows live writer等)可以与之通信来发布和修改博客。我们也可以在网站上使用这个接口做一些工作,例如:在网站首页...
  • adermxl
  • adermxl
  • 2012年11月15日 21:38
  • 1673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[原创]xml-rpc入门例程及一个通用服务器
举报原因:
原因补充:

(最多只允许输入30个字)