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.
- 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
- Cree un flujo de mensajes denominado addev6, que contenga la correlación
siguiente: MQInput -> Mapping -> MQOutput.
- Abra la correlación y seleccione addev6in como el origen y addev6out
como el destino.
- 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";
- 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;
}
}
- 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.
- 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).
- Establezca el fltval de destino en
esql:fltFromBinary($source/comp:addev6in/bval).
- Establezca el intval de destino en
esql:intFromBinary($source/comp:addev6in/bval).
- Expanda el destino Propiedades y establezca los valores
que se muestran:
MessageType | 'addev6out
- 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>
Ahora despliegue el conjunto de mensajes y
el flujo de mensajes.