Este ejemplo muestra que un nodo de proceso de mensajes en Java definido por el usuario puede usarse como nodo de filtro. El nodo SearchFilter busca un nombre de cliente específico en un mensaje XML que contiene veinte nombres de clientes.
La siguiente figura muestra el flujo de mensajes del ejemplo SearchFilter:
El nodo SearchFilter
busca en el contenido del mensaje de entrada XML una serie de caracteres que está
contenida en el elemento
SearchName. Por ejemplo:
<SearchName>
Apodo de un cliente
</SearchName>
Si el nombre buscado aparece en el mensaje de entrada XML, el nombre completo del usuario se añadirá al final del mensaje. Por ejemplo, si "John Smith" es uno de los veinte nombres de clientes que hay en el mensaje de entrada y el elemento SearchName contiene la serie de caracteres "Smith", el nodo SearchFilter añade "John Smith" al final del mensaje.
En este ejemplo, cuando se encuentra el nombre completo del cliente, se añade al mensaje cinco veces. Esto presenta otra función del nodo SearchFilter. El siguiente código de ejemplo se toma del archivo de origen Java com.ibm.broker.ude.samples.SearchFilterNode.java y muestra cómo se añade el nombre del cliente al mensaje cinco veces.
// si se ha encontrado el nombre de búsqueda, añada el código <Result>
// al mensaje de salida
if (customerElement.getFirstChild().getValue().equals(searchName)) {
// indica que se ha encontrado el nombre de búsqueda
result = true;
// construye una concatenación de 5 nombres completos usando StringBuffer
// ya que tiene una rendimiento superior a la concatenación String normal
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);
}
// Añadir un nuevo código <Result> al mensaje de salida como último
// hijo de <Message1>
newtag = topOfBody.createElementAsLastChild(MbElement.TYPE_NAME, "Result", fiveNames.toString());
terminal = getOutputTerminal("True");
}
El archivo de origen Java com.ibm.broker.ude.samples.SearchFilterNode.java se encuentra en el proyecto Java UDESampleJavaCode.
Si el nombre buscado no se encuentra en el mensaje de entrada XML, la serie de caracteres "No encontrado" se almacenará en el árbol LocalEnvironment del nodo SearchFilter. El nodo de cálculo "NotFound" añade la serie "No encontrado" al mensaje de salida.
El ejemplo SearchFilter utiliza las siguientes colas: