Gestionar condicionalmente la respuesta HTTP
Imagine que un servicio web devuelve un cuerpo de respuesta con tipo de contenido JSON o XML según el valor del encabezado de solicitud HTTP Accept. Además, en caso de error (código de estado > 299) el servicio web puede devolver un tipo de contenido no definido. En este caso sería útil poder gestionar la respuesta de forma condicional en función del código de estado HTTP y del tipo de contenido.
Para gestionar la respuesta JSON y la respuesta XML de un servicio web en una misma asignación puede crear varios elementos de cuerpo haciendo clic con el botón derecho en el elemento Body del componente y seleccionando Agregar nodo de cuerpo detrás en el menú contextual.
En la asignación, un componente de servicio web con varios elementos Body configurado para el caso que acabamos de explicar tendría este aspecto:
La asignación de la imagen anterior toma dos parámetros de entrada. El primero da el tipo de contenido esperado y su calor puede ser application/json o application/xml. El segundo da el ID numérico del producto que se debe recuperar.
Si suministra el valor application/json como parámetro de entrada haga clic en el botón de vista previa del componente JSON de destino. Si el valor del parámetro de entrada es application/xml haga clic en el botón de vista previa del componente XML de destino. Si la llamada al servicio web se realizó con éxito se genera el archivo de resultados correspondiente (JSON o XML).
Si la llamada al servicio web devuelve un código de estado mayor que 300 (error), entonces la respuesta HTTP llega al tercer elemento Body. Como desconocemos el tipo de contenido exacto vamos a descodificarlo con la función decode-mime-entity. El servicio web no proporciona el valor del conjunto de caracteres en el encabezado de la respuesta, motivo por el que el valor de constante utf-8 está conectado a la función descodificadora.
En el componente anterior cada uno de los tres elementos de cuerpo de la respuesta se puede configurar haciendo clic en el botón junto al cuerpo correspondiente:
1.El primer cuerpo gestiona el contenido devuelto como application/json si el código de estado se encuentra entre 200 y 299. También está definido el esquema de la estructura de la respuesta JSON esperada.
2.El segundo cuerpo gestiona el contenido devuelto como application/xml si el código de estado se encuentra entre 200 y 299. También está definido el esquema de la estructura de la respuesta XML esperada.
3.El tercer cuerpo gestiona contenido devuelto como */* si el servicio web devuelve un código de estado erróneo (entre 300 y 599).