Compreensão básica da estrutura WSDL – (Linguagem de descrição de serviço da Web) explicada
Publicados: 2020-08-24Você pode ter visto meu post anterior sobre chamada SOAP vs. REST. Hoje em dia, as empresas estão migrando para as chamadas de serviço REST, mas ainda há a maioria das empresas que ainda usa SOAP sobre REST. Este tutorial explica o básico de WSDL (Web Service Description Language).
Se você tem alguma pergunta abaixo, então você está no lugar certo:
- O que é WSDL (Web Services Description Language)?
- Tutorial WSDL
- Linguagem de descrição de serviços da Web (WSDL) explicada
- Exemplos de WSDL – Web Service Description Language
Linguagem de descrição de serviços da Web (WSDL)
No Java Web Development World, WSDL é um formato XML para descrever serviços de rede como um conjunto de terminais operando em mensagens contendo informações orientadas a documentos ou a procedimentos.
As operações e mensagens são descritas de forma abstrata e, em seguida, vinculadas a um protocolo de rede concreto e formato de mensagem para definir um endpoint. Os endpoints concretos relacionados são combinados em endpoints abstratos (serviços).
O WSDL é extensível para permitir a descrição de terminais e suas mensagens, independentemente de quais formatos de mensagem ou protocolos de rede são usados para comunicação, no entanto, as únicas ligações descritas neste documento descrevem como usar WSDL
em conjunto com SOAP 1.1, HTTP GET/POST e MIME.

Outro deve ler:
- Criar WSDL de amostra no Eclipse e gerar cliente
- Como construir RESTful Service com Java usando JAX-RS e Jersey (Exemplo)
Em outras palavras: um documento WSDL define serviços como coleções de terminais de rede ou ports
. No WSDL, a definição abstrata de terminais e mensagens é separada de sua implementação de rede concreta ou ligações de formato de dados. Isso permite a reutilização de definições abstratas: messages
, que são descrições abstratas dos dados que estão sendo trocados e tipos de porta que são coleções abstratas de operações.
O protocolo concreto e as especificações de formato de dados para um determinado tipo de porta constituem uma binding
reutilizável. Uma porta é definida associando um endereço de rede a uma ligação reutilizável e uma coleção de portas define um serviço.
Portanto, um documento WSDL usa os seguintes elementos na definição de serviços de rede:
-
Types
– um contêiner para definições de tipo de dados usando algum sistema de tipos (comoXSD
). -
Message
– uma definição abstrata e digitada dos dados que estão sendo comunicados. -
Operation
– uma descrição abstrata de uma ação suportada pelo serviço. -
Port Type
– um conjunto abstrato de operações suportadas por um ou mais terminais. -
Binding
– um protocolo concreto e especificação de formato de dados para um tipo de porta específico. -
Port
– um único endpoint definido como uma combinação de uma ligação e um endereço de rede. -
Service
– uma coleção de terminais relacionados.
Elemento | Descrição |
---|---|
<tipos> | Define os tipos de dados (XML Schema) usados pelo serviço web |
<mensagem> | Define os elementos de dados para cada operação |
<portType> | Descreve as operações que podem ser executadas e as mensagens envolvidas. |
<ligação> | Define o protocolo e o formato de dados para cada tipo de porta |
Exemplo: solicitação/resposta SOAP 1.1 via HTTP
Documento WSDL XML de Amostra.
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 > |

Exemplo 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 > |
Padrão de Design de Fábrica explicado com Exemplo.

Deixe-me saber se você tiver alguma dúvida.