Manejo de las interfaces de nuestros sistemas GeneXus. (Manejando cambios de WSDL)

En los tiempos que corren, es muy común que nuestros sistemas tengan que exponer sus servicios o sus datos a través de servicios web.

Si bien existen varias formas de implementarlos, en las aplicaciones GeneXus es común hacer procedimientos con la propiedad CALL PROTOCOL como SOAP o también tener objetos Transaction o DataProvider expuestos como web services.

Una vez que se publican dichos servicios web y empiezan a ser usados por otras aplicaciones, si algo cambia generalmente las aplicaciones dejan de funcionar correctamente.

Al desarrollar con GeneXus, el WSDL es generado en forma dinámica y es difícil lograr que el mismo no cambie o enterarse que cambio.

Que cosas puede hacer que cambie el WSDL?
  • Cambios en namespace de los procedures
  • Cambios en namespace de SDT
  • Cambios de nombres en SDT (incluye mayúsculas o minúsculas). 
  • Agregar parámetros
  • Agregar IN: y OUT: en parámetros
  • Generar el WSDL con la URL en mayúsculas y en minúsculas
  • Cambiar de versión de GeneXus
  • Agregar un elemento a una transacción BC
  • etc, etc. 
Para esto, pensamos una herramienta sencilla para poder sacar una "foto" de todos los Web services publicados por la aplicación.

Para esto, estamos usando la herramienta cURL que dado una URL, permite bajarlo a un archivo de texto. Soporta varios protocolos y también el ingreso de usuario y contraseña y es muy fácil usarla en la linea de comando. 

Quedaría asi:

REM =================================================
REM == SACA UNA FOTO DE LOS WSDL DE UNA APLICACION ==
REM =================================================

set hostname=http://servicios.aduana.gub.uy/LuciaX/
set extension=.aspx?wsdl
REM =================================================
REM == CARGA HOY=AAAAMMDD_HHMM                     == 
REM =================================================
Call DiaHora
set DirOutput=WSDL_%hoy%
MD %DirOutput%

FOR /F "eol=; tokens=1 " %%G in (webservices.txt) do @CALL SacoWSDL   %hostname%  %%G %extension% %DirOutput% 


Y el bat SacoWSL es:

REM ========================================================
REM == %1 = HOSTNAME y DIRVIRTUAL O WEBAPP
REM == %2 = NOMBRE DEL WEBSERVICES
REM == %3 = EXTENSION .aspx?wsdl para .net / ?wsdl para java
REM == %4 = DIRECTORIO DE SALIDA
REM ========================================================
curl %1/%2%3 > %4\%2.wsdl

Y en el archivo webservices.txt tenemos una lista de cada uno de los nombres de los objetos que queremos probar Hay que acordarse de poner la A para los procedures, y también el _BC para los Business Component. Luego utilizamos Beyond Compare o algún utilitario similar para comparar el contenido del directorio de la instalación anterior, con lo que estoy por instalar. Con poco esfuerzo se puede extender para probar servicios REST y también automatizar que genere un archivo con las diferencias de todos los archivos y los envíe por mail.

Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.