Ministère de l’enseignement Supérieur, de la Recherche sci entifique et de la Technologie
Université Virtuelle de Tunis
Développement Orienté Services
SOAP
Université Virtuelle de Tunis Développement Orienté Services SOAP
1. Introduction
1. Définition
SOAP (Simple Object Access Protocol) est un protocole d’invocation de méthodes sur des services distants. Basé sur XML, SOAP est un format de communication pour assurer la communication de machine à machine. Le protocole permet d’appeler une méthode RPC (Remote Procedure Call) et d’envoyer des messages aux machines distantes via HTTP. Ce protocole est très bien adapté à l’utilisation des services web car il permet de fournir au client une grande quantité d’informations récupérées sur un réseau de serveurs tiers.
La version actuelle de SOAP est 1.2, disponible sur http://www.w3.org/TR/soap12/.
2. Comparaison avec d’autres technologies
SOAP ressemble beaucoup en termes de fonctionnalités à des protocoles comme IIOP pour CORBA, ORPC pour DCOM, ou Java RMI (Java Remoted Invocation) pour JAVA.
CORBA est SOAP sont deux spécifications ouvertes, sauf que CORBA permet de définir une architecture complète distribuée, alors que SOAP ne décrit que la structure des messages à transférer. De plus, CORBA peut enregistrer l’état d’un objet et le rendre persistent, ce que SOAP ne le permet pas.
Java RMI est une implémentation spécifique de RPC, où le serveur et le client doivent impérativement fonctionner avec Java, ce qui ne résout pas le problème d’interopérabilité comme le fait SOAP, qui est indépendant du langage de programmation. Cependant Java RMI tire sa force des fonctionnalités de sécurité héritée par Java, ce que SOAP ne possède pas, il est aussi possible de sérialiser et désérialiser les objets grâce aussi à Java.
DCOM est un protocole propriétaire de Microsoft, donc fonctionnant seulement sur des systèmes d’exploitation de type Windows. Il est basé sur des COM (Component Object Model), qui fournissent un ensemble d’interfaces permettant aux clients et aux serveurs de communiquer en échangeant des données binaires, alors que SOAP utilise un simple texte.
Le tableau suivant montre les différentes technologies et protocoles utilisés pas SOAP et ses rivaux :
Défini par
Plate-forme
Langage de Développement
Langage de Définition
Transport
RMI
SUN
Multi
Java
DCOM
CORBA
SOAP
Microsoft
Win32
C++, VB, VJ
OMG
Multi
Multi
W3C
Multi
Publicité
Multi
Java
ODL
IDL
WSDL
TCP, HTTP, IIOP
IP/IPX
GIOP, IIOP
HTTP, SMTP, JMS
1
Université Virtuelle de Tunis Développement Orienté Services SOAP
Transaction
Non
Sécurité
SSL, JAAS
Oui
?
Oui
SSL
Oui
SSL
2. Fonctionnement
Les messages SOAP sont utilisés pour envoyer (requête) et recevoir (réponse) des informations d’un récepteur. Un message SOAP peut être transmis à plusieurs récepteurs intermédiaires avant d’être reçu par le récepteur final (~chaîne de responsabilité)
Le format SOAP peut contenir des messages spécifiques correspondant à des erreurs identifiées par le récepteur. Un message SOAP est véhiculé vers le récepteur en utilisant un protocole de transport (HTTP, SMTP, …).
Annuaire UDDI
A
Entreprise interroge l’annuaire UDDI pour obtenir une liste de Services Web répondant à ses exigences
Entreprise B publie ses qu’elle Services Web implémente dans un annuaire UDDI (transmet les WSDLs)
A télécharge les WSDL
A envoie des messages SOPA pour invoquer les services de B
Entreprise A Consommatrice de Services WEB
B répond en retournant des messages SOAP conformes aux WSDL Services Web
Entreprise B Fournisseur de
Exemple : Appeler les opérations du service HelloWorld
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hel="http://helloworldwebservice.isi.tn/"> <soapenv:Header/> <soapenv:Body> <hel:makeHelloWorld> <value>Mickael BARON</value> </hel:makeHelloWorld> </soapenv:Body> </soapenv:Envelope>
Publicité
Le message SOAP ci-dessus permet d’appeler l’opération makeHelloWorld contenant un paramètre value.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hel="http://helloworldwebservice.isi.tn/"> <soapenv:Header/>
2
Université Virtuelle de Tunis Développement Orienté Services SOAP <soapenv:Body> <hel:simpleHelloWorld/> </soapenv:Body> </soapenv:Envelope>
Le message SOAP ci-dessus permet d’appeler l’opération simpleHelloWorld ne contenant pas de paramètre.
Exemple : Message retour de l’appel des opérations du service HelloWorld.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>
<ns2:makeHelloWorldResponse xmlns:ns2="http://helloworldwebservice.isi.tn/"> <helloWorldResult>Hello World to Mickael BARON</helloWorldResult> </ns2:makeHelloWorldResponse> </soapenv:Body> </soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>
<ns2:simpleHelloWorldResponse xmlns:ns2="http://helloworldwebservice.isi.tn/"> <helloWorldResult>Hello World to everybody</helloWorldResult> </ns2:simpleHelloWorldResponse> </soapenv:Body> </soapenv:Envelope>
3. Structure d’un message SOAP
Un message SOAP est un document XML constitué d’une enveloppe compose de deux parties : une entête (header) qui peut être facultatif et un corps.
3
Université Virtuelle de Tunis Développement Orienté Services SOAP
Entête SOAP (header) facultatif
Corps du message SOAP ( body )
Enveloppe SOAP
1. Enveloppe
la racine d’un message SOAP, qui est
L’enveloppe est la balise <soapenv:Enveloppe>. La spécification impose que la balise et les sous balises soient explicitement associées à un namespace. Deux namespaces sont définies par la spécification :
identifiée par
- SOAP-ENV ou soapenv : http://schemas.xmlsoap.org/soap/envelope/ - SOAP-ENC : http://schemas.xmlsoap.org/soap/encoding/
La requête et la réponse ont la même structure, comme le montre l’exemple qui suit :
Requête
<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope">
<SOAP-ENV:Body>
<!-- Contenu de la Requête -->
</SOAP-ENV:Body> </SOAP-ENV:Envelope>
<SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope">
Réponse
<SOAP-ENV:Body> <!-- Contenu de la Réponse --> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
2. Entête SOAP
L’en-tête d’un message SOAP est utilisé pour transmettre des informations supplémentaires sur ce même message. Elle est défini par la balise <SOAP-ENV:Header> en se plaçant avant le corps. Elle peut être facultative.
Publicité
L’entête est utilisée afin de transmettre des informations authentifiant l’émetteur, de décrire le contexte d’une transaction et pour certains protocoles de transport (FTP par exemple), pour identifier l’émetteur du message.
4
Université Virtuelle de Tunis Développement Orienté Services SOAP Un message SOAP peut transiter par plusieurs intermédiaires avant le traitement par le récepteur final, grâce au pattern « Chaîne de responsabilité » et à une zone lue et écrite par les intermédiaires.
3. Corps SOAP
Le corps d’un message SOAP est constitué par un élément <SOAP-ENV:Body>. Cet élément peut contenir soit une erreur en réponse à une requête (élément <SOAP-ENV:Fault>) ou des informations adressées au destinataire du message SOAP en respectant un encodage déterminé. L’encodage des informations est précisé par les bindings du document WSDL avec les deux attributs : style (Document et RPC) et use (encoded et litteral). L’objectif visé par SOAP a été de fournir un mécanisme standardisé pour l’appel de procédures distant (RPC). De ce fait les informations adressées au destinataire de messages SOAP doivent respecter un certain nombre de convention :
- Appel d’une opération représentée par une struct.
- Le nom de la structure est celui de l’opération à appeler.
- Chaque paramètre de l’opération est défini comme un sous élément de la structure. - Si un paramètre est un type complexe (Person par exemple) une nouvelle structure est
définie contenant à son tour des sous éléments …
Le résultat est également représenté par une struct. Le nom de la structure est celui de l’opération suivi de Response. Les paramètres sont également structurés.
Exemple : corps de messages SOAP pour appeler des opérations du service Web Notebook
Message SOAP pour appeler l’opération addPersonWithComplexType utilisant un paramètre de type complexe définie par une structure (newPerson)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://notebookwebservice.isi.tn/"> <soapenv:Header/> <soapenv:Body> <not:addPersonWithComplexType> <newPerson> <address>Tunis</address> <birthyear>17081976</birthyear> <name>Toto Titi</name> </newPerson> </not:addPersonWithComplexType> </soapenv:Body> </soapenv:Envelope>
Message SOAP pour appeler l’opération addPersonWithSimpleType utilisant trois paramètres de type simple.
<soapenv:Envelope
5
Université Virtuelle de Tunis Développement Orienté Services SOAP xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://notebookwebservice.isi.tn/"> <soapenv:Header/> <soapenv:Body> <not:addPersonWithSimpleType> <name>Toto Titi</name> <address>Poitiers</address> <birthyear>17081976</birthyear> </not:addPersonWithSimpleType> </soapenv:Body> </soapenv:Envelope>
Exemple : corps de messages SOAP pour le résultat des opérations du service Web Notebook
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns2:addPersonWithComplexTypeResponse xmlns:ns2="http://notebookwebservice.isi.tn/"> <addPersonWithComplexTypeResult>true</addPersonWithComplexTypeResult> </ns2:addPersonWithComplexTypeResponse> </soapenv:Body> </soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns2:addPersonWithSimpleTypeResponse xmlns:ns2="http://notebookwebservice.isi.tn/"> <addPersonWithSimpleTypeResult>true</addPersonWithSimpleTypeResult> </ns2:addPersonWithSimpleTypeResponse> </soapenv:Body> </soapenv:Envelope>
Pour les deux réponses, les paramètres de sorties suivent la même convention que les paramètres en entrée.
Transport de SOAP via http
SOAP utilise un protocole de transport pour véhiculer les messages SOAP de l’émetteur au récepteur (HTTP, SMTP, JMS, FTP, POP3 et NNTP). Le modèle requête/réponse de SOAP convient parfaitement au modèle requête/réponse http.
6
Université Virtuelle de Tunis Développement Orienté Services SOAP
Entête HTTP Corps HTTP
Corps HTTP
Entête SOAP (header) facultatif
Corps du message SOAP ( body )
Enveloppe SOAP
Requête / Réponse HTTP
7