WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Manipulación de mensajes en el dominio MIME

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.

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

Creación de un nuevo árbol MIME

Con frecuencia, un flujo de mensajes recibe, modifica y devuelve un mensaje MIME. En este caso puede trabajar con el árbol MIME válido que se crea cuando se analiza el mensaje de entrada. Si un flujo de mensajes recibe entrada de otro dominio, por ejemplo XMLNS, y devuelve un mensaje MIME, debe crear un árbol MIME válido. Utilice el siguiente ejemplo 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 debe asegurarse de que el tipo de contenido MIME se ha establecido correctamente, como se explica en el apartado Gestión del tipo de contenido. A continuación, el flujo debe añadir los datos de mensaje al árbol MIME. Los ejemplos ESQL siguientes muestran cómo puede realizar esta operación. En cada caso, se crea un elemento Data con el BLOB de dominio.
  • Se utiliza una corriente de bits de otra parte del árbol. Este ejemplo muestra cómo se puede crear una corriente de bits a partir de un mensaje XML que recibe el flujo de mensajes. Entonces el flujo invoca el analizador BLOB para almacenar los datos bajo el elemento Data.
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
     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, tal como se muestra en este ejemplo 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;

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.

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

Modificación de un árbol MIME existente

Este ESQL de ejemplo añade una parte MIME nueva a un mensaje MIME de varias partes existente. Si el mensaje no es de varias partes, no se modifica.
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;
Si recibe un mensaje MIME, por ejemplo mediante un nodo EmailInput, y conoce el formato del mensaje, es conveniente volver a analizar el mensaje. Por ejemplo:
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData  DOMAIN('XMLNSC') 
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);

Gestión del tipo de contenido

Al crear un nuevo árbol de mensaje MIME, o al modificar el valor de la serie de límite de MIME, asegúrese de que la cabecera de tipo de contenido (Content-Type) MIME esté establecida correctamente, estableciendo el valor ContentType en el subárbol de Propiedades del intermediario. El ejemplo siguiente muestra cómo establecer el valor de ContentType 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, porque el valor se ignorará o se utilizará de forma no coherente.
Cuando reciba un mensaje MIME, puede filtrar o direccionar el contenido del mensaje basándose en el Content-Type. El ejemplo siguiente muestra una consulta XPath que se puede utilizar en un nodo Route para filtrar el contenido en función de si el mensaje contiene un adjunto o no:
starts-with($Root/MIME/Content-Type,"multipart")
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:58:35


Tema de conceptoTema de concepto | Versión 8.0.0.5 | ac30000_