Manipulando Mensagens no Domínio MIME

Este tópico explica como lidar com mensagens que pertencem ao domínio MIME e 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:

Você pode 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.

Os exemplos a seguir mostram como manipular mensagens MIME:

Criando uma Nova Árvore MIME

Um fluxo de mensagens muitas vezes recebe, modifica e retorna uma mensagem MIME. Nesse 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 XMLNS, e retornar uma mensagem MIME, será necessário criar uma árvore MIME válida. Utilize o seguinte exemplo de ESQL em um nó Cálculo 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 deve garantir que o MIME Content-Type esteja definido corretamente, conforme explicado em Gerenciando Content-Type. O fluxo então deve incluir os dados da mensagem na árvore MIME. Os exemplos de ESQL a seguir mostram como você pode fazer isso. Em cada caso, um elemento Dados é criado com o domínio BLOB.
  • É utilizado um fluxo de bits de outra parte da árvore. Esse exemplo mostra como um fluxo de bits poderia ser criado de uma mensagem XML 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.

Mais comumente, o nó Compute deve criar uma árvore para um documento MIME de várias partes. O seguinte exemplo de ESQL mostra como você pode fazer isso, incluindo a configuração da propriedade de nível superior Content-Type.
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

Esse ESQL de exemplo inclui uma nova parte MIME em uma mensagem MIME de várias partes existente. Se a mensagem não for de várias partes, 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

Ao criar uma nova árvore de mensagens MIME, ou ao modificar o valor da cadeia de limite MIME, certifique-se de que o cabeçalho MIME Content-Type esteja definido corretamente, configurando o valor ContentType na subárvore Propriedades (Properties) do intermediário. O seguinte exemplo mostra como definir o valor ContentType para uma parte MIME com conteúdo simples:
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.
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
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última atualização : 2009-02-13 16:11:55

ac30000_