XML-RPC - Exemples

Pour démontrer XML-RPC, nous allons créer un serveur qui utilise Java pour traiter les messages XML-RPC, et nous allons créer un client Java pour appeler des procédures sur ce serveur.

Le côté Java de la conversation utilise Apache XML-RPC du projet Apache XML, disponible sur http://xml.apache.org/xmlrpc/

Mettez tous les fichiers .jar dans le chemin approprié et créons un client et un petit serveur XML-RPC en utilisant JAVA.

Client XML-RPC

Écrivons un client XML-RPC pour appeler une fonction appelée fonction somme . Cette fonction prend deux paramètres et renvoie leur somme.

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);
      }
   }
}

Voyons ce qui s'est passé dans l'exemple de client ci-dessus.

  • Le package Java org.apache.xmlrpc contient des classes pour les clients XML-RPC Java et le serveur XML-RPC, par exemple XmlRpcClient.

  • Le package java.util est nécessaire pour la classe Vector.

  • La fonction server.execute (...) envoie la requête au serveur. La procédure sum (17,13) est appelée sur le serveur comme s'il s'agissait d'une procédure locale. La valeur de retour d'un appel de procédure est toujours un Object.

  • Ici, "échantillon" désigne un gestionnaire défini dans le serveur.

  • Notez que tous les paramètres de l'appel de procédure sont toujours collectés dans un vecteur.

  • La classe XmlRpcClient est construite en spécifiant "l'adresse Web" de la machine serveur suivie de / RPC2.

    • localhost - signifie la machine locale

    • Vous pouvez spécifier un numéro IP au lieu de localhost, par exemple 194.80.215.219

    • Vous pouvez spécifier un nom de domaine comme xyz.dyndns.org

    • Vous pouvez spécifier un numéro de port avec le nom de domaine en tant que xyz.dyndns.org:8080. Le port par défaut est 80

  • Notez que le résultat de l'appel de procédure distante est toujours un objet et qu'il doit être transtypé dans le type approprié.

  • Lorsque des problèmes surviennent (pas de connexion, etc.), une exception est levée et elle doit être interceptée à l'aide de l' instruction catch .

En raison de l'appel ci-dessus, un client envoie le message suivant au serveur. Notez que cela est géré par server.execute (...) en interne et que vous n'avez rien à voir avec cela.

<?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>

Serveur XML-RPC

Voici le code source de XML-RPC Server écrit en Java. Il utilise les classes intégrées disponibles dans 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);
      }
   }
}

Voyons ce que nous avons fait dans l'exemple de serveur ci-dessus.

  • Le package org.apache.xmlrpc contient la classe WebServer pour une implémentation de serveur XML-RPC.

  • La somme de procédure appelée à distance est implémentée en tant que méthode publique dans une classe.

  • Une instance de la même classe de serveur est alors associée à un gestionnaire accessible par le client.

  • Le serveur est initialisé par le numéro de port (ici: 80).

  • Lorsque des problèmes surviennent, une exception est levée et doit être interceptée à l'aide de l' instruction catch .

Pour l'appel mentionné dans l'exemple de client donné, le serveur renvoie la réponse suivante au client:

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
   <params>
      <param>
         <value><int>30</int></value>
      </param>
   </params>
</methodResponse>

Maintenant que votre serveur est prêt, compilez-le et exécutez-le à votre invite comme suit:

C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)

Maintenant, pour tester la fonctionnalité, appelez ce serveur comme suit:

C:\ora\xmlrpc\java>java JavaClient
30