Problema Enterprise Integrator EI 6.4.0 Content-Type
El producto WSO2 Enterprise Integrator (WSO2 EI) 6.4.0 y tal vez algunas otras versiones que no he probado presenta un problema con los proxys, en específico con el header Content Type cuando se agrega un mediador que accede al contenido y lo modifica, lo cual con un custom mediator se indica levantando la bandera aware o simplemente cuando agregas el mediador de log.
El problema o prueba de falla radica en que el cliente setea un header content-type específico, por ejemplo: application/x-www-form-urlencoded y cuando llega al WSO2 EI se recibe correctamente, y éste genera una salida outgoing hacía el servicio de backend, pero al salir de él pierde el formato del content-type pasándolo a un json aunque envíe el header, es decir, no lo envía con el que lo recibió, y esto se puede verificar cuando simplemente agregas un mediador log, ya que con solo agregarlo el mensaje pierde el formato que se recibió y podrías recibir un error 500 del servicio de backend por enviar un content-type distinto al esperado.
Por esta razón te dejo una solución simple a este pequeño bug.
Lo que hay que hacer para solucionar este pequeño bug es al recibir el mensaje del cliente, guardar el header content-type en una variable y antes de hacer la llamada al servicio de backend, volverla a colocar, de esta manera el EI, transformará el mensaje para llevar el content-type adecuado. Aquí la solución:
<property name="messageType" expression="$trp:Content-Type" scope="axis2"/>
Esta es una solución otra puede ser generar un payload Factory aunque es mas laboriosa, también funciona.
A continuación te dejo un ejemplo de como quedaría el servicio Proxy:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="PRX_DSS_TEST"
transports="http https"
startOnLoad="true">
<description/>
<target>
<inSequence>
<log level="full"/>
<!-- 2 Fix para que el EI ponga en la salida el mismo Content-Type que a la entrada -->
<!-- 2 Fix to set same Content-Type input/output -->
<property name="messageType" expression="$trp:Content-Type" scope="axis2"/>
<call>
<endpoint key="TEST_EP"/>
</call>
<respond/>
</inSequence>
</target>
</proxy>
Abstract: WSO2 Enterprise Integrator have a little issue when you put a custom mediator in a proxy service, that modify the body message or just add a log mediator, the output is transform to json even when you set a specific content-type, to resolve this problem you should add the property messageType like the Content-Type recibed: Example:
<property name="messageType" expression="$trp:Content-Type" scope="axis2"/>