MTOM-XOP per ottimizzare i messaggi SOAP

  • 23
  • Jan 2019
  • Dev @ Contech Lab
  • View: 34312 | 0 Comments


  • L'utilizzo di MTOM/XOP nasce dall'esigenza di ottimizzare un messaggio SOAP. Questo viene serializzato in un messaggio MIME Multipart/Related utilizzando l'elaborazione XOP.

    I dati base64Binary vengono estratti dal messaggio SOAP e impacchettati come allegati binari separati all'interno del messaggio MIME, in modo simile agli allegati di posta elettronica.

    La dimensione dei dati base64Binary è notevolmente ridotta perché gli allegati sono codificati in formato binario. L'XML nel messaggio SOAP viene quindi convertito in formato XOP sostituendo i dati base64Binary con uno speciale elemento
    view plain print about
    <xop:Include>

    che referenzia l'allegato MIME con l'utilizzo di una URI

    Il messaggio SOAP così modificato viene chiamato XOP Document e rappresenta la Root all'interno del messaggio. Viene definito quindi come XOP Package l'insieme del XOP Document e l'attachment binario.

    Nell'utilizzo dei messaggi SOAP, il XOP Package è il messaggio MIME nel formato MTOM

    Per vedere un esempio di utilizzo, scriviamo un messaggio SOAP che contiene un'immagine di tipo PNG e lo convertiamo in una versione MTOM/XOP

    /p>

    SOAP MESSAGE

    view plain print about
    <soap:Envelope
         xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xmime="http://www.w3.org/2003/12/xop/mime">

         <soap:Body>
         <hotelReference>
          <accountNumber>ABC-1234</accountNumber>
          <accountCode>accident</accountCode>
          <hotelName>Bonvecchiati</hotelName>
          <hotelImage xmime:contentType="image/png" xsi:type="base64binary">4f3e..(encoded image)</hotelImage>
         </hotelReference>
         </soap:Body>
        </soap:Envelope>

    MTOM/XOP SOAP MESSAGE

    view plain print about
    MIME-Version: 1.0
    Content-Type: Multipart/Related; boundary=MIME_boundary;
     type="application/soap+xml"; start="<reference1@testcontechlab.com>

    --MIME_boundary
    Content-Type: application/soap+xml; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    Content-ID: <reference1@testcontechlab.com>

    <soap:Envelope
     xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
     xmlns:xop='http://www.w3.org/2004/08/xop/include'
     xmlns:xop-mime='http://www.w3.org/2005/05/xmlmime'>

     <soap:Body>
     <hotelReference>
      <accountNumber>ABC-1234</accountNumber>
      <accountCode>accident</accountCode>
      <hotelName>Bonvecchiati</hotelName>
      <hotelImage xop-mime:content-type='image/png'><xop:Include href="cid:image1@testcontechlab.com"/></hotelImage>
     </hotelReference>
     </soap:Body>
    </soap:Envelope>

    --MIME_boundary
    Content-Type: image/jpeg
    Content-Transfer-Encoding: binary
    Content-ID: <image1@testcontechlab.com>

    ...elemento immagine PNG in formato Binary...

    --MIME_boundary--

    Il parametro definito Start, specifica quale parte del messaggio rappresenta la Root del documento XOP.
    Il Content-ID identifica le parti del messagio MIME.
    L'elemento xop:Include referenzia l'immagine binaria in attachmet al messaggio.
    Il Content-ID: identifica l'attachment binario.

    Informazioni relative al SOAP MTOM (Message Transmission Optimization Mechanism) sono disponibili nella documentazione w3.org