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

El API Apache SOAP v2.2


Escribir Clientes de Message

. Cliente Message

Escribir clientes para aceder a servicios SOAP orientados a mensaje requiere que interactúemos con un conjunto de APIs de Apache SOAP de nivel más bajo que lo usados para escribir un cliente SOAP basado en RPC. Sin embargo, los servicios orientados a mensaje nos proporcionan un control más fino sobre lo que realmente se está transmitiendo sobre SOAP. (De hecho, el mecanismo RPC esta construido sobre esta capa orientada a mensaje).

Los pasos básicos para crear un cliente que interactúa con un servicio orientado a mensaje son los siguientes:

  1. Obtener la descripción del interface del servicio SOAP, para que sepamos la forma que debería tener el mensaje SOAP (es decir, qué cabeceras, cómo debería ser el cuerpo, etc.) así como el tipo del intercambio de mensaje que tendrá lugar

    Podemos buscar el servicio en un fichero WSDL (o en algún otro formato de definición de interfaces), o directamente en su implementación. Al contrario que SOAP RPC, no hay un patrón de intercambio de mensaje predefinido, por eso un servicio orientado a mensaje podría devolver un SOAP envelope, podría devolver cualquier otro tipo de datos, o podría no devolver nada.

  2. Constuirmos un org.apache.soap.Envelope que contenga la infomación que requiere el servicio SOAP.

    Al final del todo, necesitaremos añadir un objeto org.apache.soap.Body al envelope. También podemos añadirle cabeceras opcionalmente.

    Nota: Cuando el mensaje es recibido en el servidor, es enrutado al servicio apropiado buscando en el espacio de nombres XML asociado con el primer elemento hijo del cuerpo, y luego al correcto método/función dentro del servicio mediante el nombre del propio elemento.
  3. Creamos un objeto org.apache.soap.messaging.Message.

    Si necesitamos añadir attachments MIME a nuestro mensaje, podemos usar el método addBodyPart(...) para hacer esto. Si necesitamos envíar nuestro mensaje sobre un transporte distinto a HTTP, necesitaremos invocar al método setSOAPTransport(...).

  4. Invocar al método send(...) del objeto Message, proporcionando la URL del punto final que está proporcionando el servicio (por ejemplo, http://localhost/soap/servlet/messagerouter), el actionURI, y nuestro envelope.
  5. Si nuestro servicio devuelve datos y asumiendo que el transporte soporte interacción de dos vías, entonces necesitamos recuperar el objeto SOAPTransport desde el objeto Message (asumiendo que no lo hayamos manejado ya) usando el método getSOAPTransport(). Entonces podemos invocar al método receive() del objeto SOAPTransport para recuperar los datos devueltos.

    Si el servicio devuelve un SOAP Envelope, podemos analizar el XML y pasar el elemento raíz al método unmarshall(...) de org.apache.soap.Envelope para permitir su reconstrucción como un objeto SOAP Envelope. Si ocurre un error durante el procesamiento de la solicitud, el servidor enviará de vuelta automáticamente un SOAP Envelope con SOAP Fault en el cuerpo describiendo que es lo que fue mal.

 
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