Understanding SOAP messages

Tutorial 2 of 5

Understanding SOAP Messages Tutorial

1. Introduction

Goal of this Tutorial: The purpose of this tutorial is to help you understand SOAP (Simple Object Access Protocol) messages. We will delve into their structure and understand how they facilitate communication between the client and the server.

What you'll learn: By the end of this tutorial, you should be able to create, understand, and interpret SOAP messages.

Prerequisites: Basic understanding of XML, web services, and client-server architecture is beneficial.

2. Step-by-Step Guide

SOAP, or Simple Object Access Protocol, is a protocol specification for exchanging structured information in web services using XML. It operates over HTTP for simplicity and interoperability.

A SOAP message is an ordinary XML document containing the following elements:

  • An Envelope element that identifies the XML document as a SOAP message
  • A Header element that contains header information
  • A Body element that contains call and response information
  • A Fault element containing errors and status information

Example of a SOAP message:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:m="http://www.example.org/stock">
   <soap:Header>
   </soap:Header>
   <soap:Body>
      <m:GetStockPrice>
         <m:StockName>IBM</m:StockName>
      </m:GetStockPrice>
   </soap:Body>
</soap:Envelope>

Best practices and tips:

  • Always validate your SOAP messages against their schema to ensure correctness.
  • Keep your SOAP messages as lightweight as possible to reduce latency.

3. Code Examples

Example 1: A basic SOAP message

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body>
      <m:GetStockPrice xmlns:m="http://www.example.org/stock">
         <m:StockName>GOOG</m:StockName>
      </m:GetStockPrice>
   </soap:Body>
</soap:Envelope>

This is a basic SOAP message that requests the current stock price for Google (GOOG). The <m:GetStockPrice> element is specific to the web service, and the <m:StockName> element within that contains the parameter for the request.

Example 2: A SOAP message with a header

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header>
      <m:Transaction xmlns:m="http://www.example.org/stock" soap:mustUnderstand="1">5</m:Transaction>
   </soap:Header>
   <soap:Body>
      <m:GetStockPrice xmlns:m="http://www.example.org/stock">
         <m:StockName>MSFT</m:StockName>
      </m:GetStockPrice>
   </soap:Body>
</soap:Envelope>

This SOAP message includes a <soap:Header>. The header can contain application-specific information like authentication details. In this case, it contains a transaction ID with a soap:mustUnderstand attribute, indicating that the server must understand the header to process the message.

4. Summary

In this tutorial, we've covered the basic structure of SOAP messages, how they are used in client-server communication, and looked at some practical examples.

For further learning, you can explore SOAP faults, which are used to handle errors in SOAP messages. You can also dive into WSDL (Web Services Description Language), which is used to describe web services.

5. Practice Exercises

Exercise 1: Create a basic SOAP message to request the stock price for Apple (AAPL).

Exercise 2: Add a header to your SOAP message from Exercise 1, with a transaction ID of your choice.

Solutions:

  1. SOAP message for Apple stock price:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body>
      <m:GetStockPrice xmlns:m="http://www.example.org/stock">
         <m:StockName>AAPL</m:StockName>
      </m:GetStockPrice>
   </soap:Body>
</soap:Envelope>
  1. SOAP message with a transaction ID in the header:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header>
      <m:Transaction xmlns:m="http://www.example.org/stock" soap:mustUnderstand="1">12345</m:Transaction>
   </soap:Header>
   <soap:Body>
      <m:GetStockPrice xmlns:m="http://www.example.org/stock">
         <m:StockName>AAPL</m:StockName>
      </m:GetStockPrice>
   </soap:Body>
</soap:Envelope>

For further practice, try creating SOAP messages for different web services and adding different elements to the headers.