Simple Object Access Protocol. Protocole simple d'accès aux objets.
Besoin
Définir un protocole standard et léger d'échange d'informations en environnement distribué et décentralisé.
Analyse
SOAP est constitué de :
- une enveloppe qui définit un framework de description du contenu d'un message et la manière de le traiter
- des règles d'encodage permettant de définir les types de données utilisés par l'application
- une convention de représentation de requête/réponse distante
L'ensemble de ces éléments exploitent XML.
SOAP peut être potentiellement utilisé au-dessus de divers protocoles, mais l'est généralement au-dessus de HTTP. Il utilise dans ce cas le framework d'extension de HTTP pour ajouter des champs spécifiques à SOAP dans l'en-tête HTTP.
Exemples
Message
Voici un exemple de message SOAP dans une requête HTTP. On y
reconnaît l'en-tête HTTP étendu pour SOAP (avec le champ
d'en-tête SOAPAction
), l'enveloppe SOAP (balise SOAP-ENV
), l'appel de service Web (balise ns1:getRate
) avec ses paramètres (deux paramètres
via les balises country1
et country2
en l'occurence) :
POST /servlet/rpcrouter HTTP/1.0
Host:www.javarome.net
Content-Type:text/xml;charset=utf-8
Content-Length:494
SOAPAction:""
<?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:Header SOAP-ENV:mustUnderstand="1">
<transaction>
<identifiant>02DF25<identifiant>
<type>2 phase commit</type>
</transaction>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:getRate xmlns:ns1="urn:Exchange" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<country1 xsi:type="xsd:string">USA</country1>
<country2 xsi:type="xsd:string">Germany</country2>
</ns1:getRate >
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Fournisseur
public class Exchange
{
public float getRate (String country1, String country2)
{
// Recherche taux de change dans la base
return rate;
}
}
Client
public class SoapClient
{
public void static main (String[] args)
{
Call
call = new Call();
call.setEncodingStyleURI (Constants.NS_URI_SOAP_ENC);
call.setTargetObjectURI ("urn:Exchange");
call.setMethod
("getRate");
Vector params = new Vector();
params.addElement (new Parameter
("country1", String.class, "USA", Constants.NS_URI_SOAP_ENC);
//
2nd param
call.setParams (params);
URL url = new URL ("http://www.exch.com/soap/servlet/rpcrouter");
Response resp = call.invoke (url, "urn:Exchange");
if (! resp.generatedFault())
Object obj = resp.getReturnValue().getValue ();
// Traite le résultat
}
}
Notes
-
Version 1 Commentaire Release 1 2 Fixpack Domaine Technologie Maintenance Format de message Enveloppe Règles de codage Codage des caractères RPC Remote Procedure Call Transport HTTP Oui SMTP Oui JMS Mis en oeuvre par IBM avec MQSeries - Initié en 1998 par Microsoft et Developmentor
- Intégré par IBM (WebSphere), Sun (Sun ONE), BEA (WebLogic), Microsoft (.Net)
- Défini par le W3C