Desarrollo de un flujo de mensajes utilizando un procedimiento Java definido por el usuario

Antes de empezar
Esta es la undécima fase del escenario para realizar el enriquecimiento de mensaje simple. Este tema muestra cómo desarrollar un flujo de mensajes utilizando un procedimiento Java definido por el usuario. También incluye el desarrollo de los documentos de instancia y los modelos de mensaje correspondientes.
  1. En la definición de mensaje COMPLEX, en el espacio de nombres www.complex.net, cree los mensajes denominados addev6in y addev6out con las estructuras siguientes:
    addev6in
        hexdata                (xsd:hexBinary) local element
    addev6out
        decval                  (xsd:decimal) local element
        fltval                     (xsd:float) local element
        intval                    (xsd:int) local element
  2. Cree un flujo de mensajes denominado addev6, que contenga la correlación siguiente: MQInput -> Mapping -> MQOutput.
  3. Abra la correlación y seleccione addev6in como el origen y addev6out como el destino.
  4. En el proyecto MAPPING3_COMPLEX_flows, cree un archivo ESQL llamado addev6 y coloque estas funciones en dicho archivo:
    CREATE PROCEDURE decFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.decFromBinary";
    CREATE PROCEDURE fltFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.fltFromBinary";
    CREATE PROCEDURE intFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.intFromBinary";
  5. Cree un archivo fuente Java denominado addev6.java, con el contenido siguiente:
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Devolver elemento decimal de serie binaria
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Buscar elemento llamado decval
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo decimal
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // Devolver elemento flotante de serie binaria
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Buscar elemento llamado fltval
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo flotante
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Devolver elemento entero de serie binaria
        //
        public static Long intFromBinary( byte[] hexval) {
        // Buscar elemento llamado intval
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Convertir el valor a tipo entero
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Localizar el elemento especificado y su valor en los datos binarios
        //
        private static String findElement( byte[] hexval, String search ) {
        // Convertir bytes en serie
        String hexstr = new String(hexval);
        // Parejas etiqueta/valor de longitud fija (longitud=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Ejecutar bucle por varias parejas etiqueta/valor
        for ( int i=0; i < nvals; i ++ ) {
            // obtener posición inicial
            int st = i * 14;
            // la etiqueta es longitud 6
            int endl = st + 6;
            // el valor es longitud 8
            int endv = endl + 8;
            // extraer etiqueta y valor de la serie
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Comprobar si la pareja actual tiene la etiqueta solicitada
            if ( label[i].compareTo( search) == 0 ) {
            // ajustar relleno del valor
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Compile el código java y añada la ubicación del archivo de clase a la classpath del sistema. Es posible que tenga que reiniciar Windows si edita la variable CLASSPATH.
  7. En el panel de hoja de cálculo del Editor de correlaciones de mensajes, expanda el mensaje de destino y establezca el decval de destino en el valor esql:decFromBinary($source/comp:addev6in/bval).
  8. Establezca el fltval de destino en esql:fltFromBinary($source/comp:addev6in/bval).
  9. Establezca el intval de destino en esql:intFromBinary($source/comp:addev6in/bval).
  10. Expanda el destino Propiedades y establezca los valores que se muestran:
    MessageType     |     'addev6out
  11. Cree el siguiente mensaje de instancia, con las cabeceras RFH2 adecuadas:
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c
    2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
Ha creado los recursos siguientes:
Ahora despliegue el conjunto de mensajes y el flujo de mensajes.

Despliegue del conjunto de mensajes y el flujo de mensajes

Esta es la fase final del escenario para realizar el enriquecimiento de mensaje simple. Este tema muestra cómo desplegar el conjunto de mensajes y el flujo de mensajes, y cómo ejecutar el mensaje de instancia a través del intermediario.
  1. Cree un archivo bar denominado addev6.
  2. Añada el conjunto de mensajes MAPPING3_COMPLEX_messages y el flujo de mensajes addev6 al archivo bar.
  3. Despliegue el archivo bar en el intermediario.
  4. Coloque los documentos de instancia en la cola de entrada.
El mensaje de salida será parecido a éste:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>
Ya ha completado este ejemplo.
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ar25251_11_