Binärdaten als Attachments mit MTOM übertragen

Die Performance von Web-Services wird durch die Übertragung großer Mengen von Binärdaten beeinträchtigt. MTOM (Message Transmission Optimization Mechanism) ist ein Mechanismus, um die Performance bei der Übertragung binärer Daten in Web-Service zu optimieren. Dabei werden die Binärdaten nicht base64-kodiert in der SOAP-Nachricht, sondern als Anhang der SOAP-Nachricht verschickt.

Der vom W3C empfohlene MTOM-Standard spezifiziert, dass die Binärdaten als Inhalt eines Elements vom Typ xsd:base64binary enthalten sein müssen.

Nachrichten mit binären Attachments versenden

Sie können Binärdaten mit MTOM als Anhänge von SOAP-Nachrichten versenden:

  • Bei einem Medium/Output Connector erfolgt der Versand innerhalb der ausgehenden Nachricht.

  • Bei einem Input Listener Connector erfolgt der Versand innerhalb der Response als Ausgangsnachricht.

Bei einem Input Listener Connector, der mit dem Metro-Framework, d.h. nicht im Kompatibilitätsmodus, betrieben wird, wird die Antwort nur dann MTOM-kodiert, wenn der Web-Service Consumer seine MTOM-Unterstützung explizit signalisiert hat!

Der Web-Service Consumer kann seine Unterstützung durch das Senden eines MTOM-Requests signalisieren oder indem im Accept-HTTP-Header der Eintrag application/xop+xml hinzugefügt wird. Falls Sie den Input Listener mit einem Medium/Output Connector der INUBIT-Software aufrufen und eine MTOM-kodierte Antwort erwarten, müssen Sie bei dem Medium/Output Connector die Option MTOM Anhänge für Antwort-Nachricht aktivieren markieren.

Wenn der Web-Service Consumer keine explizite MTOM-Unterstützung signalisiert hat, dann werden die Anhangdaten inline in der SOAP-Nachricht gesendet.

Sie definieren jeweils die eigentlichen Daten (z.B. Grafiken als jpeg oder Dokumente als pdf) als Workflow-Variablen und passen die SOAP-Nachricht so an, dass ein Element vom Typ xmime:base64Binary mit dem Attribut xmime:contentType und dem jeweiligen Wert (z.B. image/jpeg) enthalten ist. Dabei müssen Sie auch eine Variable anlegen, die das Element der SOAP-Nachricht angibt, für das die Daten bestimmt sind.

Die Elemente der SOAP-Nachricht, deren Inhalt mithilfe von MTOM verschickt werden soll, müssen mit dem Attribut xmime:contentType belegt sein.

Voraussetzungen

So gehen Sie vor

  1. Wählen Sie im Modul-Editor entweder den Web-Service Medium/Output oder Input Listener Connector, der die Binärdaten versenden soll.

  2. Zeigen Sie für den jeweils gewählten Konnektor-Typ das Register Erweitert an und fahren Sie beim entsprechenden Konnektor fort:

    • Beim Medium/Output Connector:

      1. Aktivieren Sie im Bereich Anhänge/Binärdaten die Option MTOM-Anhänge für ausgehende Nachricht aktivieren.

      2. Passen Sie Ihre SOAP-Nachricht so an, dass die zu versendenden Binärdaten in einem Nachrichten-Element (z.B. mit dem Namen imageData für Grafikdaten) vom Typ xmime:base64Binary enthalten sind und weisen Sie dazu diesem Nachrichten-Element das Attribut xmime:contentType zu.

    • Beim Input Listener Connector:

      1. Aktivieren Sie im Bereich Anhänge/Binärdaten die Option MTOM-Anhänge für Antwort-Nachricht aktivieren.

      2. Zeigen Sie das Register XML-Schemas an.

      3. Wählen Sie das Nachrichten-Element, dessen Inhalt als Anhang verschickt werden soll (z.B. imageData).

      4. Weisen Sie diesem Element den Typ xmime:base64Binary zu, indem Sie diesen Typ aus dem unteren Bereich des Editors aus der Gruppe der complex types auf das entsprechende Element oben in der Nachricht ziehen.

        Damit haben Sie dem Element gleichzeitig das notwendige Attribut xmime:contentType zugewiesen.

Beispiel für SOAP-Nachricht

  1. Passen Sie die ausgehende SOAP-Nachricht so an (z.B. in einem XSLT Converter), dass im entsprechenden Nachrichten-Element, welches die MTOM-Daten enthalten soll, für das xmime:contentType-Attribut der korrekte Inhalts-Typ gesetzt ist (z.B. image/jpeg; im Zweifelsfall setzen Sie application/octet-stream als generischen Inhalts-Typ, z.B.:

    <soapenv:Envelope xmlns:xmime="http://www.w3.org/2005/05/xmlmime">
      <soapenv:Body>
        <operationA>
          <imageData xmime:contentType="image/jpeg">
          </imageData>
          <pdfData xmime:contentType="application/pdf">
          </pdfData>
        </operationA>
      </soapenv:Body>
    </soapenv:Envelope>
  2. Legen Sie im Workflow folgende Variablen für die Daten des imageData-Elements und des pdfData-Elements an und definieren Sie deren Werte:

    • Variablen für die Daten des imageData-Elements:

      Name Typ Wert

      WSAttachment.0

      xs:base64Binary

      Bild-Daten

      WSAttachmentName.0

      xs:String

      imageData

      (entspricht dem Namen des Nachrichten-Elements)

    • Variablen für die Daten des pdfData-Elements:

      Name Typ Wert

      WSAttachment.1

      xs:base64Binary

      PDF-Daten

      WSAttachmentName.1

      xs:String

      pdfData

      (entspricht dem Namen des Nachrichten-Elements)

      Die Variablen enthalten die Namen der zu referenzierenden Nachrichten-Elementen und die konkreten Daten.

      Siehe

    • Abbildungsregeln für das Variablen-Mapping erstellen

    • Variablen definieren

Sie können einen File Connector zum Einlesen der Binärdaten aus einer Datei verwenden, den Sie im Workflow vor den Web Service Connector platzieren. Verwenden Sie dann ein Variablen-Mapping, in dem Sie die Binärdaten einer Variable vom Typ xs:base64Binary zuweisen.

Nachrichten mit binären Attachments empfangen

Standardmäßig werden Inhalte von Anhängen direkt in die empfangene SOAP-XML-Nachricht als base64-kodierte Daten integriert und dem Workflow übergeben.

Sie können den Inhalt von Elementen mit Binärdaten (bzw. die MTOM-Anhänge) auch extrahieren und als Inhalt von Workflow-Variablen setzen.

Voraussetzungen

Web-Service Medium/Output oder Input Listener Connector ist angelegt und konfiguriert.

So gehen Sie vor

  1. Wählen Sie im Modul-Editor entweder den Web-Service Medium/Output oder Input Listener Connector, der Binär-Inhalte oder MTOM-Anhänge empfängt.

  2. Zeigen Sie für den jeweils gewählten Konnektor-Typ das Register Erweitert an und fahren Sie beim entsprechenden Konnektor fort

    • Beim Input Listener Connector:

      Aktivieren Sie im Bereich Anhänge/Binärdaten die Option Binärdaten aus Eingabeachricht extrahieren und als Variablen-Inhalte setzen.

    • Beim Medium/Output Connector:

      Aktivieren Sie im Bereich Anhänge/Binärdaten die Option Binärdaten aus Antwort-Nachricht extrahieren und als Variablen-Inhalte setzen.

Die eingehende SOAP-Nachricht wird nach Elementen mit dem Attribut xmime:contentType durchsucht und deren Inhalt wird in folgende Variablen geschrieben:

  • WSAttachmentName.[index]: Name des Nachrichten-Elements

  • WSAttachment.[index]: (Typ: xs:base64Binary) Daten des Nachrichten-Elements

  • WSAttachmentContent-Type.[index]: Inhalts-Typ der Daten

  • WSAttachmentNumber: Gesamtzahl der gefunden Inhalte

Wenn die Option Anhänge im Dateisystem speichern aktiviert ist, dann wird die Variable WSAttachmentFileName.[index] anstelle von WSAttachment.[index] gesetzt. Inhalt von WSAttachmentFileName.[index] ist der Name der Datei mit den Daten.

Um die in den Variablen ausgelesenen Daten an das nächste Modul zu übergeben, müssen Sie ein Mapping durchführen, welches die entsprechenden Variablen auf die Eingangsnachricht abbildet.