servicio ejemplo crear consumir java web-services soap wsdl

ejemplo - web service java netbeans



¿Diferencia entre un mensaje SOAP y un WSDL? (8)

Estoy confundido acerca de cómo encajan los mensajes SOAP y WSDL? Empecé a buscar mensajes SOAP como:

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/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>

¿Son todos los mensajes SOAP WSDL? ¿Es SOAP un protocolo que acepta sus propios "mensajes SOAP" o "WSDL"? Si son diferentes, ¿cuándo debería usar mensajes SOAP y cuándo debería usar WSDL?

Algunas aclaraciones sobre esto serían increíbles.


En términos simples si tienes un servicio web de calculadora. WSDL le informa sobre las funciones que puede implementar o exponer al cliente. Por ejemplo: agregar, borrar, restar, etc. Mientras que al usar SOAP, en realidad lleva a cabo acciones como doDelete (), doSubtract (), doAdd (). Así que SOAP y WSDL son manzanas y naranjas. No deberíamos compararlos. Ambos tienen su propia funcionalidad diferente.


Mejor analogía que la llamada telefónica: pedidos de productos por correo postal desde un servicio de pedidos por correo. El documento WSDL es como las instrucciones que explican cómo crear el tipo de formularios de pedido que el proveedor de servicios aceptará. Un mensaje SOAP es como un sobre con un diseño estándar (tamaño, forma, construcción) que cada oficina de correos de todo el mundo sabe cómo manejar. Pones tu formulario de pedido en ese sobre. La red (por ejemplo, Internet) es el servicio postal. Pones tu sobre en el correo. Los empleados del servicio postal no miran dentro del sobre. El XML de carga útil es el formulario de pedido que ha incluido en el sobre. Después de que la oficina postal entrega el sobre, el proveedor de servicios web abre el sobre y procesa el formulario de pedido. Si ha creado y completado el formulario correctamente, le enviarán por correo el producto que le ordenó.


Necesitamos definir qué es un servicio web antes de decir cuál es la diferencia entre SOAP y WSDL, donde los dos (SOAP y WSDL) son componentes de un servicio web.

La mayoría de las aplicaciones se desarrollan para interactuar con los usuarios, el usuario ingresa o busca datos a través de una interfaz y luego la aplicación responde a la entrada del usuario.

Un servicio web hace más o menos lo mismo, excepto que una aplicación de servicio web se comunica solo de máquina a máquina o aplicación a aplicación. A menudo no hay interacción directa del usuario.

Un servicio web básicamente es una colección de protocolos abiertos que se utiliza para intercambiar datos entre aplicaciones. El uso de protocolos abiertos permite que los servicios web sean independientes de la plataforma. Los software que están escritos en diferentes lenguajes de programación y que se ejecutan en diferentes plataformas pueden usar servicios web para intercambiar datos a través de redes informáticas como Internet. En otras palabras, las aplicaciones de Windows pueden hablar con aplicaciones de PHP, Java y Perl y muchas otras, que en circunstancias normales no serían posibles.

¿Cómo funcionan los servicios web?

Debido a que las diferentes aplicaciones están escritas en diferentes lenguajes de programación, a menudo no se pueden comunicar entre sí. Un servicio web permite esta comunicación mediante el uso de una combinación de protocolos y estándares abiertos, principalmente XML, SOAP y WSDL. Un servicio web utiliza XML para etiquetar datos, SOAP para transferir un mensaje y finalmente WSDL para describir la disponibilidad de los servicios. Echemos un vistazo a estos tres componentes principales de una aplicación de servicio web.

Protocolo simple de acceso a objetos (SOAP)

El Protocolo simple de acceso a objetos o SOAP es un protocolo para enviar y recibir mensajes entre aplicaciones sin enfrentar problemas de interoperabilidad (interoperabilidad, lo que significa que la plataforma en la que se ejecuta un servicio web pasa a ser irrelevante). Otro protocolo que tiene una función similar es HTTP. Se usa para acceder a páginas web o navegar por la red. HTTP garantiza que no tiene que preocuparse por qué tipo de servidor web, ya sea Apache o IIS o cualquier otro, le sirve las páginas que está viendo o si las páginas que visualiza se crearon en ASP.NET o HTML.

Como SOAP se utiliza tanto para solicitar como para responder, su contenido varía ligeramente según su finalidad.

A continuación se muestra un ejemplo de un mensaje de solicitud y respuesta SOAP

Solicitud de SOAP:

POST /InStock HTTP/1.1 Host: www.bookshop.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.bookshop.org/prices"> <m:GetBookPrice> <m:BookName>The Fleamarket</m:BookName> </m:GetBookPrice> </soap:Body> </soap:Envelope>

Respuesta de SOAP:

POST /InStock HTTP/1.1 Host: www.bookshop.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.bookshop.org/prices"> <m:GetBookPriceResponse> <m: Price>10.95</m: Price> </m:GetBookPriceResponse> </soap:Body> </soap:Envelope>

Aunque ambos mensajes se ven iguales, llevan a cabo diferentes métodos. Por ejemplo, al observar los ejemplos anteriores, puede ver que el mensaje de solicitud utiliza el método GetBookPrice para obtener el precio del libro. La respuesta se lleva a cabo mediante el método GetBookPriceResponse , que será el mensaje que verá usted como el "solicitante". También puede ver que los mensajes se componen utilizando XML.

Lenguaje de descripción de servicios web o WSDL

WSDL es un documento que describe un servicio web y también le informa cómo acceder y usar sus métodos.

WSDL se ocupa de cómo sabe qué métodos están disponibles en un servicio web con el que tropieza en Internet.

Eche un vistazo a un archivo WSDL de muestra:

<?xml version="1.0" encoding="UTF-8"?> <definitions name ="DayOfWeek" targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="DayOfWeekInput"> <part name="date" type="xsd:date"/> </message> <message name="DayOfWeekResponse"> <part name="dayOfWeek" type="xsd:string"/> </message> <portType name="DayOfWeekPortType"> <operation name="GetDayOfWeek"> <input message="tns:DayOfWeekInput"/> <output message="tns:DayOfWeekResponse"/> </operation> </portType> <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetDayOfWeek"> <soap:operation soapAction="getdayofweek"/> <input> <soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="DayOfWeekService" > <documentation> Returns the day-of-week name for a given date </documentation> <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> </port> </service> </definitions>

Las principales cosas para recordar acerca de un archivo WSDL son que le proporciona:

  • Una descripción de un servicio web
  • Los métodos que utiliza un servicio web y los parámetros que toma
  • Una forma de localizar servicios web

  • Podemos considerar una llamada telefónica en ese número es wsdl y el intercambio de información es jabón.

    WSDL es una descripción de cómo conectarse con el servidor de comunicaciones. SOAP tiene mensajes de comunicación.


    SOAP: es un protocolo de comunicación basado en XML estándar abierto que se utiliza para intercambiar información del usuario al servicio web o viceversa. El jabón es solo el documento en el que los datos están organizados de alguna Manera. Para cada solicitud y respuesta, puede haber jabón por separado.

    WSDL: en soap, los datos se organizan de alguna manera y esta organización se especifica en WSDL. El tipo de datos que se debe utilizar también se especifica aquí. Para solicitud y respuesta solo WSDL estará presente


    Se envía un documento SOAP por solicitud. Digamos que éramos una librería y teníamos un servidor remoto que consultamos para conocer el precio actual de un libro en particular. Digamos que necesitamos pasar el título del libro, el número de páginas y el número de ISBN al servidor.

    Cada vez que queríamos saber el precio, le enviabamos un mensaje SOAP único. Se vería algo como esto;

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com"> <ISBN>978-0451524935</ISBN> <Title>1984</Title> <NumPages>328</NumPages> </m:GetBookPrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

    Y esperamos recibir un mensaje de respuesta SOAP como;

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com"> <CurrentPrice>8.99</CurrentPrice> <Currency>USD</Currency> </m:GetBookPriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

    El WSDL luego describe cómo manejar / procesar este mensaje cuando un servidor lo recibe. En nuestro caso, describe qué tipos serían el Título, NumPages e ISBN, si deberíamos esperar una respuesta del mensaje GetBookPrice y cómo debería ser esa respuesta.

    Los tipos se verían así;

    <wsdl:types> <!-- all type declarations are in a chunk of xsd --> <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <xsd:element name="GetBookPrice"> <xsd:complexType> <xsd:sequence> <xsd:element name="ISBN" type="string"/> <xsd:element name="Title" type="string"/> <xsd:element name="NumPages" type="integer"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="GetBookPriceResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="CurrentPrice" type="decimal" /> <xsd:element name="Currency" type="string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types>

    Pero el WSDL también contiene más información, sobre qué funciones se vinculan para realizar operaciones, y qué operaciones están disponibles en el servicio, y en qué lugar de una red puede acceder al servicio / operaciones.

    Ver también W3 Ejemplos anotados de WSDL


    Un WSDL (Web Service Definition Language) es un archivo de metadatos que describe el servicio web.

    Cosas como nombre de operación, parámetros, etc.

    Los mensajes de jabón son las cargas reales


    Un mensaje SOAP es un documento XML que se utiliza para transmitir sus datos. WSDL es un documento XML que describe cómo conectarse y realizar solicitudes a su servicio web.

    Básicamente, los mensajes SOAP son los datos que usted transmite, WSDL le dice lo que puede hacer y cómo realizar las llamadas.

    Una búsqueda rápida en Google arrojará muchas fuentes para lecturas adicionales (el enlace del libro anterior ya está muerto, para combatir esto pondremos nuevas recomendaciones en los comentarios)

    Solo tomando nota de sus preguntas específicas:

    ¿Son todos los mensajes SOAP WSDL? No, no son lo mismo en absoluto.

    ¿Es SOAP un protocolo que acepta sus propios "mensajes SOAP" o "WSDL"? No, se requiere lectura ya que está lejos.

    Si son diferentes, ¿cuándo debería usar mensajes SOAP y cuándo debería usar WSDL? El jabón es la estructura que aplica a su mensaje / datos para transferir. Los WSDL se usan solo para determinar cómo realizar llamadas al servicio en primer lugar. A menudo, esto es una cosa de una sola vez cuando primero agrega código para hacer una llamada a un servicio web en particular.