SOAP Message Transmission Optimization Mechanism (MTOM) ist ein Standard, der vom World Wide Web Consortium (W3C) entwickelt wurde. MTOM beschreibt einen Mechanismus für die Optimierung des Übertragungs- bzw. Sendeformats einer SOAP-Nachricht durch selektive Neucodierung von Teilen der Nachricht bei gleichzeitiger Bereitstellung eines XML Information Set (Infoset) für die SOAP-Anwendung.
MTOM verwendet XOP (XML-binary Optimized Packaging) im Kontext von SOAP und MIME über HTTP. XOP definiert einen Serialisierungsmechanismus für das XML Infoset mit binärem Inhalt, der derzeit auf die Konfektionierungsmechanismen von SOAP und MIME nicht anwendbar ist, aber auf jeden XML-Infoset- und anderen Konfektionierungsmechanismus. Diese alternative Serialisierung von XML lässt die XML wie den MIME-Inhaltstyp multipart oder ein zugehöriges Paket mit XML-Dokumenten als Stammkomponente aussehen. Diese Stammkomponente ist abgesehen davon, dass die nach Base64 codierten Daten durch eine Referenz auf einen der MIME-Abschnitte ersetzt werden, der nicht nach Base64 codiert ist, der XML-Serialisierung des Dokuments sehr ähnlich. Mit dieser Referenz können Sie den Großteil der Codierung und den damit verbundenen Aufwand während der Verarbeitung vermeiden. Die Codierung ist der einzige Weg, auf dem Binärdaten direkt mit XML funktionieren können.
Wenn die Generierung von MTOM-Zuordnungen inaktiviert ist, ist XOP inaktiviert. Wenn XOP inaktiviert ist, werden die Binärdaten nicht mit MIME-Anhängen gesendet. Stattdessen werden die Binärdaten wie gewohnt nach Base64 codiert.
Ohne MTOM werden die Daten gemäß der Beschreibung im Schema codiert (Base64 oder Hex) und dann im XML-Dokument angezeigt. Das folgende Beispiel zeigt eine SOAP-Nachricht mit einem Element <xsd:base64Binary>:
... weitere Transportheader ...
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 ... weitere Base64-codierte Daten ... KTJk8giAAA7</imageData>
</input>
</sendImage>
</soapenv:Body>
</soapenv:Envelope>
Wenn MTOM aktiviert ist, werden die binären Daten, die den Anhang darstellen, als MIME-Anhang in die SOAP-Nachricht eingefügt. Das folgende Beispiel zeigt eine MTOM-fähige SOAP-Nachricht mit Anhangsdaten:
... weitere Transportheader ...
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>
... hier binäre Daten einfügen ...
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812--
Weitere Informationen finden Sie in der offiziellen MTOM-Spezifikation unter SOAP Message Transmission Optimization Mechanism.