El SOAP que no vemos

En los Web Services basados en SOAP, un cliente realiza una llamada remota a un procedimiento del servicio invocando a una de las operaciones del Web Service. Para realizar esto se realiza un intercambio de mensajes request y response, que en este caso son mensajes SOAP. Imaginémonos un cliente PERL, que genera un request HTTP para invocar a un Web Service. El cuerpo de este request es un mensaje SOAP. Veámoslo:



En start line HTTP se observa el método request (POST). Se utiliza POST en lugar de GET, dado que los request POST poseen un cuerpo, que encapsula nuestro mensaje SOAP. Después de esto viene el URL del request, seguido de la versión de HTTP (1.1)

A continuación, vienen los headers HTTP, que son pares código/valor, separados por dos puntos. El código Accept se ve tres veces, especificando que el cliente puede aceptar una respuesta XML, una respuesta con adjuntos de cualquier tipo y un documento SOAP. El código SOAPAction siempre esta presente en los headers HTTP de request a Web Services.

Tenemos dos saltos de línea, que separan a los headers HTTP del cuerpo del HTTP. Aquí, el cuerpo HTTP contiene el documento SOAP (o SOAP envelope). El elemento más externo del documento se denomina Envelope, y dentro del Envelope se encuentra el SOAP body que contiene un sólo elemento, cuyo nombre local es getTimeAsString, que se corresponde con el nombre de la operación a invocar en el Web Service.

Por el lado del Web Service, las librerías Java procesan el request HTTP, entraen el SOAP Envelope y determinan que operación del servicio invocar. Se llama al método Java correspondiente (getTimeAsString) y se genera un mensaje SOAP para llevar el resultado del método al cliente. El response HTTP del WS sería así:



Una vez más, el SOAP Envelope es el cuerpo del mensaje HTTP. El start line contiene el código de estatus (200) y el texto correspondiente (OK), indicándonos que se procesó bien la solicitud del cliente. El SOAP Envelope contiene la hora actual entre las tags XML return. La librería SOAP del Perl extrae el SOAP Envelope del response HTTP y, según lo indicado en el documento WSDL, extrae el resultado de la operación del contenido del elemento return.

Basado en el capítulo 1 de Java Web Services: Up and Running de Martin Kalin

Publicar un comentario