jueves, 13 de febrero de 2014

Mensajes a travez de SOAP

Estructura de un mensaje

Un mensaje SOAP es un documento XML que consta de los siguientes elementos:
  • envoltorio (envelope) que define el contenido del mensaje
  • cabecera (header) que es opcional y que contiene información referente a la cabecera del mensaje
  • cuerpo (body) que contiene la información de la llamada y de la respuesta

Ejemplo de comunicación (sin cabeceras HTTP):

Supongamos que tenemos una sencilla aplicación en la que hay una clase HelloServer que tiene un método llamado sayHello() que recibe como parámetro una cadena de caracteres que será el nombre de la persona a quien saludaremos: el mensaje generado por el cliente sería:
<SOAP-ENV:Envelope>
  <SOAP-ENV:Body>
    <sayHello>
      <name>Pepe</name>
    </sayHello>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
el mensaje devuelto por el servidor sería:
<SOAP-ENV:Envelope>
  <SOAP-ENV:Body>
    <sayHelloResponse>
      <return>Hello, Pepe</return>
    </sayHelloResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Como vemos, la principal diferencia entre ambos mensajes (XML) es que la respuesta se encuentra en una etiqueta que se llama como el método invocado más la palabra Response (indicando que es la respuesta).

Ejemplo de comunicación (completo, con cabeceras HTTP):

el mensaje generado por el cliente sería:
POST /InStock HTTP/1.1
Host: www.stock.org
Content-Type: appliation/soap; charset=utf-8

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encondingStyle="http://www.w3.org/2001/12/soap-encoding">
  <soap:Body xmlns:m="http://www.stock.org/stock">
    <m:GetStockPrice>
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>
el mensaje devuelto por el servidor sería:
HTTP/1.1 200 OK
Connection: close
Content-Type: appliation/soap; charset=utf-8
Date: Sat, 12 May 2002 08:09:04 GMT

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encondingStyle="http://www.w3.org/2001/12/soap-encoding">
  <soap:Body xmlns:m="http://www.stock.org/stock">
    <m:GetStockPriceResponse>
      <m:Price>34.5</m:Price>
    </m:GetStockPriceResponse>
  </soap:Body>
</soap:Envelope>

Gestión de errores

Cuando ocurre un error en una comunicación con SOAP, dicho error se transmite en forma de elemento de fallo (Fault Element). Sólo puede aparecer un elemento de fallo, y de aparecer, debe hacerlo en el cuerpo del mensaje.
El contenido de un elemento de información de error es el siguiente:
  • <faultcode> : código que identifica el error
  • <faultstring> : error representado en forma de cadena de caracteres
  • <faultactor> : causante del error
  • <detail> : información específica del error
Por ejemplo, si se hubiera producido una división por cero, obtendríamos el siguiente documento XML:
<SOAP-ENV:Envelope>
  <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
      <faultcode>SOAP-ENV:Server</faultcode>
      <faultstring> / by zero </faultstring>
      <faultactor>/soap/servlet/rpcrouter</faultactor>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

No hay comentarios:

Publicar un comentario