Manipulación de mensajes del dominio MIME

Este tema explica cómo tratar con mensajes que pertenecen al dominio MIME y que el analizador MIME analiza. Utilice esta información junto con la información del apartado Manipular el contenido del cuerpo del mensaje.

Un mensaje MIME no tiene que recibirse 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. Se utiliza el analizador MIME para procesar un mensaje si se aplica una de las condiciones siguientes:

Se puede manipular el árbol lógico utilizando ESQL antes de que se pase 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 alcanza un nodo de salida, se llama al analizador MIME para que vuelva a crear la corriente de bits desde el árbol lógico.

Los ejemplos siguientes muestran cómo manipular los mensajes MIME:

Creación de un nuevo árbol MIME

Normalmente un flujo de mensajes recibe, modifica y devuelve un mensaje MIME. En este caso puede trabajar con el árbol MIME válido creado cuando se analiza el mensaje de entrada. Si un flujo de mensajes recibe entrada de otro dominio, por ejemplo XML, y devuelve un mensaje MIME, necesitará crear un árbol MIME válido. Utilice el siguiente ESQL en un nodo Compute para crear la estructura de nivel superior para un árbol MIME de una sola parte:
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
El flujo de mensajes también necesita asegurarse de que el tipo de contenido MIME se ha establecido correctamente, como se explica en el apartado Gestión de tipo de contenido. Entonces el flujo necesita añadir los datos de mensaje al árbol MIME. El ESQL siguiente proporciona ejemplos de cómo se puede realizar esto. Tenga en cuenta que en cada caso los datos se crean con el BLOB de dominio.
  • Se utiliza una corriente de bits de otra parte del árbol. El ejemplo siguiente muestra cómo se puede crear una corriente de bits a partir de un mensaje XML que el flujo de mensajes ha recibido. Entonces el flujo invoca el analizador BLOB para almacenar los datos bajo el elemento Data.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • En lugar de analizar la corriente de bits, cree la nueva estructura y, a continuación, adjunte los datos a ella. El ESQL siguiente es un ejemplo de cómo realizar esta operación:
    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;

Estas dos propuestas crean la misma estructura de árbol. Se recomienda 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.

Lo más normal es que el nodo Compute necesite crear un árbol para un documento MIME de varias partes. El siguiente ESQL de ejemplo muestra cómo se puede realizar esta operación, incluyendo el establecimiento del tipo de contenido de nivel superior a través de la propiedad 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);

Modificación de un árbol MIME existente

Este ESQL de ejemplo añade una parte MIME nueva a un mensaje MIME existente de varias partes. Si el mensaje no tiene varias partes, no se modifica:
SET OutputRoot = InputRoot;

-- Comprobar si el mensaje MIME tiene 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;

Gestión de tipo de contenido

Al crear un nuevo árbol de mensaje MIME o al modificar el valor de la serie de caracteres de límite de MIME, deberá asegurarse de que la cabecera de tipo de contenido (Content-Type) MIME se haya establecido correctamente. Para ello establezca el valor de ContentType en el subárbol de propiedades del intermediario. El ejemplo siguiente muestra el valor de ContentType que se establece para una parte MIME con contenido simple:
SET OutputRoot.Properties.ContentType = 'text/plain';
No establezca el valor de Content-Type directamente en el árbol MIME o los árboles HTTP. Esto puede hacer que el valor se ignore o se utilice de forma incoherente.
Conceptos relacionados
Analizador y dominio MIME
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Manipular el contenido del cuerpo del mensaje
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Campos de cabeceras MIME estándar
Nodo Compute
Nodo Database
Nodo Filter
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac30000_