WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Nachrichten in der MIME-Domäne bearbeiten

Eine MIME-Nachricht muss nicht über eine bestimmte Transportmethode empfangen werden. Eine Nachricht kann beispielsweise mithilfe eines HTTPInput-Knotens über HTTP oder mithilfe eines MQInput-Knotens über WebSphere MQ empfangen werden. Der MIME-Parser wird zum Verarbeiten einer Nachricht verwendet, wenn die Nachrichtendomäne in den Eingabeknoteneigenschaften auf 'MIME' gesetzt ist oder wenn Sie WebSphere MQ verwenden und im MQRFH2-Header die Nachrichtendomäne 'MIME' angegeben ist.

In diesem Abschnitt erfahren Sie, wie Sie Nachrichten behandeln, die zur MIME-Domäne gehören und vom MIME-Parser syntaktisch analysiert werden. Verwenden Sie diese Informationen in Verbindung mit den Informationen im Abschnitt Inhalt des Hauptteils einer Nachricht bearbeiten.

Die logische Baumstruktur kann mit ESQL bearbeitet werden, bevor die Nachricht an andere Knoten im Nachrichtenfluss übergeben wird. Ein Nachrichtenfluss kann auch unter Verwendung von ESQL eine MIME-Domänenbaumstruktur erstellen. Wenn eine MIME-Domänennachricht den Sendeknoten erreicht, wird der MIME-Parser aufgerufen, um den Bitstrom auf Basis der logischen Baumstruktur wiederherzustellen.

Die folgenden Beispiele zeigen, wie MIME-Nachrichten bearbeitet werden:

Neue MIME-Baumstruktur erstellen

In einem Nachrichtenfluss werden häufig MIME-Nachrichten empfangen, geändert und zurückgegeben. In diesem Fall können Sie mit der gültigen MIME-Baumstruktur, die bei der Syntaxanalyse der Eingabenachricht erstellt wird, arbeiten. Wenn ein Nachrichtenfluss eine Eingabe aus einer anderen Domäne, z. B. XMLNS, empfängt und eine MIME-Nachricht zurückgibt, müssen Sie eine gültige MIME-Baumstruktur erstellen. Verwenden Sie zur Erstellung der Struktur der höchsten Ebene für eine einteilige MIME-Baumstruktur folgenden ESQL-Code in einem Rechenknoten:
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
Darüber hinaus muss der MIME-Inhaltstyp korrekt festgelegt werden; siehe dazu die Erläuterungen unter Inhaltstyp verwalten. Der Nachrichtenfluss muss dann die Nachrichtendaten zur MIME-Baumstruktur hinzufügen. Dies wird im folgenden ESQL-Code gezeigt. In jedem Fall wird ein DATA-Element mit der Domäne BLOB erstellt.
  • Es wird ein Bitstrom aus einem anderen Bereich der Baumstruktur verwendet. Das folgende Beispiel zeigt, wie ein Bitstrom aus einer XML-Nachricht, die vom Nachrichtenfluss empfangen wird, erstellt werden kann. Anschließend ruft der Nachrichtenfluss den BLOB-Parser auf, um die Daten unter dem DATA-Element zu speichern.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • Führen Sie keine Syntaxanalyse des Bitstroms durch, sondern erstellen Sie die neue Struktur, und hängen Sie an diese dann die Daten an. Dies wird im folgenden Beispiel gezeigt:
    DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
    CREATE LASTCHILD OF M.Data DOMAIN('BLOB') NAME 'BLOB';
    CREATE LASTCHILD OF M.Data.BLOB NAME 'BLOB' VALUE partData;

Mit beiden Methoden wird dieselbe Baumstruktur erstellt. Die erste Methode ist die beste, da das explizite Konstruktionswissen über die Baumstruktur, das vom BLOB-Parser gefordert wird, nicht in den Fluss eingebaut wird.

Häufiger kommt es vor, dass der Rechenknoten eine Baumstruktur für ein mehrteiliges MIME-Dokument erstellen muss. Der folgende ESQL-Code zeigt die Vorgehensweise, einschließlich der Festlegung des Inhaltstyps der höchsten Ebene über die Eigenschaft 'ContentType'.
DECLARE part1Data BLOB ASBITSTREAM(InputRoot.XMLNS, InputProperties.Encoding, InputProperties.CodedCharSetId);

SET OutputRoot.Properties.ContentType = 'multipart/related; boundary=myBoundary';

CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Parts';
CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Part'; 
DECLARE P1 REFERENCE TO M.Parts.Part[1];  
CREATE FIELD P1."Content-Type" TYPE NameValue VALUE 'text/plain';
CREATE FIELD P1."Content-Id"   TYPE NameValue VALUE 'part one'; 
CREATE LASTCHILD OF P1 TYPE Name NAME 'Data'; 
CREATE LASTCHILD OF P1.Data DOMAIN('BLOB') PARSE(part1Data);

CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Part'; 
DECLARE P2 REFERENCE TO M.Parts.Part[2];  
CREATE FIELD P2."Content-Type" TYPE NameValue VALUE 'text/plain';
CREATE FIELD P2."Content-Id"   TYPE NameValue VALUE 'part two'; 
CREATE LASTCHILD OF P2 TYPE Name NAME 'Data'; 
CREATE LASTCHILD OF P2.Data DOMAIN('BLOB') PARSE(part2Data);

Bestehende MIME-Baumstruktur ändern

Mit diesem ESQL-Beispiel wird ein neuer MIME-Teil zu einer bestehenden mehrteiligen MIME-Nachricht hinzugefügt. Wenn es sich nicht um eine mehrteilige Nachricht handelt, wird sie nicht geändert.
SET OutputRoot = InputRoot;

-- Check to see if the MIME message is multipart or not.
IF LOWER(InputProperties.ContentType) LIKE 'multipart/%'
THEN
  CREATE LASTCHILD OF OutputRoot.MIME.Parts NAME 'Part';

  DECLARE P REFERENCE TO OutputRoot.MIME.Parts.[<];
  CREATE FIELD P."Content-Type" TYPE NameValue VALUE 'text/xml';
  CREATE FIELD P."Content-ID"   TYPE NameValue VALUE 'new part';
  CREATE LASTCHILD OF P TYPE Name NAME 'Data';

  -- This is an artificial way of creating some BLOB data. 
  DECLARE newBlob BLOB '4f6e652074776f2074687265650d0a';
  CREATE LASTCHILD OF P.Data DOMAIN('BLOB') PARSE(newBlob);
END IF;
Wenn Sie - beispielsweise über einen EmailInput-Knoten - eine MIME-Nachricht erhalten und das Format der Nachricht kennen, möchten Sie die Nachricht unter Umständen erneut syntaktisch analysieren. Beispiel:
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData  DOMAIN('XMLNSC') 
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);

Inhaltstyp verwalten

Wenn Sie eine neue MIME-Nachrichtenbaumstruktur erstellen oder den Wert der MIME-Grenzwertzeichenfolge ändern, müssen Sie sicherstellen, dass der MIME-Header 'Content-Type' richtig festgelegt wird, indem der Wert für 'ContentType' in der untergeordnete Baumstruktur 'Eigenschaften' des Brokers angegeben wird. Das folgende Beispiel zeigt, wie der Wert 'ContentType' für einen MIME-Teil mit einfachem Inhalt festgelegt wird:
SET OutputRoot.Properties.ContentType = 'text/plain';
Legen Sie den Wert für 'Content-Type' nicht direkt in der MIME-Baumstruktur oder den HTTP-Baumstrukturen fest, weil der Wert dann ignoriert oder inkonsistent verwendet wird.
Bei Erhalt einer MIME-Nachricht können Sie den Inhalt auf der Grundlage von 'Content-Type' filtern bzw. weiterleiten. Im folgenden Beispiel ist eine XPath-Abfrage dargestellt, mit der an einem Route-Node die Inhalte danach gefiltert werden können, ob die Nachricht einen Anhang umfasst oder nicht:
starts-with($Root/MIME/Content-Type,"multipart")
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:20:08


KonzeptthemaKonzeptthema | Version 8.0.0.5 | ac30000_