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<br> Host:www.javarome.net<br> Content-Type:text/xml;charset=utf-8<br>
Content-Length:494<br> <strong>SOAPAction</strong>:""<br>
<?xml version=’1.0 ’encoding=’UTF-8 ’?><br> <b><</b>SOAP-ENV<b>:Envelope </b>xmlns<b>:</b>SOAP-ENV<b>="https://schemas.xmlsoap.org/soap/envelope/" </b>xmlns:xsi<b>=</b>"https://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="https://www.w3.org/2001/XMLSchema"><b><br>
<</b>SOAP-ENV<b>:Header </b>SOAP-ENV<b>:mustUnderstand="1"><br>
<transaction><br>
<identifiant></b>02DF25<b><identifiant><br>
<type></b>2 phase commit<b></type><br>
</transaction><br>
</</b><strong>SOAP-ENV</strong><b>:Header><br>
<</b>SOAP-ENV<b>:Body><br>
<</b>ns1<b>:</b>getRate<b> </b>xmlns:ns1="urn<b>:</b>Exchange<b>" </b>SOAP-ENV<b>:encodingStyle="https://schemas.xmlsoap.org/soap/encoding/"><br>
<</b>country1<b> </b>xsi:type<b>=</b>"xsd:string"<b>></b>USA<b></</b>country1<b>><br>
<</b>country2<b> </b>xsi:type<b>=</b>"xsd:string"<b>></b>Germany<b></</b>country2<b>><br>
</</b>ns1<b>:</b>getRate<b> ><br>
</</b>SOAP-ENV<b>:Body><br>
</</b>SOAP-ENV<b>:Envelope></b>
public class Exchange <br> {<br> public float getRate (String country1, String country2)<br> {<br> <span class="codeComment">// Recherche taux de change dans la base</span><br> return rate;<br> }<br> }
public class SoapClient <br> {<br> public void static main (String[] args) <br> {<br> <b>Call</b> call =
new <b>Call</b>();<br> <br> call.<b>setEncodingStyleURI</b> (<b>Constants.NS_URI_SOAP_ENC</b>);<br> call.<b>setTargetObjectURI</b>
(<span class="codeString">"<b>urn:</b>Exchange"</span>);<br> call.<b>setMethod</b> (<span class="codeString">"getRate"</span>);<br>
<br> Vector params = new Vector();<br> params.addElement (new <b>Parameter</b> (<span class="codeString">"country1"</span>, String.class, <span class="codeString">"USA"</span>, <b>Constants.NS_URI_SOAP_ENC</b>);
<span class="codeComment">//
2nd param</span><br> call.setParams (params);<br> <br> URL url = new URL (<span class="codeString">"https://www.exch.com/soap/servlet/rpcrouter"</span>);<br>
<br> <b>Response</b> resp = call.<b>invoke</b> (url, <span class="codeString">"<b>urn:</b>Exchange"</span>);<br>
<br> if (! resp.<b>generatedFault</b>())<br> Object obj = resp.<b>getReturnValue</b>().<b>getValue</b> ();<br>
<br> // Traite le résultat<br> }<br> }
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 œuvre par IBM avec MQSeries |