Ca şi în folosirea SAX, DOM sau JDOM, nu e nevoie să reinventăm roata. O sumedenie de pachete sunt puse la dispoziţia programatorului. Centru de informare pentru XML – RPC se află la http://www.xmlrpc.com/. Aici putem gasi informaţii despre tipurile de date suportate, tutoriale, descrieri de clase şi pachete Java, precum şi alte informaţii utile.
Distribuţia core este formată din 13 clase, toate aflate în pachetul helma.xmlmrpc. Aceste pot fi folosite prin intermediul jar-ului lib/xmrpc.jar.
Scurtă descriere
- XmlRpc Clasă core care permite apeluri de metode ale handler-ilor de către server-ul XML-RPC
- XmlRpcClient Clasă client pentru comunicaţia RPC peste HTTP, incluzând proxy şi suport pentru cookies.
- XmlRpcClientLite Clasă client pentru comunicaţia RPC peste HTTP nu include proxy şi cookie.
- XmlRpcServer Clasă pentru server care primeşte apeluri RPC.
- XmlRpcServlet Furnizează aceleaşi funcţionalităţi ca si XmlRpcServer într-un format servlet.
- XmlRpcProxyServlet Se comportă ca un server XML RPC proxy
- XmlRpcHandler Interfaţa de bază pentru controlul interacţiunilor XML RPC pentru
- AuthenticatedXmlRpcHandler La fel ca XmlRpcHandler, dar permite autentificare.
- Base64 Encodează şi decodează date din Bytes şi baza 64.
- Benchmark Contorizează timpul pentru interacţiunile RPC pentru un driver specific SAX.
- WebServer Server HTTP pentru XML –RPC.
Vom scrie o clasă cu o metodă pe care o vom invoca de la distantă. De obicei este numită handler. Atenţie la denumiri ce pot crea confuzii: un XML – RPC handler este o metodă (sau un set de metode) care primeşte o cerere XML – RPC, îi decodează conţinutul şi trimit acea cerere către o metodă sau o clasă (de obicei cea potrivită :). Un handler de răspuns sau, mai simplu spus, un handler este orice metodă sau clasă care poate fi invocată de un XML – RPC handler.
package javaxml2;
public class HelloHandler {
public String saySaTraiesti(String pseudonim) {
return "Sa traiesti " + pseudonim;
}
}
Odată ce avem handler-ul, trebuie să creăm un program care să ne pornească sever-ul XML – RPC, să asculte cererile şi să le trimită către handler-ul corect (ca să ne mearga RPC-ul, nu?). Înainte ca server-ul să fie pornit, trebuie specificat driver-ul SAX pentru parsare şi encodare XML. Driver-ul default este James Clark’s XP parser (http://www.jclark.com/).În acest expemplu, folosim Apache Xerxes specificând clasa ce implementează parser-ul Sax (metoda setDriver()). Creăm listener-ul HTTP care va servi cererile XML-RPC şi înregistrăm clasele handler care sunt disponibile pentru apelul la distanţă.
package javaxml2;
import java.io.IOException;
import helma.xmlrpc.WebServer;
import helma.xmlrpc.XmlRpc;
public class HelloServer {
public static void main(String[] args) {
if (args.length <>
System.out.println("Mod de folosire : java javaxml2.HelloServer [port]");
System.exit(-1);
}
try {
// Use the Apache Xerces SAX Driver
XmlRpc.setDriver("org.
// Pornim server-ul
System.out.println("
// Specificam port-ul
WebServer server = new WebServer(Integer.parseInt(
} catch (ClassNotFoundException e) {
System.out.println("N-
} catch (IOException e) {
System.out.println("
e.getMessage( ));
}
}
}
Acum va trebui să creăm clientul care să apeleze metoda saySaTraiesti() de la distanţă. Folosim clasa helma.xmlrpc.XmlRpcClient. Encodarea cererii se face (surpriză?!?) cu ajutorului driver-ului SAX.package javaxml2;
import java.io.IOException;
import java.net.
import java.util.Vector;
import helma.xmlrpc.XmlRpc;
import helma.xmlrpc.XmlRpcClient;
import helma.xmlrpc.XmlRpcException;
public class HelloClient {
public static void main(String args[]) {
if (args.length <>
System.out.println(
"Mod de folosire: java HelloClient [pseudonim]");
System.exit(-1);
}
try {
// Folosim driver-ul Appache
XmlRpc.setDriver("org.
// Specificam clientul
XmlRpcClient client =
new XmlRpcClient("http://
// creaza cererea
Vector params = new Vector( );
params. addElement(args[
// cererea si printam raspunsul
String result = (String)client.execute("Hello.
System.out.println("
} catch (ClassNotFoundException e) {
System.out.println("N-
} catch (MalformedURLException e) {
System.out.println(
"URL nu e corect: " +
e.getMessage( ));
} catch (XmlRpcException e) {
System.out.println("XML-
} catch (IOException e) {
System.out.println("IO Exception: " + e.getMessage( ));
}
}
}


Niciun comentariu:
Trimiteți un comentariu