このサンプルは、Java のユーザー定義メッセージ処理ノードを Filter ノードとして使用する方法の例を示しています。 SearchFilter ノードは、20 の顧客名を含む XML メッセージ内から特定の顧客名を検索します。
下の図は、SearchFilter サンプル・メッセージ・フローを示しています。
SearchFilter ノードは、XML 入力メッセージの内容から、SearchName エレメント内に含まれているストリングを検索します。
以下に例を示します。
<SearchName>
顧客の姓
</SearchName>
検索名が XML 入力メッセージに現れる場合、メッセージの末尾に顧客の氏名が追加されます。 たとえば、"John Smith" が入力メッセージ内の 20 の顧客名の 1 つであり、ストリング "Smith" が SearchName エレメントに含まれている場合、SearchFilter ノードは "John Smith" をメッセージの末尾に追加します。
このサンプルでは、顧客の氏名が検出された場合、それがメッセージに 5 回追加されます。 これは SearchFilter ノードの追加機能を示しています。 以下のコード例は、Java ソース・ファイル com.ibm.broker.ude.samples.SearchFilterNode.java から取られたものであり、顧客名をメッセージに 5 回追加する方法を示しています。
// 検索名が見つかった場合は、<Result> タグを出力メッセージに追加します
if (customerElement.getFirstChild().getValue().equals(searchName)) {
// 検索名が見つかったことを示します
result = true;
// ストリング・バッファーを使用して 5 つのフルネームの連結を構成します
// 通常のストリング連結よりもパフォーマンスが向上します
StringBuffer fiveNames = new StringBuffer();
fiveNames.append(customerElement.getLastChild().getValue());
fiveNames.append(" ");
fiveNames.append(searchName);
fiveNames.append(" ");
searchName = fiveNames.toString();
for (counter = 0; counter < 4; counter++) {
fiveNames.append(searchName);
}
// 新しい <Result> タグを、<Message1> の子として出力メッセージに追加します
newtag = topOfBody.createElementAsLastChild(MbElement.TYPE_NAME, "Result", fiveNames.toString());
terminal = getOutputTerminal("True");
}
Java ソース・ファイル com.ibm.broker.ude.samples.SearchFilterNode.java は、Java プロジェクト UDESampleJavaCode 内にあります。
検索名が XML 入力メッセージ内で見つからない場合、ストリング「Not found」が SearchFilter ノードの LocalEnvironment ツリーに保管されます。 「NotFound」Compute ノードはストリング「Not found」を出力メッセージに追加します。
SearchFilter サンプルは以下のキューを使用します。