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
-
Web-Service Medium/Output oder Input Listener Connector ist angelegt und konfiguriert.
Siehe Web-Service aufrufen
-
Sie haben eine SOAP-Nachricht für den Versand erstellt.
Siehe Web-Service aufrufen
So gehen Sie vor
-
Wählen Sie im Modul-Editor entweder den Web-Service Medium/Output oder Input Listener Connector, der die Binärdaten versenden soll.
-
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:
-
Aktivieren Sie im Bereich Anhänge/Binärdaten die Option MTOM-Anhänge für ausgehende Nachricht aktivieren.
-
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 Typxmime:base64Binary
enthalten sind und weisen Sie dazu diesem Nachrichten-Element das Attributxmime:contentType
zu.
-
-
Beim Input Listener Connector:
-
Aktivieren Sie im Bereich Anhänge/Binärdaten die Option MTOM-Anhänge für Antwort-Nachricht aktivieren.
-
Zeigen Sie das Register XML-Schemas an.
-
Wählen Sie das Nachrichten-Element, dessen Inhalt als Anhang verschickt werden soll (z.B.
imageData
). -
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
-
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 Sieapplication/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>
-
Legen Sie im Workflow folgende Variablen für die Daten des
imageData
-Elements und despdfData
-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
-
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 |
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.
Siehe Web-Service aufrufen
So gehen Sie vor
-
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.
-
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 |
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.