Servicio SOAP: Gestionando ER7 retorna HTTP 500
Buenos días,
Agradeceríamos que nos leyeran y si tuvieran oportunidad, nos respondieran, por favor.
La situación actual es la siguiente:
Disponemos de 2 entornos PREproduccion e INTegracion :
Versión de Ensemble en PREproduccion:
Versión de la herramienta para convertir XML a ER7 y viceversa, el ITB, en PRE (la obtenemos en el fichero ITB.info.cls):
Versión de Ensemble en INTegracion:
Versión de la herramienta para convertir XML a ER7 y viceversa, el ITB, en INTegracion (la obtenemos en el fichero ITB.info.cls):
Nuestra necesidad es la siguiente:
¿Por qué en PREproduccion obtenemos un http 500 al invocar a un servicio SOAP que hace uso del ITB para convertir de XML a ER7?
Class Servicios.SOAP.DragoAPtoVNAv01r00 Extends (EnsLib.SOAP.Service, ITB.HL7.BS.XMLService) [ ProcedureBlock ]
{
...
set ackXML = ##class(ITB.HL7.Util.Convert).ER7ToXML(ackER7,.tSC,"2.5")
...
}
ObjectScriptObjectScript
Sin embargo al invocar al mismo servicio (con igual código) en el entorno de INTegracion observamos que nos retorna un http 200 ok:
¿Por favor podrían indicarnos, explicarnos, o señalarnos documentación relevante al respecto de por qué en PREproduccion, con Ensemble 2018 e ITB 2.1 nos genera http 500 (lo cual sería erróneo); y sin embargo en INTegracion en Ensemble 2020 e ITB 3.4 nos responde con http 200 ok (lo cual sí es lo correcto?
Muchas gracias de antemano, es de agradecer su tiempo, asistencia y apoyo en esta cuestión.
Un saludo
Hola Yone,
Entiendo que estás comparando dos cosas diferentes:
Hay más factores que pueden intervenir: servidor web externo, configuración Web Gateway, configuración seguridad aplicación web.
Yo te recomendaría que lo primero de todo pongas algunas trazas en el código de tu WebService para comprobar si la llamada está llegando a donde crees.
Por ejemplo puedes utilizar una global:
set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"before" set ackXML = ##class(ITB.HL7.Util.Convert).ER7ToXML(ackER7,.tSC,"2.5") set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"after. tSC="_tSC
Y luego échale un vistazo:
USER>zw ^zdebug ^zdebug=3 ^zdebug(2)="[2022-06-03 08:35:47.75] before" ^zdebug(3)="[2022-06-03 08:35:57.39] after. tSC=1"
Así de entrada estás seguro que está llegando hasta la llamada.
Si llega hasta la llamada, luego puedes investigar en particular la conversión para ese mensaje.
Hola Alberto,
Gracias por tu respuesta y tiempo, Alberto
Hemos escrito al inicio del método:
set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"before"
y al final del método:
set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"after. tSC="_tSC
En PREproducción observamos:
zw ^zdebug ^zdebug=2 ^zdebug(1)="[2022-06-03 08:52:17.11] before" ^zdebug(2)="[2022-06-03 08:52:17.11] after. tSC=1"
En INTegración ocurre similar:
zw ^zdebug ^zdebug=2 ^zdebug(1)="[2022-06-03 08:53:43.77] before" ^zdebug(2)="[2022-06-03 08:53:43.78] after. tSC=1"
¿De qué forma nos recomiendas, Alberto, continuar?
Gracias Alberto por tu asistencia y tiempo
Un saludo
Hola Yone,
Si el
%Status
(tSC) que te devuelve##class(ITB.HL7.Util.Convert).ER7ToXML
es 1 como muestras, entonces el error no lo tienes en la parte de la conversión de ER7 a XML en Healthcare-HL7-XML (ITB).Tendrás que ir examinando el resto de partes que tengas en tu servicio web: