http://wso2.com/library/partner-webinar/2015/09/desafiando-las-transformaciones-con-wso2-esb/
En este webinar explicaremos las mejores prácticas a la hora de transformar los mensajes de nuestros servicios con WSO2 ESB. Como cambiar el formato del mensaje (por ejemplo de XML a JSON), como crear mensajes desde cero o como modificar mensajes utilizando las diferentes herramientas que nos ofrece WSO2 ESB.
Payload factory mediator
XSLT 1.0/2.0
XPath
XQuery
Smooks
Javascript
Finalmente realizaremos un estudio para determinar como se comportan, en términos de rendimiento, estas transformaciones en situaciones de alto volumen de mensajes.
7. Publica,on
Category
WSO2
Year
Gartner
Magic
Quadrant
for
Enterprise
Applica6on
Pla8orm
as
a
Service
Visionary
2014
Gartner
Magic
Quadrant
for
Applica6on
Services
Governance
Visionary
2013
Gartner
Magic
Quadrant
for
On-‐Premises
Applica6on
Integra6on
Suites
Visionary
2013
Gartner
Magic
Quadrant
for
On-‐Premises
Applica6on
Pla8orms
Visionary
2013
The
Forrester
Wave
API
Management
Pla8orms,
Q1
Leader
2013
Gartner
Magic
Quadrant
for
Systema6c
SOA
Applica6on
Projects
Visionary
2012
Gartner
Magic
Quadrant
for
Systema6c
Applica6on
Integra6on
Projects
Visionary
2012
Gartner
Magic
Quadrant
for
SOA
Infrastructure
Projects
Visionary
2012
The
Forrester
Wave
Integrated
SOA
Governance,
Q1
Strong
Performer
2012
The
Forrester
Wave
SOA
Service
Life-‐Cycle
Management,
Q1
Strong
Performer
2012
The
Forrester
Wave
Standalone
SOA
Management
Solu6ons,
Q4
Strong
Performer
2011
Gartner
Magic
Quadrant
for
SOA
Governance
Technologies
Visionary
2011
The
Forrester
Wave
Enterprise
Service
Bus,
Q2
Leader
2011
Presencia
en
estudios
de
Mercado
7
10.
• "Enfoque
brillante,
amor
a
la
modularidad,
lo
que
permite
una
gran
flexibilidad.
Estamos
muy
contentos
de
estar
trabajando
con
WSO2
"
-‐
Jim
Crabbe,
Senior
Product
Manager,
Boeing
• "La
extrema
capacidad
de
soporte,
es
lo
que
nos
cauGvó
con
WSO2"
-‐
Prakash
Iyer,
Vicepresidente
del
SoNware
Arquitectura
y
Estrategia,
CIO,
Trimble.
• “Con
el
uso
de
WSO2
ESB,
habíamos
sido
capaces
de
proporcionar
a
los
clientes
y
nuestors
socios
la
calidad
y
experiencia
que
esperan
de
eBay"
-‐
Abhinav
Kumar,
Gerente
senior
de
Ingeniería
de
Sistemas
en
eBay.
¿Y
los
clientes,
qué
dicen?
10
11. 11
LUIS
PEÑARRUBIA
Integration Consultant and Solutions Architect
API, SOA and Big Data.
http://www.linkedin.com/in/luispenarrubia
@luispenarrubia
luispenarrubia.wordpress.com
luis.penarrubia [at] chakray.com
12. 11
• Grupo
de
Consultores
sénior
muy
especializados
en
WSO2.
• Preferred
Partner
con
presencia
en
Europa
y
Sudamérica.
• Especializado
en
proveer
servicios
de
Consultoría
a
Integradoras.
• Suministra
formación
oficial
on-‐line
y
presencial.
http://www.linkedin.com/company/chakray-consulting
@Chakray_com
http://www.chakray.com
http://www.slideshare.net/Chakray
13. Transformación
de
mensajes
con
WSO2
ESB
(I)
13
• ¿Qué
es?
• Manipulación
del
mensaje
de
nuestro
servicio.
• ¿Por
qué
es
importante?
• ESB
es
la
columna
vertebral
de
cualquier
integración
SOA.
• Conectar
servicios
implementados
en
diferentes
tecnologías.
• Transformación
!=
Mediación
• ¿Qué
Bpos
de
transformaciones
existen?
• Crear
mensaje
desde
cero.
• Cambiar
el
formato
del
mensaje.
• Enriquecer
el
mensaje.
• Conversión
del
mensaje.
15. Escenario
1:
Crear
mensaje
desde
cero
15
• ¿Cuándo?
Invocamos
un
servicio
en
el
ESB
que
no
Bene
payload
y
que
debe
invocar
un
servicio
backend
que
espera
un
payload.
El
servicio
backend
devuelve
un
payload
vacío
y
el
servicio
en
el
ESB
debe
devolver
un
payload.
• Ejemplo
• ¿Que
herramientas
usar?
• PayloadFactory
Mediator
(recomendado).
• Enrich
Mediator
/
Script
Mediator.
Servicio
en
el
ESB
Servicio
en
backend
POST
users/create?id=1&name=Alberto&surname=Sanchez
SOAP
usersCreate
<users_create>
<id>1</id>
<name>Alberto</name>
<surname>Sanchez</surname>
</users_create>
16. Escenario
2:
Cambiar
el
formato
del
mensaje
16
• ¿Cuándo?
Invocamos
un
servicio
en
el
ESB
que
recibe
un
payload
y
que
debe
invocar
un
servicio
backend
que
espera
el
mismo
payload
pero
en
diferente
formato.
El
servicio
backend
devuelve
un
payload
y
el
servicio
en
el
ESB
Bene
que
devolver
el
mismo
payload
en
diferente
formato.
• Ejemplo
• ¿Que
herramientas
usar?
• Message
type.
Servicio
en
el
ESB
Servicio
en
backend
GET
users/list
Response:
{
"users":
{
"user":
[
{
"id":
1,
"name":
"Alberto",
"surname":
"Sanchez"
}
]
}
}
GET
usersList
Response:
<users>
<user>
<id>1</id>
<name>Alberto</name>
<surname>Sanchez</surname>
</user>
</users>
17. Escenario
3:
Enriquecer
el
mensaje
17
• ¿Cuándo?
Invocamos
un
servicio
en
el
ESB
que
recibe
un
payload
y
que
debe
invocar
un
servicio
backend
que
espera
un
payload
muy
similar
pero
alguna
pequeña
modificación.
El
backend
devuelve
un
payload
y
el
servicio
en
el
ESB
Bene
que
devolver
un
payload
muy
similar
pero
con
alguna
pequeña
modificación.
• Ejemplo
• ¿Que
herramientas
usar?
• Enrich
Mediator
/
Script
Mediator
(recomendado).
• XSLT
Mediator,
FASTXSLT
Mediator,
XQuery
Mediator,
Smooks
Mediator.
Servicio
en
el
ESB
Servicio
en
backend
PUT
users/update
<users_update>
<id>1</id>
<name>Alberto</name>
<surname>Sanchez</surname>
</users_update>
PUT
usersUpdate
<users_update>
<id>001-‐1</id>
<name>Alberto</name>
<surname>Sanchez</surname>
</users_update>
18. Escenario
4:
Conversión
del
mensaje
18
• ¿Cuándo?
Invocamos
un
servicio
en
el
ESB
que
recibe
un
payload
y
que
debe
invocar
un
servicio
backend
que
espera
un
payload
completamente
diferente.
El
servicio
backend
devuelve
un
payload
y
el
servicio
en
el
ESB
Bene
que
devolver
un
payload
completamente
diferente.
• Ejemplo
• ¿Que
herramientas
usar?
Servicio
en
el
ESB
Servicio
en
backend
POST
users/create/v2
{
"id":
1,
"name":
"Alberto",
"surname":
"Sanchez",
"Btle":
"Architect"
}
SOAP
usersCreateV2
<users_create>
<id>001-‐1</id>
<firstName>Alberto</firstName>
<lastName>Sanchez</lastName>
<Btle>03</Btle>
</users_create>
• XSLT
Mediator
/
FASTXSLT
Mediator
• XQuery
Mediator
• Smooks
Mediator
• Script
Mediator
19. Herramientas:
PayloadFactory
Mediator
19
• Sintaxis
• ¿Cuándo
usar?
• Queremos
construir
un
mensaje
XML
o
JSON
no
complejo.
• Limitaciones
• No
permite
enriquecer
o
modificar
mensajes.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
<payloadFactory
media-‐type="xml
|
json">
<format
../>
<args>
<arg
(value="string"
|
expression="
{xpath}
|
{json}
")/>*
</args>
</payloadFactory>
20. Herramientas:
MessageType
20
• Sintaxis
• ¿Cuándo
usar?
• Queremos
modificar
simplemente
el
formato
del
mensaje,
no
la
estructura.
Típico
ejemplo
de
XML
a
JSON
o
viceversa.
• Limitaciones
• No
se
pueden
generar
mensajes.
• No
se
puede
modificar
la
estructura
del
mensaje.
• Con
algunos
valores
la
conversión
automáBca
puede
ser
errónea.
<property
name="messageType"
value=“string"
scope="axis2"/>
21. Herramientas:
Enrich
Mediator
21
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Limitaciones
• No
recomendado
construir
mensajes
desde
cero.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
• Pensado
para
trabajar
con
formato
XML.
<enrich>
<source
[clone=true|false]
[type=custom|envelope|body|property|inline]
xpath=""
property=""
/>
<target
[ac,on=replace|child|sibiling]
[type=custom|envelope|body|property|inline]
xpath=""
property=""
/>
</enrich>
22. Herramientas:
Script
Mediator
22
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Limitaciones
• Engine
de
Javascript
anBguo.
Soporta
funciones
muy
básicas.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
<script
language="string">...script
source
code...<script/>
<script
key="string"
language="string"
[func,on="script-‐func,on-‐name"]>
<include
key="string"/>
</script>
23. Herramientas:
XSLT
Mediator
23
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Limitaciones
• No
se
pueden
generar
mensajes
desde
cero.
• Performance
inferior
a
FASTXSLT
Mediator.
<xslt
key="string"
[source="xpath"]>
<property
name="string"
(value="literal"
|
expression="xpath")/>*
<feature
name="string"
value="true|
false"
/>*
<resource
loca,on="string"
key="string"/>*
</xslt>
24. Herramientas:
FASTXSLT
Mediator
24
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• El
performance
es
muy
importante.
• Limitaciones
• No
se
pueden
generar
mensajes
desde
cero.
• Trabaja
sobre
el
stream
no
el
payload
recibido.
No
pre
proceso
del
payload.
• No
permite
el
paso
de
parámetros.
<fastXSLT
key="string"/>
25. Herramientas:
XQuery
Mediator
25
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Familiarizados
con
XQuery.
• Limitaciones
• Tiene
peor
performance
que
XSLT
/
FASTXSLT
Mediator.
• No
permite
el
uso
de
templates
como
XSLT.
<xquery
key="string"
[target="xpath"]>
<variable
name="string"
type="string"
[key="string"]
[expression="xpath"]
[value="string"]/>?
</xquery>
26. Herramientas:
Smooks
Mediator
26
• Sintaxis
• ¿Cuándo
usar?
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Familiarizados
con
Smooks.
• Limitaciones
• Tiene
peor
performance
que
XSLT
/
FASTXSLT
Mediator.
<smooks
[config-‐key="string"]>
<input
[type="|text|xml"]/>
<output
[type="|text|xml|java"]
[property="string"]
[ac,on="string"]/>
</smooks>
27. Herramientas:
Tabla
resumen
(I)
27
Herramienta
Cuando
usar
Limitaciones
PayloadFactory
Mediator
• Queremos
construir
un
mensaje
XML
o
JSON
no
complejo.
• No
permite
modificar
enriquecer
o
modificar
mensajes.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
Enrich
Mediator
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• No
recomendado
construir
mensajes
desde
cero.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
XSLT
/
FASTXSLT
Mediator
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Recomendado
el
uso
de
FASTXSLT
siempre
que
sea
posible
para
incrementar
el
rendimiento.
• No
se
pueden
generar
mensajes
desde
cero.
XQuery
Mediator
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Familiarizados
con
XQuery.
• Tiene
peor
rendimiento
que
XSLT
/
FASTXSLT
Mediator.
• No
permite
el
uso
de
templates
como
XSLT.
28. Herramientas:
Tabla
resumen
(II)
28
Herramienta
Cuando
usar
Limitaciones
Smooks
Mediator
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Mensaje
complejos
(iteraciones,
condiciones).
• Familiarizados
con
Smooks.
• Tiene
peor
performance
que
XSLT
/
FASTXSLT
Mediator.
Script
Mediator
• Queremos
enriquecer
/
modificar
el
mensaje
que
recibimos
en
nuestro
servicio.
• Engine
de
Javascript
anBguo.
Soporta
funciones
muy
básicas.
• No
recomendado
para
construir
mensajes
complejos
(iteraciones,
condiciones).
Message
Type
• Queremos
modificar
simplemente
el
formato
del
mensaje,
no
la
estructura.
Típico
ejemplo
de
XML
a
JSON
o
viceversa
• No
se
pueden
generar
mensajes.
• No
se
puede
modificar
la
estructura
del
mensaje.
• Con
algunos
valores
la
conversión
automáBca
puede
ser
errónea.
29. Performance
al
realizar
transformaciones
(I)
29
• Factores
a
tener
en
cuenta
• Tipo
de
transformación
• Tamaño
mensaje
• Conclusiones
• Para
mensajes
pequeños
(<1K)
las
diferencias
son
mínimas.
• Para
transformaciones
complejas
se
recomienda
siempre
que
sea
posible
el
uso
de
FASTXSLT
Mediator,
en
su
defecto
XSLT
Mediator.
Transformaciones
sencillas
Transformaciones
complejas
• Enrich
Mediator
• PayloadFactory
Mediator
• FASTXSLT
Mediator
• XSLT
Mediator
• XQuery
Mediator
30. Performance
al
realizar
transformaciones
(II)
30
• Entorno
local
• Windows
8.1
64
bit,
8GB
RAM,
4
CPUs.
• 500
peBciones
en
10
segundos.
Enrich
Mediator
Script
Mediator
XSLT
Mediator
XQuery
Mediator