SOAP

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 :

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="https://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://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="https://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 ("https://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