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.
- 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
- Erstellen Sie den Nachrichtenfluss 'addev6' mit folgendem Zuordnungsinhalt: MQEmpfangsknoten > Zuordnungsknoten > MQSendeknoten.
- Öffnen Sie die Zuordnung, und wählen Sie 'addev6in' als Quelle und 'addev6out' als Ziel aus.
- 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";
- 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;
}
}
- 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.
- Erweitern Sie im Spreadsheetfenster des Nachrichtenzuordnungseditor die Zielnachricht, und setzen Sie das Ziel 'decval' auf den Wert esql:decFromBinary($source/comp:addev6in/bval).
- Setzen Sie das Ziel 'fltval' auf den Wert esql:fltFromBinary($source/comp:addev6in/bval).
- Setzen Sie das Ziel 'intval' auf den Wert esql:intFromBinary($source/comp:addev6in/bval).
- Erweitern Sie das Ziel 'Properties' und richten die folgenden Werte ein:
Nachrichtentyp | 'addev6out
- Erstellen Sie folgende Instanznachricht mit den entsprechenden RFH2-Headern:
<comp:addev6in xmlns:comp="http://www.complex.net">
<bval>
<![CDATA[64656376616c20202031342e3238666c7476616c
2020312e34452b32696e7476616c2020202020313230]]>
</bval>
</comp:addev6in>
Setzen Sie nun die Nachrichtengruppe und den Nachrichtenfluss ein.