norme SOAP
norme W3C: http://www.w3.org/TR/SOAP/
1. Exemples de messages SOAP
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doSpellingSuggestion xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<key>cmYEU..................6aXqlf</key>
<phrase>gemany</phrase>
</ns1:doSpellingSuggestion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doSpellingSuggestionResponse xmlns:ns1="urn:GoogleSearch"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="xsd:string">germany</return>
</ns1:doSpellingSuggestionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2. la structure du message SOAP
- une enveloppe
- racine du document XML
- spécifiant le Namespace SOAP-ENV http://schemas.xmlsoap.org/soap/envelope/
- souvent la sérialisation attribut encodingStyle est
celle de Soap http://schemas.xmlsoap.org/soap/encoding/
- une en-tête optionnelle : Header
- un corps Body
3. le Header optionnel
- indications comme : transactions, session, ...
- l'attribut mustUnderstand :
- si égal à 1, indique que le header est à
prendre en compte au niveau de l'application qui traite le contenu
Soap
- sinon absent ou = à 0
4. le Body
- contient les données pour l'application réceptrice
- utilise l'encodage des types selon l'encodingStyle et le
Schema xsd "http://www.w3.org/1999/XMLSchema
- peut contenir 1 ou 0 élément FAULT
- spécifie les codes d'erreurs, voire plus !
- en particulier : en réponse à une requête
mal formulée
- exemple :
<SOAP-ENV:Body>
<tns:getTemp xmlns:tns="urn:xmethods-Temperature"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<zipcode>55406</zip>
</tns:getTemp>
</SOAP-ENV:Body>
--- PRODUIT LA REPONSE :-----
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>parsing error: org.xml.sax.SAXParseException: The element type
"zipcode" must be terminated by the matching end-tag
"</zipcode>".</faultstring>
<faultactor>/soap/servlet/rpcrouter</faultactor>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
5. l'encodingStyle de Soap
- types simples : int, float, string, ...
- types composés :
- struct exemple :
<paireDentier>
<premier>2</premier>
<second>3</second>
</paireDentier>
- array exemple :
<paireDentier SOAP-ENC:arrayType="xsd:int[2]">
<number>2</number>
<number>3</number>
</paireDentier>
6. RPC encapsulé dans Soap
- l'appel de la méthode est un struct
- son nom peut être celui de la méthode
- chaque "accessor" du struct est un parametre (in
ou in/out) apparaissant dans le même ordre
que la signature de la méthode.
- le nom de l'accessor correspond au nom du parametre
- correspondance des types
- le résultat de l'appel de la méthode est un
struct
- son nom peut être celui de la méthode suivi
de "Response"
- le premier accessor est la valeur retournée (de nom
quelconque)
- les autres accessors"du struct sont les parametres "in/out"
de la méthodes :
- ils apparaissant dans le même ordre que la signaturede
la méthode.
- le nom de l'accessor correspond au nom du parametre
- correspondance des types des accessors
7. SOAP encapsulé dans HTTP
- rappels sur HTTP
- protocole requête-réponse de données
caractère
- 1ère ligne :
- requête : Action URI versionProtocol
- action : POST GET ou HEAD
- versionProtocol HTTP/1.0 ou HTTP/1.1
- réponse: versionProtocol Etat Phrase
- etat : 200, 402 ou ...
- phrase : OK, Unauthorized, ...
- suivies de plusieures lignes d'en-tête contenant chacune
une clef : sa valeur
- suivi d'une ligne vide
- et enfin le contenu textuel
- LE protocole de l'Internet
- simple, peu gourmant
- disponible sur toutes les pleteformes
- protocole sans connexion
- sécurité : HTTPS
- pour SOAP dans HTTP, obligatoire :
- le type MIME doit être text/xml
- pour le requêtes doivent être présent
:
- l'URI de l'intent
- SOAPAction pour le filtrage des firewalls entre_autres
si valeur "", alors la SOAPAction est par défaut
l'URI
- exemple :
POST /soap/servlet/rpcrouter HTTP/1.1
Host: services.xmethods.net
Connection: Keep-Alive, TE
TE: trailers, deflate, gzip, compress
User-Agent: RPT-HTTPClient/0.3-3
SOAPAction: ""
Accept-Encoding: deflate, gzip, x-gzip, compress, x-compress
Content-type: text/xml; charset=utf-8
Content-length: 435