Oracle MCS: Consumir un connector sin usar el traductor XML/JSON
14/02/2017 -
Actualmente nos encontramos inmersos en un proyecto de Mobile Cloud Service (MCS) para el que estamos creando conectores SOAP con el fin de integrarlos con Siebel. Como ventajas a destacar de MCS, subrayaría que nos permite consumir servicios SOAP, payload en XML y los traduce automáticamente a JSON. Puedes revisar más información en Documentación de MCS.
Cuando hayamos creado el conector SOAP y pulsemos en ‘Test’ para probarlo, observaremos que en el body de la llamada nos solicitan enviar un JSON.
Existen algunos casos en los que el traductor no funciona por defecto. Hemos encontrado problemas con algunos servicios, en los que la estructura XML es como ésta:
Parece que el traductor no añade los namespaces en el header con lo que Siebel no puede parsear el request.
La solución sería enviar un XML en lugar del JSON, sin utilizar el traductor.
Podemos probarlo en el tester del conector SOAP, para el que necesitaremos un XML obtenido de cualquier cliente de servicios web como por ejemplo SoapUI.
También tendremos que añadir “Content-Type: application/xml;charset:UTF-8” y “Accept: application/xml” como parámetros del header:
Si probamos el conector podemos ver que la llamada al servicio web esta funcionando correctamente:
¿Cómo implementamos nuestra API para que envíe un payload XML al conector?
Tendríamos que añadir el XML que deseamos enviar al body del request y setear los parámetros en el header como hemos hecho con el conector.
¿Sería la forma recomendada de ejecución? Sí, pero en lugar de enviar un String con el mensaje SOAP, sería más seguro enviarlo como un objeto JavaScript.
Para implementarlas tendríamos que seguir los siguientes pasos:
1- Descargar e instalar Node.js. link
2- Instalar el módulo xml2js.
En este ejemplo ‘test_rrs’ el directorio se encontraría donde tenemos el fichero:
3- Añadir xml2js como dependencia en el fichero package.json:
4- En el fichero JavaScript, como ya comenté anteriormente, la idea principal es la de construir un mensaje SOAP como un string. A continuación, muestro la primera imagen de la implementación base sobre la cual realizaremos cambios: