XML WSDL
Web Services Description Language for defining services
📄 What is WSDL?
WSDL (Web Services Description Language) is an XML format that describes web services. It defines service operations, message formats, protocols, and endpoints for client-server communication.
<!-- Basic WSDL Structure -->
<definitions>
<types>...</types>
<message>...</message>
<portType>...</portType>
</definitions>
WSDL Components
Types
Define data types used in messages
<types>
<xs:schema>...</xs:schema>
</types>
Messages
Define data being exchanged
<message name="GetUserRequest">
<part name="userId" type="xs:int"/>
</message>
Port Type
Define operations and messages
<portType name="UserService">
<operation name="getUser">...</operation>
</portType>
Binding
Specify protocol and format
<binding name="UserBinding"
type="tns:UserService">...</binding>
🔹 Simple WSDL Example
A basic WSDL document defining a simple calculator service with add and subtract operations. This shows the fundamental structure of a WSDL file.
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="CalculatorService"
targetNamespace="http://example.com/calculator"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/calculator"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Types -->
<types>
<xs:schema targetNamespace="http://example.com/calculator">
<xs:element name="AddRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="a" type="xs:int"/>
<xs:element name="b" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AddResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="result" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<!-- Messages -->
<message name="AddRequestMsg">
<part name="parameters" element="tns:AddRequest"/>
</message>
<message name="AddResponseMsg">
<part name="parameters" element="tns:AddResponse"/>
</message>
<!-- Port Type -->
<portType name="CalculatorPortType">
<operation name="Add">
<input message="tns:AddRequestMsg"/>
<output message="tns:AddResponseMsg"/>
</operation>
</portType>
</definitions>
WSDL Structure:
✅ Types define request/response structure
✅ Messages reference the types
✅ PortType defines the Add operation
🔹 WSDL Binding
Binding specifies the protocol and data format for the service. It connects the abstract definition to concrete implementation details like SOAP over HTTP.
<!-- SOAP Binding -->
<binding name="CalculatorBinding" type="tns:CalculatorPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Add">
<soap:operation soapAction="http://example.com/calculator/Add"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
Binding Attributes:
- style: "document" or "rpc" (Remote Procedure Call)
- transport: Protocol used (usually HTTP)
- use: "literal" or "encoded" for message format
- soapAction: URI identifying the operation
🔹 WSDL Service and Port
The service element defines the endpoint where the web service is accessible. It combines binding with the actual URL location.
<!-- Service Definition -->
<service name="CalculatorService">
<documentation>
A simple calculator web service
</documentation>
<port name="CalculatorPort" binding="tns:CalculatorBinding">
<soap:address location="http://example.com/calculator"/>
</port>
</service>
Service Components:
Service: Container for ports
Port: Single endpoint for the service
Address: URL where service is hosted
🔹 Complete WSDL Example
A full WSDL document for a user management service with all components:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="UserService"
targetNamespace="http://example.com/users"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/users"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Data Types -->
<types>
<xs:schema targetNamespace="http://example.com/users">
<xs:element name="GetUserRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="userId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUserResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</types>
<!-- Messages -->
<message name="GetUserRequestMsg">
<part name="parameters" element="tns:GetUserRequest"/>
</message>
<message name="GetUserResponseMsg">
<part name="parameters" element="tns:GetUserResponse"/>
</message>
<!-- Port Type -->
<portType name="UserPortType">
<operation name="GetUser">
<input message="tns:GetUserRequestMsg"/>
<output message="tns:GetUserResponseMsg"/>
</operation>
</portType>
<!-- Binding -->
<binding name="UserBinding" type="tns:UserPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetUser">
<soap:operation soapAction="http://example.com/users/GetUser"/>
<input><soap:body use="literal"/></input>
<output><soap:body use="literal"/></output>
</operation>
</binding>
<!-- Service -->
<service name="UserService">
<port name="UserPort" binding="tns:UserBinding">
<soap:address location="http://example.com/api/users"/>
</port>
</service>
</definitions>
🔹 WSDL Operation Types
WSDL supports different operation patterns for various communication scenarios:
<!-- One-way: Client sends message, no response -->
<operation name="LogMessage">
<input message="tns:LogMessageRequest"/>
</operation>
<!-- Request-Response: Client sends, server responds -->
<operation name="GetUser">
<input message="tns:GetUserRequest"/>
<output message="tns:GetUserResponse"/>
</operation>
<!-- Solicit-Response: Server initiates, client responds -->
<operation name="NotifyUser">
<output message="tns:NotificationMessage"/>
<input message="tns:AcknowledgmentMessage"/>
</operation>
<!-- Notification: Server sends message, no response -->
<operation name="SendAlert">
<output message="tns:AlertMessage"/>
</operation>
Operation Patterns:
- One-way: Fire and forget (logging, notifications)
- Request-Response: Most common (queries, updates)
- Solicit-Response: Server-initiated (callbacks)
- Notification: Server push (alerts, events)
🔹 Using WSDL
How clients and servers use WSDL documents:
Client Side:
- Retrieve WSDL from service URL
- Generate client code from WSDL
- Call service operations using generated code
- Handle responses according to WSDL definitions
Server Side:
- Define service operations and data types
- Generate WSDL from service implementation
- Publish WSDL at service endpoint
- Process requests according to WSDL contract