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?
Y el bat SacoWSL es:
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.wsdlY 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
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.