Ya vimos hace poco la diferencia del enrich y el payload como mediators en WSO2, aquí. Con Payload al sustituir el body teniamos un mayor control de la salida del mismo. Con enrich podemos modificar la respuesta remplazando un valor o añadiendo un hijo/hermano.
Partiendo del ejemplo anterior, podemos indicar que la respuesta recibida en formato XML a través del siguiente código:
Y será el Enterprise Integrator el encargado de transformalo correctamente gracias a los Message formatter. Y por lo tanto la nueva salida de nuestro método será la siguiente:
Aparte de que al recibir originalmente la respuesta como un json y aunque transforma dicha respuesta a XML la incluye dentro del nodo 'jsonObject'. Podemos ver como aquellos nodos que hemos incluido como hermano o hijo se han creado con un namespace por defecto.
En algunos casos esto puede darnos igual, pero es posible que esta respuesta sea validada por otra entidad a través de un XSD o alguna otra cosa. Y por tanto dichos namespace nos podrian generar fallos.
Para evitar la inclusión del namespace hay una solución específica y es indicarle un namespace vacio, así:
De la forma anterior, la nueva salida será igual pero sin namespaces asociados a los nodos incluidos:
Partiendo del ejemplo anterior, podemos indicar que la respuesta recibida en formato XML a través del siguiente código:
<property name="messageType" value="text/xml" scope="axis2"/>
Y será el Enterprise Integrator el encargado de transformalo correctamente gracias a los Message formatter. Y por lo tanto la nueva salida de nuestro método será la siguiente:
<jsonObject> <bookstore> <name>the starts my destination</name> <author>Alfred Bester</author> </bookstore> <description xmlns="http://ws.apache.org/ns/synapse">list of books</description> <bookstore> <name>Ender's Game</name> <author>Orson S. Card</author> </bookstore> <total xmlns="http://ws.apache.org/ns/synapse">2</total> </jsonObject>
Aparte de que al recibir originalmente la respuesta como un json y aunque transforma dicha respuesta a XML la incluye dentro del nodo 'jsonObject'. Podemos ver como aquellos nodos que hemos incluido como hermano o hijo se han creado con un namespace por defecto.
En algunos casos esto puede darnos igual, pero es posible que esta respuesta sea validada por otra entidad a través de un XSD o alguna otra cosa. Y por tanto dichos namespace nos podrian generar fallos.
Para evitar la inclusión del namespace hay una solución específica y es indicarle un namespace vacio, así:
<enrich>
<source clone="false" type="inline">
<total xmlns="">2</total>
</source>
<target action="child" type="body"/>
</enrich>
<enrich>
<source clone="false" type="inline">
<description xmlns="">list of books</description>
</source>
<target action="sibling" type="custom" xpath="//bookstore"/>
</enrich>
De la forma anterior, la nueva salida será igual pero sin namespaces asociados a los nodos incluidos:
<jsonObject> <bookstore> <name>the starts my destination</name> <author>Alfred Bester</author> </bookstore> <description>list of books</description> <bookstore> <name>Ender's Game</name> <author>Orson S. Card</author> </bookstore> <total>2</total> </jsonObject>
No hay comentarios:
Publicar un comentario