El API Apache SOAP v2.2

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP