Sviluppo di un flusso di messaggi mediante una procedura Java definita dall'utente

Prima di iniziare
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.
  1. 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
  2. Creare un flusso di messaggi denominato addev6, che contiene la seguente mappatura: MQInput > Mapping > MQOutput.
  3. Aprire la mappa e selezionare addev6in come origine e addev6out come destinazione.
  4. 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";
  5. 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;
        }
    }
  6. 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.
  7. 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).
  8. Impostare il fltval di destinazione su esql:fltFromBinary($source/comp:addev6in/bval).
  9. Impostare l'intval di destinazione su esql:intFromBinary($source/comp:addev6in/bval).
  10. Espandere le proprietà di destinazione ed impostare i valori come mostrato:
    MessageType     |     'addev6out
  11. Creare il seguente messaggio di istanza, con le intestazioni RFH2 appropriate:
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c
    2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
Sono state create le seguenti risorse:
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.
  1. Creare un file bar denominato addev6.
  2. Aggiungere la serie di messaggi MAPPING3_COMPLEX_messages ed il flusso di messaggi addev6 al file bar.
  3. Distribuire il file bar al broker.
  4. Inserire i documenti di istanza nella coda di input.
Il messaggio di output risulta simile al seguente:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>
A questo punto, il presente scenario è stato completato.
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ar25251_11_