Wednesday, December 5, 2007

XML-RPC

XML-RPC
Prin XML-RPC java capata niste functionalitati pe care nu le are prin RMI. XML-RPC e mult mai light decat RMI-ul din java, pasandu-se mai degraba parametri decat obiecte spre server.
Daca RMI necesita compilarea interfetelor pentru a se cunoaste metodele premise spre apelare, XML-RPC permite clientului sa specifice ce metode vrea sa foloseasca si se cauta handleri pentru aceste metode. Referinta la obiectele de pe server se fac prin nume si nu exista stub ca la RMI.

Exemplu de client-server care foloseste jarurile xmlrpc 3.1 de la
http://mirror.nyi.net/apache/ws/xmlrpc/binaries/ (Apache)

Clientul:

import java.net.URL;
import java.util.*;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class Client {
public static void main (String [] args) {
try {
XmlRpcClient server = new XmlRpcClient();
XmlRpcClientConfigImpl cnf = new XmlRpcClientConfigImpl();
cnf.setServerURL(new URL("http://localhost/RPC2"));
server.setConfig(cnf);

Vector params = new Vector();
params.addElement(new Integer(17));
params.addElement(new Integer(13));

Object result = server.execute("sample.sum", params);

int sum = ((Integer) result).intValue();
System.out.println("The sum is: "+ sum);
} catch (Exception exception) {
System.err.println("JavaClient: " + exception);
}
}
}


Serverul:

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 {

public Integer sum(int x, int y) {
return new Integer(x+y);
}

public static void main (String [] args) {
try {

System.out.println("starting XML-RPC Server...");
WebServer server = new WebServer(80);

PropertyHandlerMapping map = new PropertyHandlerMapping();
map.addHandler("sample", Server.class);


XmlRpcServerConfigImpl cnf = new XmlRpcServerConfigImpl();
XmlRpcServer srv = server.getXmlRpcServer();
srv.setConfig(cnf);
srv.setHandlerMapping(map);

server.start();

System.out.println("Started successfully.");
} catch (Exception exception) {
System.err.println("JavaServer: " + exception);
}
}
}

No comments: