∟SOAP Body and Operation Name - Book Reservation

This section provides a tutorial example on writing a WSDL 1.1 example that uses SOAP 1.1 over HTTP with style='document' and operation name as the first level element name in SOAP Body to help RPC method based client API like SOAP::Lite.

According the specification, if style="document" is used, there is no restriction on how you are going to define the structure of the SOAP Body element.

However, some RPC method based client API, like SOAP::Lite, may require you to use the operation name as the first level sub element name of the SOAP Body.

To help testing SOAP::Lite, I wrote the third example with:

In this WSDL example, I want to send a SOAP request to reserve a list of books in a library. And I expect the server to return the status of my reservation. So I wrote this WSDL document, Reservation_WSDL_11_SOAP_11_Document.wsdl:

<?xml version="1.0"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:hy="https://www.herongyang.com/Service/"
  targetNamespace="https://www.herongyang.com/Service/">

  <wsdl:documentation>
    Reservation_WSDL_11_SOAP_11_Document.wsdl
    Copyright (c) 2007 HerongYang.com. All Rights Reserved.
  </wsdl:documentation>

  <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      targetNamespace="https://www.herongyang.com/Service/">
      <xsd:element name="Reservation">
        <xsd:complexType>
          <xsd:complexContent mixed="true">
            <xsd:restriction base="xsd:anyType">

          <xsd:sequence>
            <xsd:element name="Member" type="xsd:string"/>
            <xsd:element name="ItemList">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="Item" type="xsd:string"
                    maxOccurs="unbounded"/>
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>

            </xsd:restriction>
          </xsd:complexContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ReservationResponse">
        <xsd:complexType>
          <xsd:complexContent mixed="true">
            <xsd:restriction base="xsd:anyType">

          <xsd:sequence>
            <xsd:element name="Number" type="xsd:string"/>
            <xsd:element name="Status" type="xsd:string"/>
          </xsd:sequence>

            </xsd:restriction>
          </xsd:complexContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="reservationInputMessage">
    <wsdl:part name="reservationInputPart"
      element="hy:Reservation"/>
  </wsdl:message>
  <wsdl:message name="reservationOutputMessage">
    <wsdl:part name="reservationOutputPart"
      element="hy:ReservationResponse"/>
  </wsdl:message>

  <wsdl:portType name="reservationPortType">
    <wsdl:operation name="Reservation">
      <wsdl:input name="reservationInput"
        message="hy:reservationInputMessage"/>
      <wsdl:output name="reservationOutput"
        message="hy:reservationOutputMessage"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="reservationBinding"
    type="hy:reservationPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Reservation">
      <soap:operation style="document"
        soapAction="https://www.herongyang.com/Service/Reservation"/>
      <wsdl:input name="reservationInput">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="reservationOutput">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="reservationService">
    <wsdl:port name="reservationPort"
      binding="hy:reservationBinding">
      <soap:address location=
        "https://www.herongyang.com/Service/Reservation.php"/>
    </wsdl:port>
  </wsdl:service>

</wsdl:definitions>

See the next tutorial for testing requests and responses.

Table of Contents

 About This Book

 Introduction to WSDL 2.0

 WSDL 2.0 Document Structure and Syntax

 WSDL Version 2.0 Part 2: Adjuncts

 WSDL 2.0 Document Examples with SOAP Binding

 Using WSDL Document in Java Apache Axis2/Java for WSDL

 Apache Woden for WSDL Documents in Java

 SoapUI - Web Service Testing Tool

 PHP SOAP Extension for WSDL

 Perl SOAP::Lite for WSDL

 Introduction to WSDL 1.1

 WSDL 1.1 Document Structure and Syntax

 WSDL 1.1 Binding Extension for SOAP 1.1

 SoapUI as WSDL 1.1 Testing Tool

►WSDL 1.1 and SOAP 1.1 Examples - Document and RPC Styles

 SOAP 1.1 Message Styles and Encoding Options

 First Example - Hello

 Request and Response - Hello

 document/literal Example - Guest Registration

 Request and Response - Guest Registration

 rpc/encoded Example - Get Exchange Rate

 Request and Response - Get Exchange Rate

►SOAP Body and Operation Name - Book Reservation

 Request and Response - Book Reservation

 elementFormDefault="qualified" - Refill Order

 Request and Response - Refill Order

 encodingStyle="uri" for use="encoded"

 Request and Response - Get Stock Price

 PHP SOAP Extension for WSDL 1.1

 Perl SOAP::Lite for WSDL 1.1

 Apache Axis2/Java for WSDL 1.1

 Using WSDL2Java to Generate Web Service Stub Classes

 WSDL 1.1 Binding Extension for SOAP 1.2

 WSDL 1.1 and SOAP 1.2 Examples - Document and RPC Styles

 SOAP 1.2 Binding - PHP, Java and Perl Clients

 Python SOAP Client: Zeep

 WSDL Related Terminologies

 Archived Tutorials

 References

 Full Version in PDF/EPUB