Los últimos tutoriales de desarrollo web
 

XML Soap


  • JABÓN siglas de Simple de Acceso a Objetos P rotocolo
  • SOAP es un protocolo de comunicación entre aplicaciones
  • SOAP es un formato para enviar y recibir mensajes
  • SOAP es independiente de la plataforma
  • SOAP se basa en XML
  • SOAP es una recomendación W3C

¿Por qué jabón?

Es importante para las aplicaciones de Internet para poder comunicarse a través de Internet.

La mejor manera de comunicarse entre aplicaciones es a través de HTTP, HTTP porque es compatible con todos los navegadores de Internet y servidores. De SOAP se ha creado para lograr esto.

SOAP proporciona una manera de comunicarse entre aplicaciones que se ejecutan en sistemas operativos diferentes, con diferentes tecnologías y lenguajes de programación.


Bloques de Construcción de SOAP

Un mensaje SOAP es un documento XML que contiene ordinaria los siguientes elementos:

  • Un elemento sobre que identifica el documento XML como un mensaje SOAP
  • Un elemento de cabecera que contiene información de cabecera
  • Un elemento de cuerpo que contiene la información de llamada y respuesta
  • Un elemento de falta que contiene errores y la información de estado

Todos los elementos anteriores se declaran en el espacio de nombres predeterminado para el sobre SOAP:

http://www.w3.org/2003/05/soap-envelope/

y el espacio de nombres predeterminado para la codificación SOAP y tipos de datos es:

http://www.w3.org/2003/05/soap-encoding


Reglas de sintaxis

Estas son algunas de las reglas de sintaxis importantes:

  • Un mensaje SOAP DEBE ser codificados utilizando XML
  • Un mensaje SOAP debe utilizar el espacio de nombres SOAP
  • Un mensaje SOAP debe utilizar el espacio de nombres de codificación SOAP
  • Un mensaje SOAP no debe contener una referencia DTD
  • Un mensaje SOAP no debe contener Instrucciones de procesamiento XML

Esqueleto de Mensajes SOAP

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

El elemento SOAP Envelope

El elemento SOAP requerido es el elemento raíz de un mensaje SOAP. Este elemento define el documento XML como un mensaje SOAP.

Ejemplo

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

El xmlns: Espacio de nombres de jabón

Nótese la xmlns: espacio de nombres de jabón en el ejemplo anterior. Siempre debe tener el valor de: "http://www.w3.org/2003/05/soap-envelope/" .

El espacio de nombres define la envolvente como un sobre SOAP.

Si se utiliza un espacio de nombres diferentes, la aplicación genera un error y descarta el mensaje.


El encodingStyle Atributo

El encodingStyle atributo se utiliza para definir los tipos de datos utilizados en el documento. Este atributo puede aparecer en cualquier elemento SOAP, y se aplica a los contenidos del elemento y todos los elementos secundarios.

Un mensaje SOAP no tiene ninguna codificación predeterminada.

Sintaxis

soap:encodingStyle="URI"

Ejemplo

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

El elemento de cabecera de SOAP

El elemento de SOAP encabezado opcional contiene información específica de la aplicación (like authentication, payment, etc) sobre el mensaje SOAP.

Si el elemento de cabecera está presente, debe ser el primer elemento hijo del elemento del sobre.

Note: Todos los elementos secundarios inmediatos del elemento de conexión deben ser espacio de nombres cualificado.

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

El ejemplo anterior contiene un encabezado con un "Trans" elemento, un "mustUnderstand" atributo con un valor de 1, y un valor de 234.

SOAP define tres atributos en el espacio de nombres predeterminado. Estos atributos son: mustUnderstand, actor y encodingStyle.

Los atributos definidos en el encabezado SOAP define cómo un receptor debe procesar el mensaje SOAP.


El mustUnderstand Atributo

El atributo de SOAP mustUnderstand se puede utilizar para indicar si una entrada de la cabecera es obligatorio u opcional para el receptor procese.

Si agrega mustUnderstand = "1" a un elemento hijo del elemento de encabezado que indica que el receptor procesar el encabezado debe reconocer el elemento. Si el receptor no reconoce el elemento se producirá un error al procesar el encabezado.

Sintaxis

soap:mustUnderstand="0|1"

Ejemplo

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

El actor Atributo

Un mensaje SOAP puede viajar desde un emisor a un receptor al pasar diferentes puntos finales a lo largo de la ruta del mensaje. Sin embargo, no todas las partes de un mensaje de SOAP pueden estar destinados para el último punto final, en vez, puede tener como objetivo para uno o más de los puntos finales en la ruta del mensaje.

El atributo de SOAP agente se utiliza para tratar el elemento de encabezado a un punto final específico.

Sintaxis

soap:actor="URI"

Ejemplo

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="http://www.w3ii.com/transaction/"
  soap:actor="http://www.w3ii.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

El encodingStyle Atributo

El encodingStyle atributo se utiliza para definir los tipos de datos utilizados en el documento. Este atributo puede aparecer en cualquier elemento SOAP, y se aplicará a los contenidos de ese elemento y todos los elementos secundarios.

Un mensaje SOAP no tiene ninguna codificación predeterminada.

Sintaxis

soap:encodingStyle="URI"

El elemento del cuerpo de SOAP

El elemento de cuerpo SOAP requerido contiene el mensaje SOAP real previsto para el último punto final del mensaje.

elementos secundarios inmediatos del elemento de cuerpo SOAP pueden ser espacio de nombres cualificado.

Ejemplo

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3ii.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

El ejemplo anterior pide al precio de las manzanas. Tenga en cuenta que el m: GetPrice y los elementos del artículo arriba son elementos específicos de la aplicación. No son una parte del espacio de nombres SOAP.

Una respuesta SOAP podría ser algo como esto:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


El elemento error de SOAP

El elemento error de SOAP opcional se utiliza para indicar los mensajes de error.

El elemento error de SOAP contiene errores e información de estado de un mensaje SOAP.

Si un elemento de falta está presente, debe aparecer como un elemento hijo del elemento de cuerpo. Un elemento de falta sólo puede aparecer una vez en un mensaje SOAP.

El elemento error de SOAP tiene las siguientes sub-elementos:

Sub Elemento Descripción
<faultcode> Un código de identificación de la falla
<faultstring> Una explicación legible por humanos de la falla
<faultactor> Información sobre quién causó el fallo a suceder
<detail>

La información de error de aplicación específica relacionada con el elemento del cuerpo

Códigos de error de SOAP

Los valores FaultCode se definen a continuación se deben utilizar en el elemento de faultcode al describir fallos:

Error Descripción
VersionMismatch Se han encontrado un espacio de nombre no válido para el elemento SOAP
MustUnderstand Un elemento secundario inmediato del elemento de cabecera, con el mustUnderstand atributo establecido en "1" , se entiende que no
Client El mensaje se formó de manera incorrecta o contiene información incorrecta
Server Hubo un problema con el servidor de modo que el mensaje no podía proceder

El protocolo HTTP

HTTP se comunica a través de TCP / IP. Un cliente HTTP se conecta a un servidor HTTP utilizando TCP. Después de establecer una conexión, el cliente puede enviar un mensaje de petición HTTP al servidor:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

El servidor procesa la solicitud y envía una respuesta HTTP de vuelta al cliente. La respuesta contiene un código de estado que indica el estado de la solicitud:

200 OK
Content-Type: text/plain
Content-Length: 200

En el ejemplo anterior, el servidor devuelve un código de estado de 200. Este es el código estándar para el éxito de HTTP.

Si el servidor no ha podido decodificar la solicitud, podría haber vuelto algo como esto:

400 Bad Request
Content-Length: 0

SOAP Binding

La especificación SOAP define la estructura de los mensajes SOAP, no la forma en que se intercambian. Este vacío es llenado por lo que se llama "SOAP Bindings" . encuadernaciones SOAP son mecanismos que permiten a los mensajes SOAP que se intercambian de manera efectiva el uso de un protocolo de transporte.

La mayoría de las implementaciones de SOAP proporcionan enlaces para protocolos de transporte comunes, como HTTP o SMTP.

HTTP es síncrona y ampliamente utilizado. Una solicitud HTTP SOAP especifica al menos dos cabeceras HTTP: Content-Type y Content-Length.

SMTP es asíncrono y se utiliza en última instancia o casos particulares.

Implementaciones Java de jabón por lo general proporcionan un enlace para el JMS específica (Java Messaging System) protocolo.


Tipo de contenido

La cabecera Content-Type para una solicitud y respuesta SOAP define el tipo MIME del mensaje y la codificación de caracteres (optional) usado para el cuerpo XML de la petición o respuesta.

Sintaxis

Content-Type: MIMEType; charset=character-encoding

Ejemplo

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

La cabecera Content-Length para una solicitud y respuesta SOAP especifica el número de bytes en el cuerpo de la petición o respuesta.

Sintaxis

Content-Length: bytes

Ejemplo

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Un ejemplo de SOAP

En el siguiente ejemplo, una solicitud GetStockPrice se envía a un servidor. La solicitud tiene un parámetro StockName, y un parámetro de precio que se devuelve en la respuesta. El espacio de nombres para la función se define en "http://www.example.org/stock" .

Una petición SOAP:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

La respuesta SOAP:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>