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

Convertir EBCDIC NL en ASCII CR LF

Tal vez desee cambiar caracteres de nueva línea (NL) en un mensaje de texto por los pares de caracteres de retorno de carro (CR) y salto de línea (LF). Este ejemplo muestra una forma en que puede convertir estos caracteres.

Esta conversión puede resultar útil si se envían mensajes de una plataforma EBCDIC (que utilice, por ejemplo, CCSID 1047) a una plataforma ASCII (que utilice, por ejemplo, CCSID 437). Pueden producirse problemas porque el carácter NL de EBCDIC hex '15' se convierte en el carácter ASCII indefinido hex '7F'. La página de códigos ASCII no tiene ningún punto de código correspondiente para el carácter NL.

En este ejemplo, se crea un flujo de mensajes que interpreta el mensaje de entrada como un mensaje del dominio BLOB. Este mensaje se pasa a un nodo ResetContentDescriptor para restablecer los datos en un mensaje del dominio MRM. El mensaje se denomina msg_nl (un conjunto de elementos periódicos de serie de caracteres delimitado por caracteres NL de EBCDIC). A continuación, se utiliza un nodo Compute para crear una salida basada en otro mensaje del dominio MRM llamado msg_crlf (un conjunto de elementos periódicos de serie de caracteres delimitados por pares CR LF). A continuación, el dominio de mensaje vuelve a cambiar a BLOB en otro nodo ResetContentDescriptor. Este flujo de mensajes se muestra en el diagrama siguiente.

El diagrama muestra un flujo de mensajes lineal, formado por los siguientes nodos: MQInput, con el terminal de salida conectado a ResetContentDescriptor, con el terminal de salida conectado a Compute, con el terminal de salida conectado a ResetContentDescriptor1, con el terminal de salida conectado a MQOutput. No hay ningún otro terminal conectado.

Las siguientes instrucciones muestran cómo crear los mensajes y configurar el flujo de mensajes.

  1. Creación de modelos de mensaje para los mensajes del dominio MRM:
    1. Cree un proyecto de conjunto de mensajes llamado myProj.
    2. Cree un conjunto de mensajes llamado myMessageSet con un formato físico TDS (el nombre predeterminado es Text1).
    3. Cree un elemento string1 de tipo xsd:string.
    4. Cree un tipo complejo llamado t_msg_nl y especifique las siguientes propiedades de tipo complejo:
      • Composición = Conjunto ordenado
      • Validación de contenido = Cerrado
      • Separación de elementos de datos = Todos los elementos delimitados
      • Delimitador = <U+0085> (hex '0085' es la representación UTF-16 de un carácter NL)
      • Repetición =
      • Mín apariciones = 1
      • Máx apariciones = 50 (se da por supuesto que el texto del mensaje no tiene más de 50 líneas)
    5. Añada el elemento string1 y establezca la siguiente propiedad:
      • Delimitador de elemento de repetición = <U+0085>
    6. Cree un mensaje msg_nl y establezca el tipo complejo asociado a él en t_msg_nl
    7. Cree un tipo complejo llamado t_msg_crlf y especifique las siguientes propiedades de tipo complejo:
      • Composición = Conjunto ordenado
      • Validación de contenido = Cerrado
      • Separación de elementos de datos = Todos los elementos delimitados
      • Delimitador = <CR><LF> (<CR> y <LF> son parámetros para los caracteres CR y LF)
      • Repetición =
      • Mín apariciones = 1
      • Máx apariciones = 50
    8. Añada el elemento string1 y establezca la siguiente propiedad:
      • Delimitador de elemento de repetición = <CR><LF>
    9. Cree un mensaje msg_crlf y establezca el tipo complejo en t_msg_crlf.
  2. Configure el flujo de mensajes que se muestra en la figura anterior:
    1. Empiece por el nodo MQInput:
      • Establezca Dominio de mensajes = BLOB
      • Establezca Nombre de cola = <El nombre de su cola de mensajes de entrada>
    2. Añada el nodo ResetContentDescriptor, conectado a la terminal de salida del nodo MQInput:
      • Establezca Dominio de mensajes = MRM
      • Seleccione Restablecer dominio de mensaje
      • Establezca Conjunto de mensajes = <ID de conjunto de mensajes> (este campo tiene un máximo de 13 caracteres)
      • Seleccione Restablecer conjunto de mensajes
      • Establezca Tipo de mensaje = msg_nl
      • Seleccione Restablecer tipo de mensaje
      • Establezca Formato del mensaje = Text1
      • Seleccione Restablecer formato de mensaje
    3. Añada el nodo Compute, conectado a la terminal de salida del nodo ResetContentDescriptor:
      • Entre un nombre para el Módulo ESQL de este nodo, o acepte el valor predeterminado (<nombre del flujo de mensajes>_Compute).
      • Pulse el botón derecho del ratón en el nodo Compute y seleccione Abrir ESQL. Añada el siguiente código ESQL en el módulo:
        -- Declare variables locales de trabajo
        DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
        
        -- Bucle para copiar todas las cabeceras de mensajes del mensaje de entrada al de salida
        WHILE I < J DO
         	SET OutputRoot.*[I] = InputRoot.*[I];
         	SET I=I+1;
        END WHILE; 
        
        -- Establezca un nuevo tipo de mensaje de salida que utilice el delimitador CRLF
        SET OutputRoot.Properties.MessageType = 't_msg_crlf';
        
        -- Bucle para copiar cada instancia del hijo de string1 dentro del texto del mensaje
        SET I = 1;
        SET J = CARDINALITY("InputBody"."string1"[]);
        WHILE I <= J DO
          SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I];
          SET I=I+1;
        END WHILE;

        La utilización de una variable, J, inicializada para el valor de la cardinalidad de las cabeceras existentes en el mensaje, es más eficaz que calcular la cardinalidad en cada iteración del bucle, lo que sucede si codifica la siguiente sentencia WHILE:

        WHILE I < CARDINALITY(InputRoot.*[]) DO
    4. Añada el nodo ResetContentDescriptor1, conectado al terminal de salida del nodo Compute:
      • Establezca Dominio de mensajes = BLOB
      • Seleccione Restablecer dominio de mensaje.
    5. Por último, añada el nodo MQOutput, conectado al terminal de salida del nodo ResetContentDescriptor1. Configure sus propiedades para dirigir el mensaje de salida a la o las colas necesarias.
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:23


Tema de tareaTema de tarea | Versión 8.0.0.5 | ac11630_