XML-RPC
Contenu: Caractéristiques,
Modèle de données, Requêtes,
Réponses, Erreurs, Exemple
TP1.
[Link], DGI/ESP/UCAD/SN
Janvier 2016 1
Caractéristiques
n XML-RPC est un protocole basé dur XML
pour l’échange d’information entre ordinateur
à travers le réseaux
n Peut être considéré comme l’une des
approches de Services Web les plus simples
permettant l’appel de procédures distantes
n Utilise le protocole HTTP pour passer de
l’information d’un client à un serveur
n Utilise un petit vocabulaire XML pour décrire
la nature des requêtes et des réponses
2
Caractéristiques
n Un client spécifie le nom d’une procédure et ses
paramètres dans une requête XML, et le serveur
retourne une faute ou une réponse dans une
réponse XML
n Les paramètres sont une simple liste de types et
de contenus
¨ Les
structures et les tableaux sont les typles les plus
complexes disponibles
n Pas de notion d’objets et aucun mécanisme
permettant d’inclure de l’information utilisant un
autre vocabulaire
n Publié en 1998 par UserLand Software qui l’a
initialement implémenté dans Frontier.
3
Caractéristiques
n Permettre de facilement intégrer des
environnements de traitement différents n’utilisant
pas des structures de données complexes
¨ Permettre,
par exemple, à Java de parler à du Perl,
Python, ASP, etc.
n Permettre, au sein d’un même environnement, de
connecter des programmes exploitant des
modèles de données différents
n Offrir aux intégrateur une opportunité d’utiliser un
vocabulaire standard pour l’échange d’information
4
Le modèle de données
n La spécification XML-RPC définit
¨ 6 types de données de base
n int ou i4, double, boolean, string,
dateTime.iso8601, base64
¨ et 2 types complexes
n array, struct
5
Le modèle de données
n Les 6 types de base
Types Valeurs Exemples
int ou i4 entiers sur 32 bit <int>27</int>
entre -2,147,483,648 <i4>27</i4>
et 2,147,483,647.
double nombres en virgule <double>27.31415</double>
flottante sur 64 bit <double>-1.1465</double>
boolean true (1) ou false (0) <boolean>1</boolean>
<boolean>0</boolean>
… … …
6
Le modèle de données
n Les 6 types de base
Types Valeurs Exemples
string Texte ASCII (certaines <string>Hello</string>
implém supporte <string>folks! @</string>
l’Unicode)
dateTime.iso8601 Dates au format <dateTime.iso8601>
ISO8601: 20021125T02:20:04
CCYYMMDDTHH:MM: </dateTime.iso8601>
SS <dateTime.iso8601>
20020104T17:27:30
</dateTime.iso8601>
base64 Information binaire <base64>
encodée en Base 64, SGVsbG8sIFdvcmxkIQ==
comme défini dans la </base64>
RFC 2045
7
Le modèle de données
n Les types de base
¨ Ils sont toujours contenus dans un élément
<value>
¨ Les string peuvent être contenues dans un
élément <value> en ométant l’élément
<string>
8
Le modèle de données
n Les tableaux
¨ Informations séquentielles
¨ Contenus dans un élément <array> qui
contien un élément <data> qui à son tour
contien un ensemble d’éléments <value> qui
eux contiennent les éléments du tableau
¨ Comme les autres éléments, un élément
<array> est contenu dans un élément <value>
9
Le modèle de données
n Un tableau de 4 string
<value>
<array>
<data>
<value><string>This </string></value>
<value><string>is </string></value>
<value><string>an </string></value>
<value><string>array.</string></value>
</data>
</array>
</value>
10
Le modèle de données
n Un tableau de 3 entiers
<value>
<array>
<data>
<value><int>7</int></value>
<value><int>1247</int></value>
<value><int>-91</int></value>
</data>
</array>
</value>
11
Le modèle de données
n Un tableau à valeurs de types mixtes
<value>
<array>
<data>
<value><boolean>1</boolean></value>
<value><string>ESP</string></value>
<value><int>7</int></value>
<value><double>1247.34578</double></value>
<value><int>-91</int></value>
</data>
</array>
</value>
12
Le modèle de données
n Un tableau multidimensionnel
<value>
<array>
<data>
<value>
<array>
<data>
<value><int>1</int></value>
<value><int>2</int></value>
</data>
</array>
</value>
<value>
<array>
<data>
<value><int>1</int></value>
<value><int>2</int></value>
</data>
</array>
</value>
</data>
</array>
</value> 13
Le modèle de données
n Une structure
<value>
<struct>
<member>
<name>givenName</name>
<value><string>Mamadou</string></value>
</member>
<member>
<name>familyName</name>
<value><string>Camara</string></value>
</member>
</struct>
</value>
14
Le format de requête XML-RPC
n Une requête XML-RPC est une combinaison
¨ de contenu XML
n Nom de la méthode appelée
n Paramètres
¨ et d’entêtes HTTP
n Pour la transmission de la requête sur le Web
n Chaque requête contient un document XML
¨ Racine:<methodCall>
¨ Nom de la méthode: <methodeName>
¨ Chaque paramètre décrit dans un élément
<param>, le tout dans un élément <params>
15
Le format de requête XML-RPC
n Exemple d’une requête d’appel d’une méthode
circleArea prenant comme paramètre le rayon de
type double, le contenu XML ressemble à
<?xml version="1.0"?>
<methodCall>
<methodName>circleArea</methodName>
<params>
<param><value><double>2.41</double></value> </param>
</params>
</methodCall>
16
Le format de requête XML-RPC
n Exemple d’une requête d’appel d’une méthode
circleArea prenant comme paramètre le rayon de type
double
n Le contenu XML ressemble à
<?xml version="1.0"?>
<methodCall>
<methodName>circleArea</methodName>
<params>
<param><value><double>2.41</double></value> </param>
</params>
</methodCall>
17
Le format de requête XML-RPC
n Les entêtes HTTP associées à ces requêtes
reflètent le contenu ainsi que le client
n Un template de base
POST /target HTTP 1.x
User-Agent: Identifier
Host: [Link]
Content-Type: text/xml
Content-Length: length of request in bytes
18
Le format de requête XML-RPC
n Exemple: si la méthode circleArea est disponible
sur un serveur écoutant sur /xmlrpc
n L’entête de la requête serait …
POST /xmlrpc HTTP 1.0
User-Agent: myXMLRPCClient/1.0
Host: [Link]
Content-Type: text/xml
Content-Length: 169
19
Le format de requête XML-RPC
n … et la requête globale serait alors
POST /xmlrpc HTTP 1.0
User-Agent: myXMLRPCClient/1.0
Host: [Link]
Content-Type: text/xml
Content-Length: 169
<?xml version="1.0"?>
<methodCall>
<methodName>circleArea</methodName>
<params>
<param><value><double>2.41</double></value> </param>
</params>
</methodCall>
20
Le format de réponse XML-RPC
n Lorsque que la réponse est un succès …
¨ Méthode trouvée, exécutée correctement, puis retourne un
résultat
n … alors elle ressemble à une requête
¨ Avec un remplacement de l’élément <methodCall> par un
élément <methodResponse> et une omission de l’élément
<methodName>
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><double>18.24668429131</double></value>
</param>
</params>
</methodResponse>
21
Le format de réponse XML-RPC
n Une réponse contient un seul paramètre
¨ Peut être un tableau ou une structure
¨ Il est obligatoire de retourner une valeur dans
une réponse
n Même si c’est un boolean mis à 1 pour indiquer un
succès côté serveur
22
Le format de réponse XML-RPC
n Une réponse contient des entêtes
¨ Toutes les réponses XML-RPC utilisent le
code de réponse 200 OK
n Entêtes types
HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
23
Le format de réponse XML-RPC
n La réponse complète
HTTP/1.1 200 OK
Date: Sat, 06 Oct 2001 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><double>18.24668429131</double></value>
</param>
</params>
</methodResponse>
24
Les fautes en XML-RPC
n Type de réponse en XML-RPC
¨ En cas de problème dans le traitement d’une requête
n L’élément methodResponse contient un sous-élément
<fault> à la place de <params>
n <fault> contient un seul sous-élément <value>
¨ pour indiquer l’erreur survenue
<?xml version="1.0"?>
<methodResponse>
<fault>
<value><string>No such method!</string></value>
</fault>
</methodResponse>
25
Un exemple en XML-RPC
n Création d’un serveur en Java pouvant
traiter des messages XML-RPC
n Création d’un client Java pour appeler des
procédures sur le serveur
n Implémentation Java utilisée
¨ Le projet Apache XML-RPC de Apache XML
n [Link]
n Autre lien de téléchargement des archives
nécessaires
¨ [Link]
[Link]
26
Un exemple en XML-RPC
n Le client
¨ Appel d’une fonction sum avec 2 paramètres
¨ Renvoie la somme
import [Link].*;
import [Link].*;
public class JavaClient {
public static void main (String [] args) {
try {
XmlRpcClient server = new XmlRpcClient("[Link]
Vector params = new Vector();
[Link](new Integer(17));
[Link](new Integer(13));
Object result = [Link]("[Link]", params);
int sum = ((Integer) result).intValue();
[Link]("The sum is: "+ sum);
}
catch (Exception exception) { [Link]("JavaClient: " + exception); }
}
}
27
Un exemple en XML-RPC
n L’objet XmlRpcClient est construit avec le nom du
serveur Web suivi de /RPC2
n L’appel à [Link](…) produit l’envoi au
serveur de la requête ci-après
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
<methodName>[Link]</methodName>
<params>
<param> <value><int>17</int></value> </param>
<param> <value><int>13</int></value> </param>
</params>
</methodCall>
28
Un exemple en XML-RPC
n Le serveur
import [Link].*;
public class JavaServer {
public Integer sum(int x, int y){ return new Integer(x+y); }
public static void main (String [] args){
try { [Link]("Attempting to start XML-RPC Server...");
WebServer server = new WebServer(80);
[Link]("sample", new JavaServer());
[Link]();
[Link]("Started successfully.");
[Link]("Accepting requests. (Halt program to stop.)");
}
catch (Exception exception){ [Link]("JavaServer: " + exception); }
}
}
29
Un exemple en XML-RPC
n La méthode sum est publique
n Une instance du serveur est associée à un
handler accessible au client
n Pour l’appel précédent, le serveur envoie la
réponse suivante
<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
<params>
<param> <value><int>30</int></value> </param>
</params>
</methodResponse>
30
TP1: à vous de jouer
n Compiler et exécuter les classes
précédentes de l’exemple
n Concevoir et réaliser le Chatroom (vu en
TP0) avec un XML-RPC en Java
¨ Ressources:
n Codes du TP0
n archives Java (fournies) correspondant à
l’implémentation Apache XML-RPC 2
31
Références bibliographiques
n Livre manuel sur XML-RPC.
¨ [Link]
n XML-RPC Scripting (site officiel)
¨ [Link] Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour
ouvrir l'image ou l'image est endommagée. Redémarrez l'ordinateur, puis ouvrez à
nouveau le fichier. Si le x rouge est toujours affiché, vous devrez peut-être supprimer
l'image avant de la réinsérer.
Impossible d'afficher l'image. Votre ordinateur manque peut-être de mémoire pour ouvrir l'image ou l'image est
endommagée. Redémarrez l'ordinateur, puis ouvrez à nouveau le fichier. Si le x rouge est toujours affiché, vous
devrez peut-être supprimer l'image avant de la réinsérer.
32