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 einen bestimmten Transport empfangen werden. Eine Nachricht kann beispielsweise mit Hilfe eines HTTPEmpfangsknotens über HTTP empfangen werden, oder mit Hilfe eines MQEmpfangsknotens über WebSphere MQ. 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:

Eine 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 arbeiten, die bei der Syntaxanalyse der Eingabenachricht erstellt wird. Wenn ein Nachrichtenfluss eine Eingabe aus einer anderen Domäne wie beispielsweise XML 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 Fluss muss dann die Nachrichtendaten zur MIME-Baumstruktur hinzufügen. Der folgende ESQL-Code bietet Beispiele zur entsprechenden Vorgehensweise. Beachten Sie, dass in jedem Fall Daten bei der Domäne BLOB erstellt werden.
  • Es wird ein Bitstrom aus einem anderen Bereich der Baumstruktur verwendet. Das folgende Beispiel zeigt, wie ein Bitstrom auf Basis einer vom Nachrichtenfluss empfangenen XML-Nachricht erstellt werden könnte. Anschließend ruft der Fluss den BLOB-Parser auf, um die Daten unter dem Datenelement zu speichern.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
     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 dieser dann die Daten an. Der folgende ESQL-Beispielcode veranschaulicht die entsprechende Vorgehensweise:
    DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
    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 wird empfohlen, 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-Beispielcode veranschaulicht die entsprechende Vorgehensweise, einschließlich der Festlegung des Inhaltstyps der höchsten Ebene über die Eigenschaft 'ContentType':
DECLARE part1Data BLOB ASBITSTREAM(InputRoot.XML.part1);
DECLARE part2Data BLOB ASBITSTREAM(InputRoot.XML.part2);

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);

Eine bestehende MIME-Baumstruktur ändern

Mit diesem ESQL-Beispielcode 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 wurde. Legen Sie dafür den Wert 'ContentType' in der untergeordnete Baumstruktur mit den Eigenschaften des Brokers fest. Das folgende Beispiel zeigt, wie der Wert 'ContentType' für einen MIME-Teil mit einfachem Inhalt festgelegt wird:
SET OutputRoot.Properties.ContentType = 'text/plain';
Richten Sie den Inhaltstyp-Wert nicht direkt in der MIME-Baumstruktur oder in HTTP-Baumstrukturen ein, da der Wert in diesem Fall 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
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Standardfelder des MIME-Headers
Rechenknoten (Compute)
Datenbankknoten (Database)
Filterknoten
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac30000_