Nachrichten in der MIME-Domäne bearbeiten

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.

Eine MIME-Nachricht muss nicht über eine bestimmte Transportmethode empfangen werden. Eine Nachricht kann beispielsweise mithilfe eines HTTPEmpfangsknotens über HTTP oder mithilfe eines MQEmpfangsknotens über WebSphere MQ empfangen werden. Der MIME-Parser wird zur Verarbeitung einer Nachricht verwendet, wenn einer der folgenden Punkte zutrifft:

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überhinaus 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;

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.
Zugehörige Konzepte
MIME-Parser und -Domäne
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Inhalt des Hauptteils einer Nachricht bearbeiten
Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Standardfelder des MIME-Headers
Compute-Knoten
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:28:28

ac30000_