XML-RPC - Beispiele
Um XML-RPC zu demonstrieren, erstellen wir einen Server, der Java zum Verarbeiten von XML-RPC-Nachrichten verwendet, und erstellen einen Java-Client zum Aufrufen von Prozeduren auf diesem Server.
Die Java-Seite der Konversation verwendet den Apache XML-RPC des Apache XML-Projekts, der unter verfügbar ist http://xml.apache.org/xmlrpc/
Legen Sie alle JAR-Dateien in den entsprechenden Pfad und lassen Sie uns mit JAVA einen Client und einen kleinen XML-RPC-Server erstellen.
XML-RPC-Client
Schreiben wir einen XML-RPC-Client, um eine Funktion namens Summenfunktion aufzurufen . Diese Funktion verwendet zwei Parameter und gibt deren Summe zurück.
import java.util.*;
import org.apache.xmlrpc.*;
public class JavaClient {
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 = 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);
}
}
}
Lassen Sie uns sehen, was im obigen Beispielclient passiert ist.
Das Java-Paket org.apache.xmlrpc enthält Klassen für XML-RPC-Java-Clients und XML-RPC-Server, z. B. XmlRpcClient.
Das Paket java.util ist für die Vector-Klasse erforderlich.
Die Funktion server.execute (...) sendet die Anfrage an den Server. Die Prozedursumme (17,13) wird auf dem Server aufgerufen, als wäre es eine lokale Prozedur. Der Rückgabewert eines Prozeduraufrufs ist immer ein Objekt.
Hier bezeichnet "sample" einen Handler, der auf dem Server definiert ist.
Beachten Sie, dass alle Parameter des Prozeduraufrufs immer in einem Vektor erfasst werden.
Die XmlRpcClient-Klasse wird durch Angabe der "Webadresse" des Servercomputers gefolgt von / RPC2 erstellt.
localhost - bezeichnet den lokalen Computer
Sie können anstelle von localhost eine IP-Nummer angeben, z. B. 194.80.215.219
Sie können einen Domainnamen wie xyz.dyndns.org angeben
Sie können eine Portnummer zusammen mit dem Domainnamen als xyz.dyndns.org:8080 angeben. Der Standardport ist 80
Beachten Sie, dass das Ergebnis des Remoteprozeduraufrufs immer ein Objekt ist und in den entsprechenden Typ umgewandelt werden muss.
Wenn Probleme auftreten (keine Verbindung usw.), wird eine Ausnahme ausgelöst und muss mit der catch- Anweisung abgefangen werden .
Aufgrund des obigen Aufrufs sendet ein Client die folgende Nachricht an den Server. Beachten Sie, dass dies intern von server.execute (...) erledigt wird und Sie nichts damit zu tun haben.
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
<methodName>sample.sum</methodName>
<params>
<param>
<value><int>17</int></value>
</param>
<param>
<value><int>13</int></value>
</param>
</params>
</methodCall>
XML-RPC-Server
Es folgt der Quellcode von XML-RPC Server, der in Java geschrieben wurde. Es verwendet integrierte Klassen, die in org.apache.xmlrpc verfügbar sind. *
import org.apache.xmlrpc.*;
public class JavaServer {
public Integer sum(int x, int y){
return new Integer(x+y);
}
public static void main (String [] args){
try {
System.out.println("Attempting to start XML-RPC Server...");
WebServer server = new WebServer(80);
server.addHandler("sample", new JavaServer());
server.start();
System.out.println("Started successfully.");
System.out.println("Accepting requests. (Halt program to stop.)");
} catch (Exception exception){
System.err.println("JavaServer: " + exception);
}
}
}
Lassen Sie uns sehen, was wir auf dem obigen Beispielserver getan haben.
Das Paket org.apache.xmlrpc enthält die Klasse WebServer für eine XML-RPC Server-Implementierung.
Die Prozedur Summe , die remote aufgerufen wird , wird als eine öffentliche Methode in einer Klasse implementiert.
Eine Instanz derselben Serverklasse wird dann einem Handler zugeordnet, auf den der Client zugreifen kann.
Der Server wird durch die Portnummer initialisiert (hier: 80).
Wenn Probleme auftreten, wird eine Ausnahme ausgelöst und muss mit der catch- Anweisung abgefangen werden .
Für den im angegebenen Beispielclient genannten Aufruf sendet der Server die folgende Antwort an den Client zurück:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value><int>30</int></value>
</param>
</params>
</methodResponse>
Jetzt ist Ihr Server bereit. Kompilieren Sie ihn und führen Sie ihn an Ihrer Eingabeaufforderung wie folgt aus:
C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)
Um die Funktionalität zu testen, rufen Sie diesen Server wie folgt an:
C:\ora\xmlrpc\java>java JavaClient
30