Pregunta
· 3 jun, 2022

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:

Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2018.1.6 (Build 717U) Thu Feb 24 2022 13:27:54 EST

Versión de la herramienta para convertir XML a ER7 y viceversa, el ITB, en PRE (la obtenemos en el fichero ITB.info.cls):

Parameter VERSION = 2.1;

 

Versión de Ensemble en INTegracion:

IRIS for UNIX (Red Hat Enterprise Linux for x86-64) 2020.1.1 (Build 408U) Sun Mar 21 2021 22:21:14 EDT

Versión de la herramienta para convertir XML a ER7 y viceversa, el ITB, en INTegracion (la obtenemos en el fichero ITB.info.cls):

Parameter VERSION = 3.4;

 

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")
...
}

 

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

Comentarios (3)2
Inicie sesión o regístrese para continuar

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:

  • No sé si tienes más código antes o después de esa llamada, comprueba que no haya errores.
  • Comprobar logs del servidor web y del CSP Webgateway. Incluso puedes activar ISCLOG Documentación