Obtener errores SOAP en GeneXus 16


Con las funciones GetSOAPErr() y GetSOAPErrMsg() de GeneXus podemos obtener los errores SOAP (Si que existió algún error SOAP) después de consumir un servicio web. GetSOAPErr() sirve para obtener el codigo de error y GetSOAPErrMsg() sirve para obtener el mensaje de error.

Breve ejemplo:

&SDTIngredientes = &WebService.Execute(&Nombre_Receta)
&NombreWebService = "anombrerecetas"
ErroresSOAP.Call(&NombreWebService, &HayErrorWebService, &MensajeWebService)
If &HayErrorWebService = True
GuardoLog(&Pgmname, "HUBO ERRORES AL CONSUMIR EL SERVICIO")
Else
GuardoLog(&Pgmname, "NO HUBO ERRORES AL CONSUMIR EL SERVICIO")
Endif

En el ejemplo después de que se consume el servicio se llama a un procedimiento "ErroresSOAP", el cual yo le paso el nombre del servicio y este me devuelve un booleano y un mensaje de error si es que hubo un error a la hora de consumir el servicio.

Variables del Procedimiento:


Reglas del Procedimiento:
Parm(In:&NombreWebService, Out:&HayErrorWebService, Out:&MensajeWebService);

Source del Procedimiento:

&MensajeWebService.SetEmpty()
&HayErrorWebService = False
&ErrorSoap = GetSOAPErr() //Obtengo el código de error
If &ErrorSoap <> 0 //Si es distinto de 0 existe error de Locacion del Web Service
&HayErrorWebService = True
//El código de error indica la posición del parámetro que causa el conflicto
GuardoLog(&Pgmname, "ERROR_WebService### Codigo de error: " + &ErrorSoap.ToString())

Do Case
Case &ErrorSoap = -20007
&MensajeWebService = "Error, al configuar WEB SERVICE, location desconocido, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Case &ErrorSoap = -2004
&MensajeWebService = "Error en la solicitud de SOAP hecho por el cliente, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Case &ErrorSoap = -2006
&MensajeWebService = "Error en en el server no identificado, " + "Nombre del WS: " + &NombreWebService + ", Host: " + GetSOAPErrMsg()

Case &ErrorSoap = -2001
&MensajeWebService = "Error, la respuesta recibida es un XML válido, pero no es un mensaje SOAP válido, " + "Nombre del WS: " + &NombreWebService + ", Host: " + GetSOAPErrMsg()

Case &ErrorSoap > 0 and &ErrorSoap < 10000
&MensajeWebService = "Error, El servidor no tiene el nombre esperado, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Case &ErrorSoap < -10000
&MensajeWebService = "Error, en la comunicación HTTP, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Case &ErrorSoap < 0 and &ErrorSoap > -10000
&MensajeWebService = "Error, en la interpretación de la respuesta XML, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Otherwise
&MensajeWebService = "Error, de host desconocido al configurar WEB SERVICE, " + "Nombre del WS: " + &NombreWebService + ", Mensaje: " + GetSOAPErrMsg()

Endcase
If &MensajeWebService.Trim().IsEmpty()
GuardoLog(&Pgmname, "ERROR_WebService### ERROR EN SERVICIO NO DETECTABLES, Codigo de error: " + &ErrorSoap.ToString())
Else
GuardoLog(&Pgmname, "ERROR_WS###: " + &MensajeWebService + ' Código de error: '+&ErrorSoap.ToString())
Endif

EndIf

Como se puede ver en el source del procedimiento existen varios código de errores para el protocolo SOAP.

Comentarios