Simple Object Access Protocol. Protocole simple d'accès aux objets.
Définir un protocole standard et léger d'échange d'informations en environnement distribué et décentralisé.
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.
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>
public class Exchange
{
public float getRate (String country1, String country2)
{
// Recherche taux de change dans la base
return rate;
}
}
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
}
}
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 |