本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7593852
建立时间:2006年5月29日




[Apache(jakarta)][转载]xml-rpc入门例程及一个通用服务器
软件技术

lhwork 发表于 2006/12/28 15:56:15

一,准备过程远程过程调用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 HelloClient6.一个通用的XML服务器 功能描述:通过配置文件来配置要加载的处理器1.配置文件的名称及位置名字:config.properties 类文件的根目录中,如果你类是默认包,那么就是同一个目录;如果类的包名是com.hello,那么该文件应该与com目录放在同一级中。内容:#标识名=类名hello=javaxml2.HelloHandler2.通用的源代码 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编译并运行之后,该服务器会在配置文件中加载该处理器然后可以直接执行HelloClientjava HelloClient


阅读全文(2160) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.328 second(s), page refreshed 144769141 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号