このサンプルは、Java のユーザー定義メッセージ処理ノードを Filter ノードとして使用する方法の例を示しています。 SearchFilter ノードは、20 の顧客名を含む XML メッセージ内から特定の顧客名を検索します。
下の図は、SearchFilter サンプル・メッセージ・フローを示しています。
SearchFilter ノードは、XML 入力メッセージの内容から、SearchName エレメント内に含まれているストリングを検索します。
以下に例を示します。
<SearchName>
顧客の姓
</SearchName>
検索名が XML 入力メッセージに表示される場合、メッセージの末尾に顧客の氏名が追加されます。 たとえば、"John Smith" が入力メッセージ内の 20 の顧客名の 1 つであり、ストリング "Smith" が SearchName エレメントに含まれている場合、SearchFilter ノードは "John Smith" をメッセージの末尾に追加します。
このサンプルでは、顧客の氏名が検出された場合、それがメッセージに 5 回追加されます。 このサンプルは、SearchFilter ノードの追加機能を示しています。 以下のコード例は、com.ibm.broker.ude.samples.SearchFilterNode.java Java ソース・ファイルから取られたものであり、顧客名をメッセージに 5 回追加する方法を示しています。
// if the search name was found then add <Result> tag to output message if (customerElement.getFirstChild().getValue().equals(searchName)) { // indicate that the search name has been found result = true; // construct a concatenation of 5 full names using String Buffer // as this has improved performance over ordinary String concatenation 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); } // Add a new <Result> tag to output message as the last child of <Message1> newtag = topOfBody.createElementAsLastChild(MbElement.TYPE_NAME, "Result", fiveNames.toString()); terminal = getOutputTerminal("True"); }
Java ソース・ファイル com.ibm.broker.ude.samples.SearchFilterNode.java は、 UDESampleJavaCode Java プロジェクト内にあります。
検索名が XML 入力メッセージ内で見つからない場合、ストリング「Not found」が SearchFilter ノードの LocalEnvironment ツリーに保管されます。 NotFound ノードはストリング「Not found」を出力メッセージに追加します。
SearchFilter サンプルは以下のキューを使用します。