ユーザー定義の Java プロシージャーを使用したメッセージ・フローの作成

始める前に
これは、複雑なメッセージのエンリッチメントを実行するシナリオの第 11 段階です。このトピックでは、ユーザー定義の Java プロシージャーを使用してメッセージ・フローを作成する方法について説明します。また、対応するメッセージ・モデルおよびインスタンス文書の作成についても説明します。
  1. COMPLEX メッセージ定義のネーム・スペース www.complex.net で、以下の構造を持つ addev6in および addev6out というメッセージを作成します。
    addev6in
        hexdata (xsd:hexBinary) local element
    addev6out
        decval (xsd:decimal) local element
        fltval (xsd:float) local element
        intval (xsd:int) local element
  2. MQInput > Mapping > MQOutput というマッピングを含む addev6 というメッセージ・フローを作成します。
  3. マップを開き、addev6in をソース、addev6out をターゲットとして選択します。
  4. MAPPING3_COMPLEX_flows プロジェクトで addev6 という名前の ESQL ファイルを作成し、以下の関数をそこに入れます。
    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. 以下の内容を持つ addev6.java という Java ソース・ファイルを作成します。
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Return decimal element from binary string
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Look for element named decval
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Convert the value to decimal type
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // Return float element from binary string
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Look for element named fltval
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Convert the value to float type
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Return integer element from binary string
        //
        public static Long intFromBinary( byte[] hexval) {
        // Look for element named intval
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Convert the value to integer type
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Locate the named element and its value in the binary data
        //
        private static String findElement( byte[] hexval, String search ) {
        // Convert bytes to string
        String hexstr = new String(hexval);
        // Fixed length label/value pairs (length=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Loop over number of label/value pairs
        for ( int i=0; i < nvals; i ++ ) {
            // get start position
            int st = i * 14;
            // label is length 6
            int endl = st + 6;
            // value is length 8
            int endv = endl + 8;
            // extract label and value from string
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Check whether the current pair has the label requested
            if ( label[i].compareTo( search) == 0 ) {
            // trim padding from the value
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Java コードをコンパイルし、クラス・ファイルのロケーションをシステムのクラスパスに追加します。 CLASSPATH を編集する場合、Windows を再始動する必要があります。
  7. メッセージ・マッピング・エディターの「スプレッドシート」ペインで、ターゲット・メッセージを展開し、ターゲットの decval の値を esql:decFromBinary($source/comp:addev6in/bval) に設定します。
  8. ターゲットの fltval を esql:fltFromBinary($source/comp:addev6in/bval) に設定します。
  9. ターゲットの intval を esql:intFromBinary($source/comp:addev6in/bval) に設定します。
  10. プロパティー・ターゲットを展開し、値を以下のように設定します。
    MessageType     |     'addev6out
  11. 適切な RFH2 ヘッダーを持つ、以下のインスタンス・メッセージを作成します。
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c
    2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
以下のリソースが作成されました。
メッセージ・セットおよびメッセージ・フローをデプロイします。

メッセージ・セットおよびメッセージ・フローのデプロイ

これは、複雑なメッセージのエンリッチメントを実行するシナリオの最終段階です。このトピックでは、メッセージ・セットおよびメッセージ・フローをデプロイし、ブローカーを使用してインスタンス・メッセージを実行する方法について説明します。
  1. addev6 という bar ファイルを作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev6 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
出力メッセージは、以下のようになります。
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>
このシナリオは完了しました。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ar25251_11_