`
sunwinner
  • 浏览: 198508 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XML-RPCHello World

阅读更多

XML-RPC 是一种比 SOAP 更早的、简单的轻量级 Web 服务技术,是 XML Web 服务的鼻祖。它是一个用于远程过程调用(remote procedure call,RPC)的简单规范,这种调用使用 HTTP 作为传输协议,并使用 XML 词汇表作为消息有效负载。由于 XML-RPC 非常简单(整个规范打印出来还不到十页纸)。

XML-RPC 数据类型
 XML-RPC 标签                描述
< string >                         字符的一个序列
< int >                             有符号或无符号 32-bit 整数值
< boolean >                     true(1)或 false(0)
< double >                      有符号双精度浮点数
< dateTime.iso8601 >     日期和时间(当没有时区)
< base64 >                     一个 base64 编码的字符串
< array >                        一个数据类型序列的容器
< struct >                        一个关键字-值对的容器

XML-RPC之Hello World:

    处理器类:

package org.sun.rpc.handler;

public class HelloHandler {

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

    Server端:

package org.sun.rpc.server;


import java.io.IOException;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.WebServer;
import org.sun.rpc.handler.HelloHandler;

public class HelloServer {
    public static final int PORT = 8080;

    public static void main(String... args) throws XmlRpcException, IOException {

        System.out.println("Starting RPC Server Now ...");
        WebServer webServer = new WebServer(PORT);
        XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
        PropertyHandlerMapping handlerMapping = new PropertyHandlerMapping();
        handlerMapping.addHandler("hello", HelloHandler.class);
        xmlRpcServer.setHandlerMapping(handlerMapping);

        XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
        serverConfig.setEnabledForExtensions(true);
        serverConfig.setContentLengthOptional(false);

        webServer.start();
        System.out.println("Registered HelloHandler to \"hello\"");
        System.out.println("Now Accepting Requests ...");
    }
}

    Client端:

package org.sun.rpc.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;
import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory;

public class HelloClient {

    public static void main(String... args) throws MalformedURLException, XmlRpcException {

        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL("http://127.0.0.1:8080/"));
        XmlRpcClient client = new XmlRpcClient();
        client.setTransportFactory(new XmlRpcCommonsTransportFactory(client));
        client.setConfig(config);
        Object[] params = new Object[] { "Jacky" };
        String result = (String) client.execute("hello.sayHello", params);
        System.out.println("Response from server is: " + result);
    }
}

   代码使用apache-xmlrpc库。

底层的处理:

   sayHello()方法的请求实际被转换成一个HTTP调用,服务端解析XML文件后如果有匹配的方法将相应结果编码成XML文件。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics