SOAP - Guía rápida

SOAP es un acrónimo de Protocolo simple de acceso a objetos. Es un protocolo de mensajería basado en XML para intercambiar información entre computadoras. SOAP es una aplicación de la especificación XML.

Puntos a tener en cuenta

  • SOAP es un protocolo de comunicación diseñado para comunicarse a través de Internet.

  • SOAP puede extender HTTP para mensajería XML.

  • SOAP proporciona transporte de datos para servicios web.

  • SOAP puede intercambiar documentos completos o llamar a un procedimiento remoto.

  • SOAP se puede utilizar para transmitir un mensaje.

  • SOAP es independiente de la plataforma y el idioma.

  • SOAP es la forma XML de definir qué información se envía y cómo.

  • SOAP permite que las aplicaciones cliente se conecten fácilmente a servicios remotos e invoquen métodos remotos.

Aunque SOAP se puede utilizar en una variedad de sistemas de mensajería y se puede entregar a través de una variedad de protocolos de transporte, el enfoque inicial de SOAP son las llamadas a procedimientos remotos transportadas a través de HTTP.

Otros marcos, incluidos CORBA, DCOM y Java RMI, proporcionan una funcionalidad similar a SOAP, pero los mensajes SOAP están escritos completamente en XML y, por lo tanto, son exclusivamente independientes de la plataforma y el lenguaje.

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

  • Envelope- Define el inicio y el final del mensaje. Es un elemento obligatorio.

  • Header- Contiene cualquier atributo opcional del mensaje utilizado para procesar el mensaje, ya sea en un punto intermedio o en el punto final último. Es un elemento opcional.

  • Body- Contiene los datos XML que componen el mensaje que se envía. Es un elemento obligatorio.

  • Fault - Un elemento de falla opcional que proporciona información sobre los errores que ocurren durante el procesamiento del mensaje.

Todos estos elementos se declaran en el espacio de nombres predeterminado para el sobre SOAP: http://www.w3.org/2001/12/soap-envelope y el espacio de nombres predeterminado para la codificación SOAP y los tipos de datos es: http://www.w3.org/2001/12/soap-encoding

NOTE- Todas estas especificaciones están sujetas a cambios. Así que continúe actualizándose con las últimas especificaciones disponibles en el sitio web de W3.

Estructura del mensaje SOAP

El siguiente bloque describe la estructura general de un mensaje SOAP:

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

El sobre SOAP indica el inicio y el final del mensaje para que el receptor sepa cuándo se ha recibido un mensaje completo. El sobre SOAP resuelve el problema de saber cuándo ha terminado de recibir un mensaje y está listo para procesarlo. Por tanto, el sobre SOAP es básicamente un mecanismo de embalaje.

Puntos a tener en cuenta

  • Cada mensaje SOAP tiene un elemento Envelope raíz.

  • El sobre es una parte obligatoria del mensaje SOAP.

  • Cada elemento Envelope debe contener exactamente un elemento Body.

  • Si un Sobre contiene un elemento de Encabezado, no debe contener más de uno y debe aparecer como el primer elemento secundario del Sobre, antes del Cuerpo.

  • El sobre cambia cuando cambian las versiones de SOAP.

  • El sobre SOAP se especifica mediante el prefijo de espacio de nombres ENV y el elemento Envelope.

  • La codificación SOAP opcional también se especifica mediante un nombre de espacio de nombres y el elemento encodingStyle opcional , que también podría apuntar a un estilo de codificación diferente al SOAP.

  • Un procesador SOAP compatible con v1.1 genera un error al recibir un mensaje que contiene el espacio de nombres del sobre v1.2.

  • Un procesador SOAP compatible con v1.2 genera un error de VersionMismatch si recibe un mensaje que no incluye el espacio de nombres del sobre v1.2.

Mensaje SOAP compatible con v1.2

A continuación se muestra un ejemplo de mensaje SOAP compatible con v1.2.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

SOAP con HTTP POST

El siguiente ejemplo ilustra el uso de un mensaje SOAP dentro de una operación HTTP POST, que envía el mensaje al servidor. Muestra los espacios de nombres para la definición del esquema del sobre y para la definición del esquema de las reglas de codificación. La referencia OrderEntry en el encabezado HTTP es el nombre del programa que se invocará en el sitio web tutorialspoint.com.

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

NOTE - El enlace HTTP especifica la ubicación del servicio.

El elemento de encabezado opcional ofrece un marco flexible para especificar requisitos adicionales a nivel de aplicación. Por ejemplo, el elemento Encabezado se puede utilizar para especificar una firma digital para servicios protegidos por contraseña. Asimismo, se puede utilizar para especificar un número de cuenta para los servicios SOAP de pago por uso.

Puntos a tener en cuenta

  • Es una parte opcional de un mensaje SOAP.

  • Los elementos de encabezado pueden aparecer varias veces.

  • Los encabezados están destinados a agregar nuevas características y funcionalidades.

  • El encabezado SOAP contiene entradas de encabezado definidas en un espacio de nombres.

  • El encabezado está codificado como el primer elemento secundario inmediato del sobre SOAP.

  • Cuando se definen varios encabezados, todos los elementos secundarios inmediatos del encabezado SOAP se interpretan como bloques de encabezado SOAP.

Atributos de encabezado SOAP

Un encabezado SOAP puede tener los siguientes dos atributos:

Atributo actor

El protocolo SOAP define una ruta de mensaje como una lista de nodos de servicio SOAP. Cada uno de estos nodos intermedios puede realizar algún procesamiento y luego reenviar el mensaje al siguiente nodo de la cadena. Al establecer el atributo Actor, el cliente puede especificar el destinatario del encabezado SOAP.

Atributo MustUnderstand

Indica si un elemento de encabezado es opcional u obligatorio. Si se establece en verdadero, el destinatario debe comprender y procesar el atributo Encabezado de acuerdo con su semántica definida o devolver un error.

El siguiente ejemplo muestra cómo utilizar un encabezado en un mensaje SOAP.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

El cuerpo de SOAP es un elemento obligatorio que contiene los datos XML definidos por la aplicación que se intercambian en el mensaje SOAP. El cuerpo debe estar contenido dentro del sobre y debe seguir cualquier encabezado que pueda definirse para el mensaje.

El cuerpo se define como un elemento secundario del sobre y la semántica del cuerpo se define en el esquema SOAP asociado.

El cuerpo contiene información obligatoria destinada al receptor final del mensaje. Por ejemplo

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

El ejemplo anterior solicita una cotización de equipos de computadora. Tenga en cuenta que los elementos m: GetQuotation y Item anteriores son elementos específicos de la aplicación. No forman parte del estándar SOAP.

Aquí está la respuesta a la consulta anterior:

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Normalmente, la aplicación también define un esquema para contener la semántica asociada con los elementos de solicitud y respuesta.

El servicio de cotización puede implementarse utilizando un EJB que se ejecuta en un servidor de aplicaciones; si es así, el procesador SOAP sería responsable de mapear la información del cuerpo como parámetros dentro y fuera de la implementación EJB del servicio GetQuotationResponse . El procesador SOAP también podría asignar la información del cuerpo a un objeto .NET, un objeto CORBA, un programa COBOL, etc.

Si se produce un error durante el procesamiento, la respuesta a un mensaje SOAP es un elemento de error SOAP en el cuerpo del mensaje y el error se devuelve al remitente del mensaje SOAP.

El mecanismo de falla SOAP devuelve información específica sobre el error, incluido un código predefinido, una descripción y la dirección del procesador SOAP que generó la falla.

Puntos a tener en cuenta

  • Un mensaje SOAP puede llevar solo un bloque de falla.

  • La falla es una parte opcional de un mensaje SOAP.

  • Para el enlace HTTP, una respuesta exitosa se vincula al rango de códigos de estado de 200 a 299.

  • SOAP Fault está vinculado al rango de códigos de estado 500 a 599.

Subelementos de falla

La falla SOAP tiene los siguientes subelementos:

No Señor Subelemento y descripción
1

<faultCode>

Es un código de texto que se utiliza para indicar una clase de errores. Consulte la siguiente tabla para obtener una lista de códigos de falla predefinidos.

2

<faultString>

Es un mensaje de texto que explica el error.

3

<faultActor>

Es una cadena de texto que indica quién causó la falla. Es útil si el mensaje SOAP viaja a través de varios nodos en la ruta del mensaje SOAP y el cliente necesita saber qué nodo causó el error. Un nodo que no actúa como destino final debe incluir un elemento failureActor .

4

<detail>

Es un elemento que se utiliza para transportar mensajes de error específicos de la aplicación. El elemento de detalle puede contener elementos secundarios denominados entradas de detalle.

Códigos de error SOAP

Los valores de failCode definidos a continuación deben usarse en el elemento de código de falla al describir las fallas.

No Señor Error de descripción
1

SOAP-ENV:VersionMismatch

Se encontró un espacio de nombres no válido para el elemento SOAP Envelope.

2

SOAP-ENV:MustUnderstand

No se entendió un elemento secundario inmediato del elemento Header, con el atributo mustUnderstand establecido en "1".

3

SOAP-ENV:Client

El mensaje se formó incorrectamente o contenía información incorrecta.

4

SOAP-ENV:Server

Hubo un problema con el servidor, por lo que el mensaje no pudo continuar.

Ejemplo de falla de SOAP

El siguiente código es un ejemplo de falla. El cliente ha solicitado un método llamado ValidateCreditCard , pero el servicio no admite dicho método. Esto representa un error de solicitud del cliente y el servidor devuelve la siguiente respuesta SOAP:

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP incluye un conjunto integrado de reglas para codificar tipos de datos. Permite que el mensaje SOAP indique tipos de datos específicos, como enteros, flotantes, dobles o matrices.

  • Los tipos de datos SOAP se dividen en dos categorías amplias: tipos escalares y tipos compuestos.

  • Los tipos escalares contienen exactamente un valor, como un apellido, precio o descripción del producto.

  • Los tipos compuestos contienen varios valores, como una orden de compra o una lista de cotizaciones de acciones.

  • Los tipos de compuestos se subdividen en matrices y estructuras.

  • El estilo de codificación de un mensaje SOAP se establece mediante el atributo SOAP-ENV: encodingStyle .

  • Para usar la codificación SOAP 1.1, use el valor http://schemas.xmlsoap.org/soap/encoding/

  • Para usar la codificación SOAP 1.2, use el valor http://www.w3.org/2001/12/soap-encoding

  • La última especificación SOAP adopta todos los tipos integrados definidos por XML Schema. Aún así, SOAP mantiene su propia convención para definir construcciones no estandarizadas por XML Schema, como matrices y referencias.

Tipos escalares

Para los tipos escalares, SOAP adopta todos los tipos simples incorporados especificados por la especificación del esquema XML. Esto incluye cadenas, flotantes, dobles y enteros.

La siguiente tabla enumera los principales tipos simples, extraídos del esquema XML Parte 0 - Introducción http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Tipos simples integrados en el esquema XML
Tipo simple Ejemplo (s)
cuerda Confirma que esto es eléctrico.
booleano verdadero, falso, 1, 0.
flotador -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
doble -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
decimal -1,23, 0, 123,4, 1000,00.
binario 100010
entero -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
largo -1, 12678967543233
En t -1, 126789675
corto -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
entero positivo 1, 126789.
fecha 1999-05-31, --- 05.
hora 13: 20: 00.000, 13: 20: 00.000-05: 00

Por ejemplo, aquí hay una respuesta SOAP con un tipo de datos doble:

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Tipos de compuestos

Las matrices SOAP tienen un conjunto de reglas muy específico, que requieren que especifique tanto el tipo de elemento como el tamaño de la matriz. SOAP también admite matrices multidimensionales, pero no todas las implementaciones de SOAP admiten la funcionalidad multidimensional.

Para crear una matriz, debe especificarla como un tipo de matriz xsi : . La matriz también debe incluir un atributo arrayType . Este atributo es necesario para especificar el tipo de datos de los elementos contenidos y la (s) dimensión (es) de la matriz.

Por ejemplo, el siguiente atributo especifica una matriz de 10 valores dobles:

arrayType = "xsd:double[10]"

Por el contrario, el siguiente atributo especifica una matriz bidimensional de cadenas:

arrayType = "xsd:string[5,5]"

Aquí hay una respuesta SOAP de muestra con una matriz de valores dobles:

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"  
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Las estructuras contienen varios valores, pero cada elemento se especifica con un elemento de acceso único. Por ejemplo, considere un artículo dentro de un catálogo de productos. En este caso, la estructura puede contener un SKU de producto, un nombre de producto, una descripción y un precio. Así es como se representaría una estructura de este tipo en un mensaje SOAP:

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
		
         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

NOTE- Tenga cuidado con la sangría adecuada mientras escribe su código SOAP. Cada elemento de una estructura se especifica con un nombre de acceso exclusivo. Por ejemplo, el mensaje anterior incluye cuatro elementos de acceso: nombre, precio, descripción y SKU. Cada elemento puede tener su propio tipo de datos. Por ejemplo, el nombre se especifica como una cadena, mientras que el precio se especifica como doble.

SOAP no está vinculado a ningún protocolo de transporte. SOAP se puede transportar a través de SMTP, FTP, IBM MQSeries o Microsoft Message Queue Server (MSMQ).

La especificación SOAP incluye detalles sobre HTTP únicamente. HTTP sigue siendo el protocolo de transporte SOAP más popular.

SOAP a través de HTTP

Lógicamente, las solicitudes SOAP se envían a través de una solicitud HTTP y las respuestas SOAP se devuelven dentro del contenido de la respuesta HTTP. Si bien las solicitudes SOAP se pueden enviar a través de HTTP GET, la especificación solo incluye detalles sobre HTTP POST.

Además, se requieren tanto las solicitudes como las respuestas HTTP para establecer su tipo de contenido en texto / xml.

La especificación SOAP exige que el cliente debe proporcionar un encabezado SOAPAction, pero el valor real del encabezado SOAPAction depende de la implementación del servidor SOAP.

Por ejemplo, para acceder al servicio de traducción de AltaVista BabelFish, alojado por XMethods, debe especificar lo siguiente como un encabezado SOAPAction.

urn:xmethodsBabelFish#BabelFish

Incluso si el servidor no requiere un encabezado SOAPAction completo, el cliente debe especificar una cadena vacía ("") o un valor nulo. Por ejemplo

SOAPAction: ""
SOAPAction:

Aquí hay una solicitud de muestra enviada a través de HTTP al servicio de traducción Babelfish de XMethods:

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Tenga en cuenta el tipo de contenido y el encabezado SOAPAction. También tenga en cuenta que el método BabelFish requiere dos parámetros de cadena. El modo de traducción en_fr traduce del inglés al francés.

Aquí está la respuesta de XMethods:

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Las respuestas SOAP entregadas a través de HTTP deben seguir los mismos códigos de estado HTTP. Por ejemplo, un código de estado 200 OK indica una respuesta exitosa. Un código de estado de 500 Internal Server Error indica que hay un error del servidor y que la respuesta SOAP incluye un elemento Fault.

En el siguiente ejemplo, se envía una solicitud GetQuotation a un servidor SOAP a través de HTTP. La solicitud tiene un QuotationName parámetro, y una cita será devuelto en la respuesta.

El espacio de nombres de la función se define en http://www.xyz.org/quotation habla a.

Aquí está la solicitud SOAP:

POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
      <m:GetQuotation>
         <m:QuotationsName>MiscroSoft</m:QuotationsName>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Una respuesta SOAP correspondiente se parece a:

HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
      <m:GetQuotationResponse>
         <m:Quotation>Here is the quotation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP 1.1 se presentó originalmente al W3C en mayo de 2000. Los participantes oficiales incluyeron grandes empresas como Microsoft, IBM y Ariba, y empresas más pequeñas como UserLand Software y DevelopMentor.

En julio de 2001, el Grupo de Trabajo del Protocolo XML publicó un "borrador de trabajo" de SOAP 1.2. Dentro del W3C, este documento es oficialmente un trabajo en progreso, lo que significa que es probable que el documento se actualice muchas veces antes de su finalización.

SOAP versión 1.1 está disponible en línea en http://www.w3.org/TR/SOAP/

El borrador de trabajo de SOAP Versión 1.2 está disponible en http://www.w3.org/TR/soap12/

Tenga en cuenta que el W3C también aloja un envío de "Mensajes SOAP con archivos adjuntos", que se separa de la especificación SOAP principal. Esta especificación permite que los mensajes SOAP incluyan archivos adjuntos binarios como imágenes y archivos de sonido. Para obtener detalles completos, consulte la nota del W3C enhttp://www.w3.org/TR/SOAP-attachments.