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