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