viernes, 25 de junio de 2010

Recorriendo una secuencia de entrada con OpenESB

Como continuación al artículo en que comenzaba a hablar de los ESBs, y puente hacia un futuro tutorial más elaborado, explico hoy un caso que me ha resultado particularmente difícil de resolver, dado que no he encontrado muchos ejemplos.

Este mismo ejemplo lo he publicado en la Web DebugModeOn.

Poniéndonos en situación, tenemos un fichero xml que será la entrada a nuestro proceso Bpel, que contiene un elemento complejo, compuesto por una secuencia de elementos simples. Sirva como ejemplo el siguiente xsd.




        
            
                
                    
                        
                        
                  

Generamos un Bpel que lee esta información, y lo que queremos es que realice el mismo procesamiento para cada una de las temperaturas que se encuentre en la entrada. ¿Cómo lo hacemos? Tendremos que usar la actividad estructurada forEach, y configurarla como se muestra en la imagen.


Como comienzo para el contador utilizamos el valor 1, y como final la expresión count($PollIn.part1/ns0:Temperatura), donde PollIn es la variable de entrada al Bpel, leída del fichero xml, y que se evaluará como el número de temperaturas obtenidas.

A continuación tenemos que añadir al bloque forEach una actividad Assign, en la que cogeremos cada una de las temperaturas y haremos con ellas lo que corresponda. Si accedemos a la vista de mapeo de la asignación, veremos que dentro del mensaje PollIn, desplegando el árbol, hay un único elemento Temperatura, con sus atributos por debajo. Pues bien, si clicamos con el botón derecho sobre Temperatura, y seleccionamos la opción addPredicate() se abrirá otra ventana muy similar al propio mapeador. En ella asignaremos el contador del bloque forEach (que en nuestro caso se llama forEach1, ya que no lo hemos renombrado), al predicate que se muestra en el lado derecho.


Una vez hecho esto, en la vista de mapeo veremos que se ha creado un nuevo nodo por debajo de PollIn, con nombre Temperatura[$forEach1Counter]. Este elemento será el que contenga en cada iteración del forEach el valor actual, por lo que de él ya podemos obtener la información que nos interesa para continuar con el procesamiento.

Próximamente, un tutorial con un ejemplo de OpenESB que incluirá esta solución en un contexto más amplio.

No hay comentarios:

Publicar un comentario

Cualquier aportación será bienvenida