Manipolazione dei messaggi nel dominio MIME

In questo argomento viene descritta la modalità di gestione dei messaggi che appartengono al dominio MIME e che vengono analizzati mediante il programma di analisi MIME. Utilizzare queste informazioni insieme alle informazioni contenute in Manipolazione del contenuto del messaggio.

Non è necessario che un messaggio MIME sia ricevuto su un trasporto particolare. Ad esempio, è possibile ricevere il messaggio su HTTP utilizzando HTTPInput oppure su WebSphere MQ utilizzando un nodo MQInput. Il programma di analisi MIME viene utilizzato per elaborare un messaggio se vengono applicate le condizioni riportate di seguito.

E' possibile manipolare la struttura logica utilizzando ESQL prima che il messaggio venga trasmesso ad altri nodi nel flusso di messaggi. E' inoltre possibile creare una struttura di dominio MIME mediante un flusso di messaggi utilizzando ESQL. Quando un messaggio di dominio MIME raggiunge un nodo di output, il programma di analisi MIME viene richiamato per creare nuovamente il flusso di bit dalla struttura logica.

Negli esempi riportati di seguito viene descritta la modalità di manipolazione dei messaggi MIME.

Creazione di una nuova struttura MIME

Spesso un flusso di messaggi riceve, modifica e restituisce un messaggio MIME. In tal caso, è possibile gestire la struttura MIME valida creata quando il messaggio di input viene analizzato. Se un flusso di messaggi riceve input da un altro dominio, ad esempio XML, e restituisce un messaggio MIME, è necessario creare una struttura MIME valida. Utilizzare l'ESQL seguente in un nodo Compute per creare una struttura principale per una struttura MIME a parti singole:
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
E' inoltre necessario che tale flusso di messaggi garantisca che il Content-Type MIME sia impostato in modo corretto, come descritto in Gestione Content-Type. E' necessario quindi che il flusso aggiunga i dati del messaggio nella struttura MIME. Il seguente ESQL è un esempio di procedura per effettuare tale operazione. In ciascun caso i dati vengono creati con il dominio BLOB.
  • Viene utilizzato un flusso di bit proveniente da un'altra parte dell'albero. Nell'esempio riportato di seguito viene descritta la creazione di un flusso di bit da un messaggio XML ricevuto dal flusso di messaggi. Il flusso richiama il programma di analisi BLOB per memorizzare i dati nell'elemento Dati.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • Anziché analizzare il flusso di bit, creare la nuova struttura e allegare i dati. Il seguente ESQL è un esempio di procedura per effettuare tale operazione:
    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;

Entrambi gli approcci consentono di creare la stessa struttura di albero. Si consiglia il primo approccio perché la conoscenza esplicita della struttura di albero richiesta dal programma di analisi BLOB non è creata nel flusso.

Più comunemente è necessario che il nodo Compute crei un albero per un documento MIME multiplo. Il seguente ESQL è un esempio di procedura per effettuare tale operazione, compresa l'impostazione di Content-Type superiore mediante la proprietà 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);

Modifica di una struttura MIME esistente

Il seguente ESQL di esempio consente di aggiungere una nuova parte MIME a un messaggio MIME multiplo esistente. Se il messaggio non è multiplo non viene modificato:
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;

Gestione Content-Type

Quando viene creato un nuovo albero dei messaggi MIME o quando si modifica il valore della stringa di limite MIME, accertarsi che l'intestazione Content-Type di MIME sia impostata correttamente. Impostare il valore ContentType nell'albero secondario del broker per effettuare tale operazione. Nell'esempio riportato di seguito viene riportato il valore ContentType impostato per una parte MIME con contenuto semplice:
SET OutputRoot.Properties.ContentType = 'text/plain';
Non impostare il valore Content-Type direttamente nella struttura MIME o nelle strutture HTTP. E' possibile che il valore venga ignorato o utilizzato in modo incongruente.
Concetti correlati
Dominio e programma di analisi MIME
Panoramica dei flussi di messaggi
Panoramica di ESQL
Creazione di modelli di messaggio
Attività correlate
Manipolazione del contenuto del messaggio
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione dei file ESQL
Riferimenti correlati
Campi di intestazione standard MIME
Nodo Compute
Nodo Database
Nodo Filter
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac30000_