====== XML-RPC: Távoli Eljáráshívás Egyszerűen ======
Az //**XML-RPC**// egy egyszerű régi protokoll, amely lehetővé teszi eltérő rendszerek közötti adatkommunikációt és a távoli eljáráshívást. Az XML-RPC használatával a fejlesztők úgy tudnak távoli eljárásokat használni egy távoli szerveren, mintha azok helyiek lennének.
==== Működése ====
- **Adatkódolás XML-ben:** Az XML-RPC az adatokat XML formátumban kódolja.
- **Kommunikáció HTTP-n keresztül:** Az adatcsere a kliens és a szerver között HTTP-n keresztül történik, ami biztosítja az adatátvitel egyszerűségét.
- **Strukturált Kérések és Válaszok:** Az XML-RPC összetett kéréseket használ, amelyek tartalmazzák a hívni kívánt eljárás nevét és az átadandó paramétereket, valamint a válaszokat, amelyek tartalmazzák a hívás eredményét vagy egy esetleges hibaüzenetet.
==== Előnyök ====
* **Egyszerűség:** Az XML-RPC egyszerűsége miatt könnyen implementálható és használható különböző nyelveken és platformokon.
* **Széleskörű Támogatottság:** Több programozási nyelv és keretrendszer is támogatja az XML-RPC-t, ami elősegíti a különböző rendszerek közötti integrációt.
* **Platformfüggetlenség:** Az XML és HTTP alkalmazásával az XML-RPC platformfüggetlen, lehetővé téve különböző operációs rendszerek és hardverek közötti kommunikációt.
==== Hátrányok ====
* **Biztonság:** Mivel az XML-RPC adatokat nyílt szöveges formában küldi, biztonsági rétegek (pl. HTTPS) alkalmazása ajánlott.
* **Teljesítmény:** Az XML formátum miatt az XML-RPC lehet lassabb.
==== Összefoglalás ====
Az XML-RPC egy hasznos eszköz különböző rendszerek közötti egyszerű adatcsere és távoli eljárások hívásához. Bár vannak biztonsági és teljesítménybeli problémák, de az egyszerűsége és széles körű támogatottsága miatt továbbra is népszerű.
==== Mintapélda ====
Töltsük le a XML-RPC csomagot: https://archive.apache.org/dist/ws/xmlrpc/v1.1/ ról az //xmlrpc-1.1.zip//-et
**1. Feladat**: Tekintsük át a mintakódot és Integer osztály helyett adjunk át összetett adattípust. Pl. class Person(name, age)....
**2. Feladat**: Írjuk meg a klienst Python-ban vagy valamilyen más nyelven
Kliens:
import java.util.Vector;
import org.apache.xmlrpc.XmlRpcClient;
public class Client {
public static void main (String [] args) {
try {
XmlRpcClient client = new XmlRpcClient("http://localhost/RPC2");
Vector params = new Vector();
params.addElement(new Integer(17));
params.addElement(new Integer(13));
Object result = client.execute("sample.sum", params);
int sum = ((Integer) result).intValue();
System.out.println("The sum is: "+ sum);
} catch (Exception exception) {
System.err.println("JavaClient: " + exception);
}
}
}
Server:
import org.apache.xmlrpc.WebServer;
public class Server {
// this function will be called
public Integer sum(int x, int y) {
return new Integer(x + y);
}
public static void main(String[] args) {
try {
WebServer server = new WebServer(80);
server.addHandler("sample", new Server());
server.start();
System.out.println("Server started.");
} catch (Exception exception) {
System.err.println("JavaServer: " + exception);
}
}
}