Questa è l'undicesima fase dello scenario per l'esecuzione dell'ampliamento di
messaggi semplici. In questo argomento viene mostrato come sviluppare un flusso di messaggi mediante una procedura Java definita dall'utente. Implica inoltre lo sviluppo di documenti di
istanza e di modelli di messaggi corrispondenti.
Nella definizione dei messaggi COMPLEX, nello spazio dei nomi www.complex.net,
creare messaggi denominati addev6in e addev6out, che hanno le seguenti strutture:
addev6in
hexdata (xsd:hexBinary) local element
addev6out
decval (xsd:decimal) local element
fltval (xsd:float) local element
intval (xsd:int) local element
Creare un flusso di messaggi denominato addev6, che contiene la seguente
mappatura: MQInput > Mapping > MQOutput.
Aprire la mappa e selezionare addev6in come origine e addev6out come
destinazione.
Nel progetto MAPPING3_COMPLEX_flows, creare un file ESQL denominato
addev6 ed inserirvi queste funzioni:
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";
Creare un file di origine java denominato addev6.java, che ha il seguente
contenuto:
import java.lang.*;
import java.math.*;
public class addev6 {
//
// Restituisce l'elemento decimal dalla stringa binaria
//
public static BigDecimal decFromBinary( byte[] hexval) {
// Ricerca l'elemento denominato decval
String search = "decval";
String snval = findElement(hexval ,search );
// Converte il valore in tipo decimale
BigDecimal numval = new BigDecimal(snval);
return numval;
}
//
// Restituisce l'elemento float dalla stringa binaria
//
public static Double fltFromBinary( byte[] hexval) {
// Ricerca l'elemento denominato fltval
String search = "fltval";
String snval = findElement(hexval ,search );
// Converte il valore in tipo float
Double numval = new Double(snval);
return numval;
}
//
// Restituisce l'elemento integer dalla stringa binaria
//
public static Long intFromBinary( byte[] hexval) {
// Ricerca l'elemento denominato intval
String search = "intval";
String snval = findElement(hexval ,search );
// Converte il valore in tipo integer
Long numval = new Long(snval);
return numval;
}
//
// Individua l'elemento denominato ed il relativo valore nei dati binari
//
private static String findElement( byte[] hexval, String search ) {
// Converte i byte in formato stringa
String hexstr = new String(hexval);
// Coppie etichetta/valore a lunghezza fissa (lunghezza=14)
int nvals = hexstr.length() / 14;
String numval = "";
String[] label = new String[nvals];
String[] value = new String[nvals];
// Esegue un loop sulle coppie etichetta/valore
for ( int i=0; i < nvals; i ++ ) {
// posizione di avvio
int st = i * 14;
// etichetta di lunghezza 6
int endl = st + 6;
// valore di lunghezza 8
int endv = endl + 8;
// estrae l'etichetta e il valore dalla stringa
label[i] = hexstr.substring( st, endl);
value[i] = hexstr.substring( (endl+1), endv);
// Verifica se la coppia attuale ha l'etichetta richiesta
if ( label[i].compareTo( search) == 0 ) {
// ritaglia la spaziatura dal valore
numval = value[i].trim();
}
}
return numval;
}
}
Compilare il codice Java e aggiungere l'ubicazione del file di classi nel
classpath di sistema. Potrebbe essere necessario riavviare Windows se
si modifica CLASSPATH.
Nel riquadro Foglio elettronico dell'editor di mappatura dei messaggi,
espandere il messaggio di destinazione ed impostare il decval di destinazione sul valore esql:decFromBinary($source/comp:addev6in/bval).
Impostare il fltval di destinazione su esql:fltFromBinary($source/comp:addev6in/bval).
Impostare l'intval di destinazione su esql:intFromBinary($source/comp:addev6in/bval).
Espandere le proprietà di destinazione ed impostare i valori come mostrato:
MessageType | 'addev6out
Creare il seguente messaggio di istanza, con le intestazioni RFH2 appropriate:
messaggi denominati addev6in e addev6out in una definizione di messaggi chiamata
COMPLEX
un flusso di messaggi denominato addev6, che contiene il file di mappatura addev6_Mapping.msgmap
e il file ESQL addev6.esql
un file di origine Java denominato addev6.java e un file di classi compilato chiamato
addev6.class in un'ubicazione in cui il sistema CLASSPATH può individuarlo
file che contengono messaggi di istanza
A questo punto distribuire la serie ed i flusso di messaggi.
Distribuzione della serie e del flusso di messaggi
Questa è la fase finale dello scenario per l'esecuzione dell'ampliamento di
messaggi semplici. In questo argomento viene mostrato come distribuire la serie ed il flusso di messaggi ed eseguire il messaggio di istanza mediante il broker.
Creare un file bar denominato addev6.
Aggiungere la serie di messaggi MAPPING3_COMPLEX_messages ed il flusso di messaggi
addev6 al file bar.
Distribuire il file bar al broker.
Inserire i documenti di istanza nella coda di input.
Il messaggio di output risulta simile al seguente: