Manipulando Mensagens no Domínio MIME

Este tópico explica como lidar com mensagens que pertencem ao domínio MIME e que são analisadas pelo analisador MIME. Utilize essas informações em conjunto com as informações de Manipulando o Conteúdo do Corpo da Mensagem.

Uma mensagem MIME não precisa ser recebida por um transporte específico. Por exemplo, uma mensagem pode ser recebida por HTTP utilizando um nó HTTPInput ou pelo WebSphere MQ utilizando um nó MQInput. O analisador MIME é utilizado para processar uma mensagem se uma das seguintes condições a seguir se aplicar:

A árvore lógica pode ser manipulada utilizando ESQL antes da transmissão da mensagem para 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.

Os exemplos a seguir mostram como manipular mensagens MIME:

Criando uma Nova Árvore MIME

Um fluxo de mensagens freqüentemente recebe, modifica e retorna uma mensagem MIME. Neste caso, é possível trabalhar com a árvore MIME válida criada durante a análise da mensagem de entrada. Se um fluxo de mensagens receber entrada de outro domínio, como XML e retornar uma mensagem MIME, será necessário criar uma árvore MIME válida. Utilize o seguinte ESQL em um nó Compute para criar a estrutura de nível superior para uma árvore MIME de parte única:
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
O fluxo de mensagens também precisa assegurar que MIME Content-Type esteja configurado corretamente, conforme explicado em Gerenciando Content-Type. Em seguida, o fluxo precisa incluir os dados da mensagem na árvore MIME. O ESQL a seguir fornece exemplos de como isto pode ser feito. Observe que, em cada caso Data é criado com o domínio BLOB.
  • É utilizado um fluxo de bits de outra parte da árvore. O exemplo a seguir mostra como um fluxo de bits pode ser criado a partir de uma mensagem XML que o fluxo de mensagens recebeu. Em seguida, o fluxo chama o analisador BLOB para armazenar os dados do elemento Data.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • Em vez de analisar o fluxo de bits, crie a nova estrutura, em seguida, anexe os dados a ela. O ESQL a seguir é um exemplo de como fazer isso:
    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;

Duas destas abordagens criam a mesma estrutura em árvore. A primeira abordagem é recomendada pois o conhecimento explícito da estrutura em árvore que o analisador BLOB requer não está construída no fluxo.

Mais comumente, o nó Compute precisa construir uma árvore para um documento MIME multipartes. O ESQL a seguir é um exemplo de como fazer isso, incluindo a configuração do Content-Type de nível superior por meio da propriedade 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);

Modificando uma Árvore MIME Existente

Este ESQL de exemplo inclui uma nova parte MIME em uma mensagem MIME multipartes existente. Se a mensagem não for multipartes, ela não será modificada:
SET OutputRoot = InputRoot;

-- Verifique se a mensagem MIME é multipartes ou não.
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';

  -- Esta é uma maneira artificial de criar alguns dados BLOB.
  DECLARE newBlob BLOB '4f6e652074776f2074687265650d0a';
  CREATE LASTCHILD OF P.Data DOMAIN('BLOB') PARSE(newBlob);
END IF;

Gerenciando Content-Type

Quando criar uma nova árvore de mensagens MIME ou quando modificar o valor da cadeia de limite MIME, certifique-se de que o cabeçalho MIME Content-Type esteja configurado corretamente. Configure o valor ContentType na subárvore Propriedades do intermediário para fazer isso. O exemplo a seguir mostra o valor ContentType sendo configurado para uma parte MIME com conteúdo simples:
SET OutputRoot.Properties.ContentType = 'text/plain';
Não configure o valor de Content-Type diretamente na árvore MIME nem nas árvores HTTP. Isso pode fazer com que o valor seja ignorado ou utilizado de forma inconsistente.
Conceitos relacionados
Analisador e Domínio MIME
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Modelagem de Mensagens
Tarefas relacionadas
Manipulando o Conteúdo do Corpo da Mensagem
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Referências relacionadas
Campos de Cabeçalho Padrão MIME
Nó Compute
Nó Database
Nó Filter
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac30000_