No es necesario que un mensaje MIME se reciba a través de un transporte determinado. Por ejemplo, se puede recibir un mensaje a través de HTTP utilizando un nodo HTTPInput, o a través de WebSphere MQ utilizando un nodo MQInput. El analizador MIME se utiliza para procesar un mensaje si el dominio de mensajes se establece en MIME en las propiedades del nodo de entrada, o si utiliza WebSphere MQ y la cabecera MQRFH2 tiene un dominio de mensajes de MIME.
Este tema explica cómo tratar con mensajes que pertenecen al dominio MIME y que analiza el analizador MIME. Utilice esta información junto con la información del tema Manipular el contenido del cuerpo del mensaje.
Puede manipular el árbol lógico utilizando ESQL antes de pasar el mensaje a otros nodos del flujo de mensajes. Un flujo de mensajes también puede crear un árbol de dominio MIME utilizando ESQL. Cuando un mensaje de dominio MIME llega a un nodo de salida, se llama al analizador MIME para que vuelva a crear la corriente de bits desde el árbol lógico.
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
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;
Estas dos propuestas crean la misma estructura de árbol. Es mejor utilizar la primera propuesta porque en el flujo no se incorpora ninguna descripción explícita de la estructura de árbol necesaria para el analizador BLOB.
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);
SET OutputRoot = InputRoot;
-- Comprobar si el mensaje MIME es de varias partes o no.
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';
-- Éste es un procedimiento artificial para crear datos BLOB.
DECLARE newBlob BLOB '4f6e652074776f2074687265650d0a';
CREATE LASTCHILD OF P.Data DOMAIN('BLOB') PARSE(newBlob);
END IF;
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData DOMAIN('XMLNSC')
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);
SET OutputRoot.Properties.ContentType = 'text/plain';
No
establezca el valor de Content-Type directamente en el árbol MIME o los
árboles HTTP, porque el valor se ignorará o se utilizará de forma no
coherente.starts-with($Root/MIME/Content-Type,"multipart")