Hoy vamos a ver el funcionamiento y un ejemplo practico del mediator Iterate de WSO2. A traves de este mediador podremos dividir el mensaje en distintas partes, ejecutar una logica asociada a cada uno de ellas y luego enviarlas.
Ademas tambien puedes elegir si seguir con el flujo normal despues del mediador o no. Y si simplemente queremos dividir el mensaje pero no asociar una logica de envio a cada una de sus partes, es recomendable utilizar el mediador ForEach.
A continuacion vamos a indicar los atributos que componen a dicho mediador:
- expression: Campo obligatorio. Expresion XPath (JsonPath a partir del EI 6.5) a traves de la cual indicaremos sobre que elemento deseamos iterar y particionar el elemento.
- attachPath: Expresion XPath que nos permite indicar la ubicacion dentro del mensaje en la cual queremos 'pegar' el elemento sobre el que iteramos.
- sequential: Booleano que nos permite indicar si queremos que se realice de forma sequencial o paralela.
- continueParent: Booleano que nos permite indicar si queremos continuar con el flujo habitual despues del iterate.
- preservePayload: Booleano que nos permite indicar si queremos usar el mensaje como plantilla del mensaje resultante de las particiones a realizar por el mediador.
Si usamos la opcion preservePayload, debemos tener en cuenta que el el mensaje a usar como plantilla, no contendra el elemento por el cual queremos iterar. Si queremos que lo contenga, deberemos usar la opcion attachPath.
Dentro del mediador indicaremos como queremos realizar la logica a aplicar a cada mensaje. Estas son las distintas opciones:
- soapAction: Atributo que nos permite indicar dicho atributo en caso de ser necesario
- to: Atributo que nos permite indicar una direccion a donde enviar el mensaje
- sequence: Nos permite indicar una secuencia donde incluir la logica a realizar sobre cada una de las iteraciones. Permitiendonos escoger una secuencia ya definida, escribirla directamente o no seleccionar ninguna y por tanto no realizar ninguna logica.
- endpoint: Nos permite indicar el endpoint hacia el cual enviaremos el mensaje. Pudiendo configurarlo de forma habitual en WSO2, como por ejemplo se hace para los proxy services.
Sobre estas opciones indicar que al menos hay que poner o una secuencia que realice el envio o un endpoint. Y que ademas tampoco tiene mucho sentido utilizar a la vez el atributo to y el elemento endpoint, puesto que solo se tendra en consideracion el elemento endpoint.
A continuacion indicamos un ejemplo en el cual recibiremos el siguiente mensaje:
<books> <book><id>1</id></book> <book><id>2</id></book> <book><id>3</id></book> </books>
Y configuraremos nuestro mediador de la siguiente forma:
- Iteraremos sobre el nodo book. A traves del atributo expression.
- Usaremos el mensaje acutal como plantilla de los siguientes mensajes. A traves de preservePayload.
- Incluiremos el contenido sobre el que iteramos dentro del nodo raiz. A traves de attachPath.
- Evitaremos que se siga ejecutando el flujo despues del mediador. Uso por defecto de continueParent.
- Enviaremos cada nuevo trozo de mensaje generado a nuestro propio proxy de eco. A traves del atributo to y evitando definir ningun endpoint a nivel del iterate o del send.
<?xml version="1.0" encoding="UTF-8"?> <sequence name="exampleIterateMediator" xmlns="http://ws.apache.org/ns/synapse"> <iterate attachPath="$body/node()" expression="//book" preservePayload="true"> <target to="http://localhost:8280/services/myOwnEchoProxy"> <sequence> <log level="custom"> <property name="msg" value="inside iterate"/> <property expression="$body" name="full body"/> <property expression="//book" name="message splitted"/> </log> <send/> </sequence> </target> </iterate> </sequence>
No hay comentarios:
Publicar un comentario