What is WSDL and what its Structure?
A WSDL document defines services as collections of network endpoints, or ports. In WSDL, the abstract definition of endpoints and messages is separated from their concrete network deployment or data format bindings. This allows the reuse of abstract definitions: messages, which are abstract descriptions of the data being exchanged, and port types which are abstract collections of operations.
The concrete protocol and data format specifications for a particular port type constitutes a reusable binding. A port is defined by associating a network address with a reusable binding, and a collection of ports define a service. Hence, a WSDL document uses the following elements in the definition of network services:
WSDL document describes a web service using these major elements:
Element | Defines |
<types> | The data types used by the web service |
<message> | The messages used by the web service |
<portType> | The operations performed by the web service |
<binding> | The communication protocols used by the web service |
<port> | A single endpoint defined as a combination of a binding and a network address. |
<service> | A collection of related endpoints. |
The main structure of a WSDL document looks like this:
<definitions> <types> definition of types…….. </types> <message> definition of a message…. </message> <portType> definition of a port……. </portType> <binding> definition of a binding…. </binding> <service> |
A WSDL document can also contain other elements, like extension elements and a service element that makes it possible to group together the definitions of several web services in one single WSDL document.
Creating WSDL for our Example
<types>:In the Types we are defining or configuring the Datatypes which we are using for the entire application. Here we are importing the XSD files here.
<message>:In our example we need to configure our input and our parameters/ the message which we are passing through Webservice. We are configuring request and response objects here.
<portType>: We have one operation which is called getProduct. So here we need to declare this getProduct operation.
<binding> : Here we will be providing our protocol types and we are using SOAP protocol.
<service> : Defining the Service End point. And for the ProductService we are defining it as “http://localhost:8080/ContractFirst/services/ProductService”
1: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2: <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
3: xmlns:tns="http://com/your/company/service/ProductService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
4: xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ProductService"
5: targetNamespace="http://com/your/company/service/ProductService/"
6: xmlns:prd="http://com/your/company/service/Product/">
7: <wsdl:types>
8: <xsd:schema targetNamespace="http://com/your/company/service/ProductService/"
9: xmlns:prd="http://com/your/company/service/Product/">
10: <xsd:import namespace="http://com/your/company/service/Product/"
11: schemaLocation="../Product.xsd" />
12: <xsd:element name="getProductRequest">
13: <xsd:complexType>
14: <xsd:sequence>
15: <xsd:element name="productRequest" type="prd:ProductRequest" />
16: </xsd:sequence>
17: </xsd:complexType>
18: </xsd:element>
19: <xsd:element name="getProductResponse">
20: <xsd:complexType>
21: <xsd:sequence>
22: <xsd:element name="productResponse" type="prd:ProductResponse" />
23: </xsd:sequence>
24: </xsd:complexType>
25: </xsd:element>
26: </xsd:schema>
27: </wsdl:types>
28: <wsdl:message name="ProductRequest">
29: <wsdl:part element="tns:getProductRequest" name="parameters" />
30: </wsdl:message>
31: <wsdl:message name="ProductResponse">
32: <wsdl:part element="tns:getProductResponse" name="parameters" />
33: </wsdl:message>
34: <wsdl:portType name="ProductService">
35: <wsdl:operation name="getProduct">
36: <wsdl:input message="tns:ProductRequest" />
37: <wsdl:output message="tns:ProductResponse" />
38: </wsdl:operation>
39: </wsdl:portType>
40: <wsdl:binding name="ProductServiceSOAP" type="tns:ProductService">
41: <soap:binding style="document"
42: transport="http://schemas.xmlsoap.org/soap/http" />
43: <wsdl:operation name="getProduct">
44: <soap:operation
45: soapAction="http://com/your/company/service/ProductService/getProduct" />
46: <wsdl:input>
47: <soap:body use="literal" />
48: </wsdl:input>
49: <wsdl:output>
50: <soap:body use="literal" />
51: </wsdl:output>
52: </wsdl:operation>
53: </wsdl:binding>
54: <wsdl:service name="ProductService">
55: <wsdl:port binding="tns:ProductServiceSOAP" name="ProductServiceSOAP">
56: <soap:address
57: location="http://localhost:8080/ContractFirst/services/ProductService" />
58: </wsdl:port>
59: </wsdl:service>
60: </wsdl:definitions>
In our next part we will go through Skelton creation using WSDL to Java tool which is giving by CXF. We will go through class path settings and wsdl2java commands.
Best ever blog…………………
Can you please post the complete Contract First approach? After creating the WSDL there is no link to creating the skeletion from WSDL, classpath needs, deploying and how to test the server.
Can you please post the complete Contract First approach? After creating the WSDL there is no link to creating the skeletion from WSDL, classpath needs, deploying and how to test the server.
Sooo…. did you give up after this?
Great lesson .
Can you please post the complete Contract First approach? After creating the WSDL there is no link to creating the skeletion from WSDL, classpath needs, deploying and how to test the server. Thanks