Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
-Tutoriales

El API Apache SOAP v2.2


Escribir Servicios Message

. Servicios Message

Crear servicios orientados a mensaje en Apache SOAP es un poco más complejo que crear un simple servicio basado en RPC, pero en muchos casos un modelo orientado a mensaje proporciona una mejor solución a un problema que estamos intentando resolver. En un servicio orientado a mensaje, la implementación del servicio es responsable de procesar los contenidos del SOAP Envelope. Esto quiere decir, que aunque los APIs de Apache SOAP todavían están disponibles para interactuar con el objeto SOAPEnvelope, la implementación del servicio debe invocar aquellas llamadas que son necesarias para extraer cualquier información de la cabecera y del cuerpo que sean necesarias para procesar la solicitud. Si el servicio orientado a mensaje está participando en un protocolo solicitud-respuesta que usa mensajes SOAP en ámbas direcciones, entonces también es responsable de generar el SOAPEnvelope apropiado para la respuesta.

Como los servicios orientados a mensaje tienen control total sobre los SOAP Envelopes, cualquier documento XML podría ser pasado como parte del cuerpo del envelope. Cuando los servicios reciben un SOAP Envelope, son libres de extraer el cuerpo, y hacer con él lo que les plazca.

Al contrario que las implementaciones de servicios RPC, las implementaciones de servicios orientados a mensajes deben ser conformes a un simple interface:

void name(SOAPEnvelope request-envelope, SOAPContext request-context, SOAPContext response-context)

donde name es el nombre del método/función, request-envelope es el SOAPEnvelope que contiene el mensaje entrante, request-context es el SOAPContext que contiene el mensaje entrante, y response-context es el SOAPContext que debería usarse para una respuesta si es necesario.

Si el transporte de comunicaciones que estámos usando soporta interacción en los dos sentidos, como HTTP, podemos usar el response-context para enviar una respuesta de vuelta al cliente. Si queremos enviar de vuelta un SOAP Envelope, podemos usar el método marshall(...) de org.apache.soap.Envelope para empaquetar el envelope en un java.io.StringWriter, y luego invocar al método setRootPart(...) de response-context, pasarle el StringWriter como el primer argumento. Si queremos enviar de vuelta cualquier otro tipo de datos, podríamos necesitar invocar a otros métodos del response-context.

Al igual que las implementaciones Java de servicios basados en RPC, una implementación de un servicio Java basado en mensaje podría lanzar una SOAPException para indicar que ha ocurido algún error cuando se procesó la solicitud. Lanzar una SOAPException(FAULT_CODE_CLIENT, ...) permitirá a nuestra implementación de servicio indicar que el fallo fué debido a un error de cliente, mientras que lanzar una SOAPException(FAULT_CODE_SERVER, ...) indicará que nuestra implementación de servicio fue el cusante del fallo (Si lanzamos cualquier otro tipo de excepción, el servidor la capturará, y la pasará a un SOAPException(FAULT_CODE_SERVER, ...)). Ver la especificación SOAP v1.1 para más información sobre fallos SOAP.

 
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network