MTOM (Message Transmission Optimization Mechanism) de SOAP es un estándar desarrollado por W3C (World Wide Web Consortium). MTOM describe un mecanismo para optimizar el formato de cable o transmisión de un mensaje SOAP, mediante la recodificación selectiva de las partes del mensaje, a la vez que se representa un conjunto de información XML (Infoset) en la aplicación SOAP.
MTOM utiliza XOP (XML-binary Optimized Packaging) en el contexto de SOAP y MIME sobre HTTP. XOP define un mecanismo de serialización para el Infoset XML con contenido binario que no sólo es aplicable a los paquetes SOAP y MIME, sino a cualquier Infoset XML y cualquier mecanismo de empaquetado. Es una serialización alternativa de XML que simplemente parece una multiparte MIME o un paquete relacionado, con documentos XML como la parte raíz. La parte raíz es muy parecida a la serialización XML del documento, excepto que los datos codificados en base64 se sustituyen por una referencia a una de las partes MIME, que no está codificada en base64. Esta referencia permite evitar la sobrecarga y el exceso de proceso que se asocia con la codificación. La codificación es la única forma en que los datos binarios pueden trabajar directamente con XML.
Si la generación de correlaciones MTOM se inhabilita, se inhabilitará XOP. Si XOP está inhabilitado, los datos binarios no se envían utilizando conexiones MIME. En su lugar, los datos binarios se codifican en base64 de la forma habitual.
Sin MTOM, los datos se codifican en el formato que se describe en el esquema (base64 o hexadecimal) y, a continuación, se visualizan en el documento XML. En el siguiente ejemplo se muestra un mensaje SOAP con un elemento <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>
Cuando MTOM está habilitado, los datos binarios que representan la conexión se incluyen como una conexión MIME en el mensaje SOAP. En el siguiente ejemplo, se muestra un mensaje SOAP habilitado para MTOM con datos de conexión:
... 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--
Para obtener más información, consulte la especificación MTOM oficial: SOAP Message Transmission Optimization Mechanism