Le mécanisme MTOM (Message Transmission Optimization Mechanism) SOAP est une norme développée par W3C. MTOM décrit un mécanisme permettant d'optimiser la transmission ou le format WF d'un message SOAP au moyen du re-codage sélectif des portions du message, tout en présentant un ensemble d'informations XML (Infoset) à l'application SOAP.
MTOM utilise XOP (XML-binary Optimized Packaging) dans le contexte de SOAP et MIME sur HTTP. XOP définit un mécanisme de sérialisation pour l'ensemble d'informations XML à l'aide d'un contenu binaire qui est non seulement applicable au conditionnement SOAP et MIME mais à tout ensemble d'informations XML et à tout mécanisme de conditionnement. Il s'agit d'une sérialisation alternative de XML qui semble être similaire à un package multipartie ou associé MIME, comportant les documents XML à la racine. Cette partie racine est très similaire à la sérialisation XML du document, à ceci près que les données codées en base64 sont remplacées par une référence à une des parties MIME qui n'est pas codée en base64. Cette référence vous permet d'éviter la surcharge et le temps de traitement associés au codage. Le codage est la seule façon dont les données binaires peuvent fonctionner directement avec XML.
Si la génération de mappage MTOM est désactivée, XOP est désactivé. Si XOP est désactivé, les données binaires ne sont pas envoyées à l'aide de pièces jointes MIME. En revanche, les données binaires sont codées en base64, comme il est d'usage.
Sans MTOM, les données sont codées au format décrit dans le schéma (base64 ou hex) et sont ensuite affichées dans le document XML. L'exemple suivant présente un message SOAP contenant un élément <xsd:base64Binary> :
... other transport headers ...
Content-Type: text/xml; charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
<input>
<imageData>R0lGODl ... more base64 encoded data ... KTJk8giAAA7</imageData>
</input>
</sendImage>
</soapenv:Body>
</soapenv:Envelope>
Lorsque MTOM est activé, les données binaires représentant l'association sont incluses sous la forme d'une pièce jointe MIME au message SOAP. L'exemple suivant présente un message SOAP compatible MTOM contenant des données d'association :
... other transport headers ...
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812;
type="application/xop+xml"; start="<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>";
start-info="text/xml"; charset=UTF-8
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: application/xop+xml; charset=UTF-8; type="text/xml";
content-transfer-encoding: binary
content-id:
<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ati:sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom" xmlns:ati="http://org/apache/axis2/jaxws/sample/mtom">
<ati:input>
<ati:imageData>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org"/>
</ati:imageData>
</ati:input>
</ati:sendImage>
</soapenv:Body>
</soapenv:Envelope>
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: text/plain
content-transfer-encoding: binary
content-id:
<1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org>
... binary data goes here ...
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812--
Pour plus d'informations, voir la spécification MTOM officielle : SOAP Message Transmission Optimization Mechanism