Mécanisme d'optimisation de transmission de message
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.
- Codage base64 en ligne dans la charge SOAP. Cependant, le codage en ligne tend à agrandir la taille du message SOAP. Il est à noter que le codage base64 risque de doubler la taille des données binaires.
- Codage des messages à l'aide de SwA (SOAP with Attachments) et pour respecter le profil de pièces jointes WS-I (Web Services Interoperability Organization). WebSphere Application Server prend actuellement en charge cette méthode.
- Optimisation du transport de message binaire à l'aide de XOP (XML-binary Optimized Packaging). L'optimisation n'est disponible que pour le contenu ou les données binaires. MTOM utilise XOP 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 packaging SOAP et MIME mais à tout ensemble d'informations XML et à tout mécanisme de packaging. Il s'agit d'une sérialisation alternative de XML qui semble être similaire à un package multipartie/associé MIME, comportant un document 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 entrer directement dans un monde 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.
- Fonction abstraite pour la transmission optimisée ou le format WF des messages SOAP. Cette fonction est abstraite dans la mesure où la description de la technique d'optimisation et du comportement des processeurs SOAP au niveau de l'émetteur, du récepteur et des intermédiaires est générique et n'inclut aucune référence aux technologies telles que MIME, HTTP, etc. La technique d'optimisation porte essentiellement sur la garantie d'un vue Infoset d'enveloppe SOAP pour les processeurs SOAP, tout en effectuant le codage sélectif de certains contenus de l'Infoset d'enveloppe SOAP qui sont accessibles sous forme de représentation lexique canonique du type de données xs:base64Binary.
L'implémentation de ces fonctions abstraites nécessite la spécification concrète de deux aspects : le format WF optimisé et le mode de circulation du format WF optimisé sur un transport particulier.
- La deuxième partie de la spécification MTOM traite l'aspect de sérialisation et dépend de façon normative du packaging XOP multipartie/associé MIME. L'aspect de sérialisation concerne l'association de MTOM à XOP.
- En tant que fonction concrète de niveau liaison HTTP SOAP, MTOM est basé sur la sérialisation. Cette partie explique comment la liaison HTTP permet de transporter les packages XOP qui stockent les messages MTOM SOAP. Elle impose également quelques restrictions sur les sérialisations possibles des messages MTOM SOAP sous forme de packages XOP, par exemple, l'utilisation de XML 1.0 uniquement.
La prise en charge JAX-WS (Java™ API for XML Web Services) ajoute une prise en charge permettant d'envoyer des pièces jointes de données binaires à l'aide de MTOM. JAX-WS est la pièce centrale d'une pile d'API nouvellement restructurée pour les services web, qui inclut JAX-WS 2.0, JAXB 2.0 et SAAJ 1.3. La pile d'API est parfois désignée par pile intégrée. JAX-WS est conçu pour remplacer JAX-RPC dans les services et applications web.
Méthode d'association
- Par valeur est le cas où le contenu de données opaques est incorporé sous la forme d'un élément ou d'un attribut, à l'aide d'une méthode de codage de texte base64 ou hexadécimal, qui est codifié dans le schéma XML comme types de données xs:base64Binary et xs:hexBinary, respectivement.
- Par référence désigne le cas où le contenu de données opaques est référencé en externe sous la forme d'un élément ou d'un attribut, à l'aide d'un URI, qui est codifié dans le schéma XML comme type de données xs:anyURI.
Une norme différente est définie par W3C et est appelée SwA (SOAP with Attachments). SwA a été développée pour mettre en forme des messages SOAP contenant des pièces jointes. Dans la mesure où certains fournisseurs ne prennent pas en charge la norme SwA, cette dernière peut être remplacée par les mécanismes MTOM et XOP plus puissants. SwA et MTOM sont similaires en termes de concept, et les deux encodent les données binaires sous la forme d'une pièce jointe MIME dans un document MIME. L'utilisation de pièces jointes MIME améliore les performances du transport volumineux de charges binaires.
- MTOM utilise une norme appelée XOP, qui définit une référence XOP existant dans la charge SOAP. Cette référence pointe vers la pièce jointe MIME qui contient les données binaires.
- Avec MTOM, la référence XOP inclut logiquement les données binaires dans l'ensemble d'informations XML (Infoset). Avec SwA, le href pointe vers des données qui non seulement figurent physiquement hors du document XML mais qui ne sont pas logiquement incluses dans son Infoset.
- Avec MTOM, les pièces jointes binaires peuvent être logiquement signées comme si elles faisaient partie du document XML SOAP.
- Outre IBM®, Microsoft .NET prend en charge MTOM, ce qui élimine certains problèmes d'interopérabilité rencontrés avec SwA. L'interopérabilité était l'objectif principal lorsque les co-émetteurs discutaient des modifications suggérées.
SOAP 1.2 et SOAP 1.1
SOAP 1.1 est basé sur la spécification XML. De même, l'implémentation SOAP 1.1 persistera pendant quelques années. Pour les personnes qui exécutent toujours SOAP 1.1, il y a désormais un moyen interopérable pour utiliser MTOM pour la prise en charge des pièces jointes. SAP, Oracle, Microsoft et IBM ont soumis à W3C une spécification SOAP 1.1 Binding for MTOM 1.0, qui définit la façon dont MTOM peut être utilisé avec les charges SOAP 1.1. Cette spécification détaille les modifications à apporter aux spécifications SOAP MTOM et XOP qui sont nécessaires pour l'utilisation correcte de ces technologies avec SOAP 1.1. Pour plus de détails, voir la spécification.
MTOM est une fonction de SOAP version 1.2 qui est basée sur l'Infoset. Pour plus de détails, voir les documentations disponibles au format XML.
Sans MTOM, les données sont codées au format décrit dans le schéma (base64 ou hex) et sont ensuite contenues 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>
<?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>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org"/>
</imageData>
</input>
</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--