Nachrichtenfluss mit einer benutzerdefinierten Java-Prozedur entwickeln

Vorbereitungen:
Dies ist der 11. Abschnitt des Szenarios zum Ausführen einer Erweiterung einfacher Nachrichteninhalte. In diesem Abschnitt wird veranschaulicht, wie Sie einen Nachrichtenfluss mit einer benutzerdefinierten Java-Prozedur entwickeln. Des Weiteren erfahren Sie, wie Sie entsprechende Nachrichtenmodelle und Instanzdokumente entwickeln.
  1. Erstellen Sie in der Nachrichtendefinition 'COMPLEX' im Namensbereich 'www.complex.net' die Nachrichten 'addev6in' und 'addev6out' mit folgenden Strukturen:
    addev6in
        hexdata                (xsd:hexBinary) lokales Element
    addev6out
        decval                  (xsd:decimal) lokales Element
        fltval                     (xsd:float) lokales Element
        intval                    (xsd:int) lokales Element
  2. Erstellen Sie den Nachrichtenfluss 'addev6' mit folgendem Zuordnungsinhalt: MQEmpfangsknoten > Zuordnungsknoten > MQSendeknoten.
  3. Öffnen Sie die Zuordnung, und wählen Sie 'addev6in' als Quelle und 'addev6out' als Ziel aus.
  4. Erstellen Sie im Projekt 'MAPPING3_COMPLEX_flows' eine ESQL-Datei namens 'addev6', und fügen Sie folgende Funktionen ein:
    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. Erstellen Sie eine Java-Quellendatei (addev6.java) mit folgenden Inhalten:
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Dezimales Element aus Binärzeichenfolge zurückgeben
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Nach Element namens 'decval' suchen
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Wert in Dezimaltyp konvertieren
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // FLOAT-Element aus Binärzeichenfolge zurückgeben
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Nach Element namens 'fltval' suchen
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Wert in Datentyp FLOAT konvertieren
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Element des Typs INTEGER aus Binärzeichenfolge zurückgeben     //
        public static Long intFromBinary( byte[] hexval) {
        // Nach Element namens 'intval' suchen
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Wert in ganzzahligen Typ konvertieren
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Das benannte Element und den zugehörigen Wert in den binären Daten suchen
        //
        private static String findElement( byte[] hexval, String search ) {
        // Byte in Zeichenfolge konvertieren
        String hexstr = new String(hexval);
        // Kennung/Wertpaare mit fester Länge (Länge=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Schleife über Anzahl der Kennung/Wert-Paare
        for ( int i=0; i < nvals; i ++ ) {
            // Anfangsposition abrufen
            int st = i * 14;
            // Kennung hat Länge 6
            int endl = st + 6;
            // Wert hat Länge 8
            int endv = endl + 8;
            // Kennung und Wert aus Zeichenfolge extrahieren
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Prüfen, ob das aktuelle Paar über die erforderliche Kennung verfügt
            if ( label[i].compareTo( search) == 0 ) {
            // Auffüllzeichen aus Wert entfernen
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Kompilieren Sie den Java-Code, und fügen Sie dem Klassenpfad des Systems die Adresse der Klassendatei hinzu. Möglicherweise muss Windows neu gestartet werden, wenn Sie die Variable CLASSPATH bearbeiten.
  7. Erweitern Sie im Spreadsheetfenster des Nachrichtenzuordnungseditor die Zielnachricht, und setzen Sie das Ziel 'decval' auf den Wert esql:decFromBinary($source/comp:addev6in/bval).
  8. Setzen Sie das Ziel 'fltval' auf den Wert esql:fltFromBinary($source/comp:addev6in/bval).
  9. Setzen Sie das Ziel 'intval' auf den Wert esql:intFromBinary($source/comp:addev6in/bval).
  10. Erweitern Sie das Ziel 'Properties' und richten die folgenden Werte ein:
    Nachrichtentyp     |     'addev6out
  11. Erstellen Sie folgende Instanznachricht mit den entsprechenden RFH2-Headern:
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c
    2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
Sie haben folgende Ressourcen erstellt:
Setzen Sie nun die Nachrichtengruppe und den Nachrichtenfluss ein.

Nachrichtengruppe und Nachrichtenfluss einsetzen

Dies ist der letzte Abschnitt des Szenarios zum Ausführen einer Erweiterung einfacher Nachrichteninhalte. Dieser Abschnitt veranschaulicht, wie Sie die Nachrichtengruppe und den Nachrichtenfluss einsetzen und die Instanznachrichten über den Broker ausführen können.
  1. Erstellen Sie eine BAR-Datei names 'addev6'.
  2. Fügen Sie die Nachrichtengruppe 'MAPPING3_COMPLEX_messages' und den Nachrichtenfluss 'addev6' der BAR-Datei hinzu.
  3. Setzen Sie die BAR-Datei für den Broker ein.
  4. Stellen Sie die Instanzdokumente in die Eingabewarteschlange.
Die Ausgabenachricht sieht wie folgt aus:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>
Sie haben dieses Szenario nun abgeschlossen.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ar25251_11_