Comprensión básica de la estructura WSDL (lenguaje de descripción de servicios web) explicado
Publicado: 2020-08-24Es posible que haya visto mi publicación anterior sobre la llamada SOAP vs. REST. Ahora, un día, las empresas se están moviendo a las llamadas de servicio REST, pero aún hay una mayoría de empresas que todavía usan SOAP sobre REST. Este tutorial explica los conceptos básicos de WSDL (lenguaje de descripción de servicios web).
Si tiene alguna de las siguientes preguntas, entonces está en el lugar correcto:
- ¿Qué es el lenguaje de descripción de servicios web (WSDL)?
- Tutorial de WSDL
- Lenguaje de descripción de servicios web (WSDL) explicado
- Ejemplos de WSDL: lenguaje de descripción de servicios web
Lenguaje de descripción de servicios web (WSDL)
En Java Web Development World, WSDL es un formato XML para describir los servicios de red como un conjunto de puntos finales que operan en mensajes que contienen información orientada a documentos oa procedimientos.
Las operaciones y los mensajes se describen de forma abstracta y luego se vinculan a un protocolo de red y un formato de mensaje concretos para definir un punto final. Los puntos finales concretos relacionados se combinan en puntos finales abstractos (servicios).
WSDL es extensible para permitir la descripción de puntos finales y sus mensajes, independientemente de qué formatos de mensaje o protocolos de red se usen para comunicarse; sin embargo, los únicos enlaces descritos en este documento describen cómo usar WSDL
junto con SOAP 1.1, HTTP GET/POST y MÍMICA.

Otro debe leer:
- Crear WSDL de muestra en Eclipse y generar cliente
- Cómo construir un servicio RESTful con Java usando JAX-RS y Jersey (Ejemplo)
En otras palabras: un documento WSDL define los servicios como colecciones de puntos finales de red o ports
. En WSDL, la definición abstracta de puntos finales y mensajes está separada de su implementación de red concreta o enlaces de formato de datos. Esto permite la reutilización de definiciones abstractas: messages
, que son descripciones abstractas de los datos que se intercambian, y tipos de puerto, que son colecciones abstractas de operaciones.
El protocolo concreto y las especificaciones de formato de datos para un tipo de puerto en particular constituyen un binding
reutilizable. Un puerto se define asociando una dirección de red con un enlace reutilizable y una colección de puertos define un servicio.
Por lo tanto, un documento WSDL utiliza los siguientes elementos en la definición de servicios de red:
-
Types
: un contenedor para definiciones de tipos de datos utilizando algún sistema de tipos (comoXSD
). -
Message
: una definición abstracta y mecanografiada de los datos que se comunican. -
Operation
: una descripción abstracta de una acción respaldada por el servicio. -
Port Type
: un conjunto abstracto de operaciones admitidas por uno o más puntos finales. -
Binding
: un protocolo concreto y una especificación de formato de datos para un tipo de puerto en particular. -
Port
: un punto final único definido como una combinación de un enlace y una dirección de red. -
Service
: una colección de puntos finales relacionados.
Elemento | Descripción |
---|---|
<tipos> | Define los tipos de datos (esquema XML) utilizados por el servicio web |
<mensaje> | Define los elementos de datos para cada operación. |
<tipo de puerto> | Describe las operaciones que se pueden realizar y los mensajes implicados. |
<vinculante> | Define el protocolo y el formato de datos para cada tipo de puerto |
Ejemplo: SOAP 1.1 Solicitud/Respuesta a través de HTTP
Ejemplo de documento XML WSDL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<? xml version = "1.0" ?> < definitions name = "StockQuote" targetNamespace = "http://example.com/stockquote.wsdl" xmlns : tns = "http://example.com/stockquote.wsdl" xmlns : xsd1 = "http://example.com/stockquote.xsd" xmlns : soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns = "http://schemas.xmlsoap.org/wsdl/" > < types > < schema targetNamespace = "http://example.com/stockquote.xsd" xmlns = "http://www.w3.org/2000/10/XMLSchema" > < element name = "TradePriceRequest" > < complexType > < all > < element name = "tickerSymbol" type = "string" / > < / all > < / complexType > < / element > < element name = "TradePrice" > < complexType > < all > < element name = "price" type = "float" / > < / all > < / complexType > < / element > < / schema > < / types > < message name = "GetLastTradePriceInput" > < part name = "body" element = "xsd1:TradePriceRequest" / > < / message > < message name = "GetLastTradePriceOutput" > < part name = "body" element = "xsd1:TradePrice" / > < / message > < portType name = "StockQuotePortType" > < operation name = "GetLastTradePrice" > < input message = "tns:GetLastTradePriceInput" / > < output message = "tns:GetLastTradePriceOutput" / > < / operation > < / portType > < binding name = "StockQuoteSoapBinding" type = "tns:StockQuotePortType" > < soap : binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" / > < operation name = "GetLastTradePrice" > < soap : operation soapAction = "http://example.com/GetLastTradePrice" / > < input > < soap : body use = "literal" / > < / input > < output > < soap : body use = "literal" / > < / output > < / operation > < / binding > < service name = "StockQuoteService" > < documentation > My first service < / documentation > < port name = "StockQuotePort" binding = "tns:StockQuoteBinding" > < soap : address location = "http://example.com/stockquote" / > < / port > < / service > < / definitions > |

Ejemplo de SOAP 2.0 WSDL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
< ! -- Crunchify ' s example of WSDL 2.0 -- > <? xml version = "1.0" encoding = "UTF-8" ?> < definitions xmlns = "http://www.w3.org/ns/wsdl" xmlns : tns = "http://www.tmsws.com/wsdl20sample" xmlns : whttp = "http://schemas.xmlsoap.org/wsdl/http/" xmlns : wsoap = "http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace = "http://www.tmsws.com/wsdl20sample" > < ! -- Abstract type -- > < types > < xs : schema xmlns : xs = "http://www.w3.org/2001/XMLSchema" xmlns = "http://www.tmsws.com/wsdl20sample" targetNamespace = "http://crunchify.com/wsdl20" > < xs : element name = "request" > . . . add your code here . . . < / xs : element > < xs : element name = "response" > . . . add your code here . . . < / xs : element > < / xs : schema > < / types > < ! -- Abstract interfaces -- > < interface name = "CrunchifyItem" > < fault name = "ErrorDescription" element = "tns:response" / > < operation name = "Get" pattern = "http://www.w3.org/ns/wsdl/in-out" > < input messageLabel = "In" element = "tns:request" / > < output messageLabel = "Out" element = "tns:response" / > < / operation > < / interface > < ! -- Concrete Binding Over HTTP -- > < binding name = "HttpBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/http" > < operation ref = "tns:Get" whttp : method = "GET" / > < / binding > < ! -- Concrete Binding with SOAP -- > < binding name = "SoapBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/soap" wsoap : protocol = "http://www.w3.org/2003/05/soap/bindings/HTTP/" wsoap : mepDefault = "http://www.w3.org/2003/05/soap/mep/request-response" > < operation ref = "tns:Get" / > < / binding > < ! -- Web Service offering endpoints for both bindings -- > < service name = "ServiceOne" interface = "tns:CrunchifyItem" > < endpoint name = "HttpEndpoint" binding = "tns:HttpBinding" address = "http://www.example.com/rest/" / > < endpoint name = "SoapEndpoint" binding = "tns:SoapBinding" address = "http://crunchify.com/soap/" / > < / service > < / definitions > |
Patrón de diseño de fábrica explicado con un ejemplo.

Hazme saber si tienes alguna pregunta.