XML-RPC - przykłady
Aby zademonstrować XML-RPC, utworzymy serwer, który używa Javy do przetwarzania komunikatów XML-RPC, i stworzymy klienta Java do wywoływania procedur na tym serwerze.
Strona Java konwersacji wykorzystuje Apache XML-RPC projektu Apache XML Project, dostępny pod adresem http://xml.apache.org/xmlrpc/
Umieść wszystkie pliki .jar w odpowiedniej ścieżce i stwórzmy jednego klienta i jeden mały serwer XML-RPC przy użyciu JAVA.
Klient XML-RPC
Napiszmy klienta XML-RPC, który wywoła funkcję o nazwie funkcja sum . Ta funkcja przyjmuje dwa parametry i zwraca ich sumę.
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);
}
}
}
Zobaczmy, co się stało w powyższym przykładowym kliencie.
Pakiet Java org.apache.xmlrpc zawiera klasy dla klientów XML-RPC Java i serwera XML-RPC, np. XmlRpcClient.
Pakiet java.util jest niezbędny dla klasy Vector.
Funkcja server.execute (...) wysyła żądanie do serwera. Suma procedur (17,13) jest wywoływana na serwerze tak, jakby była to procedura lokalna. Zwracaną wartością wywołania procedury jest zawsze Object.
Tutaj „sample” oznacza procedurę obsługi zdefiniowaną na serwerze.
Zauważ, że wszystkie parametry wywołania procedury są zawsze gromadzone w wektorze.
Klasa XmlRpcClient jest konstruowana przez określenie „adresu internetowego” serwera, po którym następuje / RPC2.
localhost - oznacza komputer lokalny
Możesz podać numer IP zamiast localhost, np. 194.80.215.219
Możesz określić nazwę domeny, na przykład xyz.dyndns.org
Możesz określić numer portu wraz z nazwą domeny jako xyz.dyndns.org:8080. Domyślny port to 80
Zauważ, że wynikiem zdalnego wywołania procedury jest zawsze Object i musi on zostać rzutowany na odpowiedni typ.
W przypadku wystąpienia problemów (brak połączenia itp.) Zgłaszany jest wyjątek i musi zostać przechwycony za pomocą instrukcji catch .
W związku z powyższym wezwaniem klient wysyła do serwera następującą wiadomość. Zauważ, że jest to obsługiwane wewnętrznie przez server.execute (...) i nie masz z tym nic wspólnego.
<?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>
Serwer XML-RPC
Poniżej znajduje się kod źródłowy serwera XML-RPC napisany w języku Java. Wykorzystuje wbudowane klasy dostępne w org.apache.xmlrpc. *
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);
}
}
}
Zobaczmy, co zrobiliśmy na powyższym przykładowym serwerze.
Pakiet org.apache.xmlrpc zawiera klasę WebServer dla implementacji serwera XML-RPC.
Suma procedury, która jest wywoływana zdalnie, jest implementowana jako metoda publiczna w klasie.
Instancja tej samej klasy serwera jest następnie kojarzona z procedurą obsługi, do której klient ma dostęp.
Serwer jest inicjowany przez numer portu (tutaj: 80).
Gdy występują problemy, zgłaszany jest wyjątek i musi zostać przechwycony za pomocą instrukcji catch .
W przypadku wywołania wymienionego w podanym przykładowym kliencie, serwer odsyła klientowi następującą odpowiedź:
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param>
<value><int>30</int></value>
</param>
</params>
</methodResponse>
Teraz twój serwer jest gotowy, więc skompiluj i uruchom go po wyświetleniu monitu w następujący sposób:
C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)
Teraz, aby przetestować funkcjonalność, wywołaj ten serwer w następujący sposób:
C:\ora\xmlrpc\java>java JavaClient
30