Manipulando Mensagens no Domínio MIME
Uma mensagem MIME não precisa ser recebida por um transporte específico. Por exemplo, uma mensagem pode ser recebida através de HTTP usando um nó HTTPInput, ou através de IBM® MQ usando um nó MQInput. O analisador MIME é utilizado para processar uma mensagem se o domínio da mensagem estiver definido como MIME nas propriedades do nó de entrada, ou se você estiver usando IBM MQ e o cabeçalho MQRFH2 tiver um domínio de mensagem definido como MIME.
Este tópico explica como lidar com mensagens que pertencem ao domínio MIME e são analisadas pelo analisador MIME. Use estas informações em conjunto com as informações em Manipulando o conteúdo do corpo da mensagem
É possível manipular a árvore lógica utilizando ESQL antes de transmitir a mensagem a outros nós no fluxo de mensagens. Um fluxo de mensagens também pode criar uma árvore de domínio MIME utilizando ESQL. Quando uma mensagem de domínio MIME alcança um nó de saída, o analisador MIME é chamado para reconstruir o fluxo de bits para a árvore lógica.
Criando uma Nova Árvore MIME
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
- É utilizado um fluxo de bits de outra parte da árvore. Este exemplo mostra como um fluxo de bits poderia ser criado a partir de uma mensagem XML que é recebida pelo fluxo de mensagens. Em seguida, o fluxo chama o analisador BLOB para armazenar os dados
do elemento Data.
DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS); CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData); - Em vez de analisar o fluxo de bits, crie a nova estrutura; em seguida, conecte
os dados a ela, conforme mostra este exemplo de ESQL:
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;
Duas destas abordagens criam a mesma estrutura em árvore. A primeira abordagem é melhor, pois o conhecimento explícito da estrutura em árvore que o analisador BLOB requer não está construída no fluxo.
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);
Modificando uma Árvore MIME Existente
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;
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData DOMAIN('XMLNSC')
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);Gerenciando Content-Type
SET OutputRoot.Properties.ContentType = 'text/plain';Não
defina o valor Content-Type diretamente na árvore MIME ou nas árvores HTTP, porque o
valor será ignorado ou utilizado de forma inconsistente.starts-with($Root/MIME/Content-Type,"multipart")