SOAP::...:WSDL11(3pm)

🌸 NAME 🌸

SOAP::WSDL::Generator::Iterator::WSDL11 β€” it's the WSDL 1.1 Iterator bestie, no cap πŸ’…

(Yeah ok so the full manual name is SOAP::WSDL::Generator::Iterator::WSDL11(3pm) and it lives in the User Contributed Perl Documentation corner of the internet 🫢)


✨ SYNOPSIS ✨

okay so here's literally how you use her:

my $iter = SOAP::WSDL::Generator::Iterator::WSDL11->new({
    definitions => $wsdl
});
$iter->init();
while (my $node = $iter->get_next()) {
    # do something with node - possibly call _accept with a visitor on it...
}

That's it. That's the whole vibe. Build her with a definitions hash key pointing at your $wsdl, hit init(), then loop on get_next() until she runs out of nodes πŸŽ€


πŸ’– DESCRIPTION πŸ’–

She's an iterator, bestie. Her whole job is walking a WSDL 1.1 definition. Main character energy, one node at a time πŸšΆβ™€οΈβœ¨

She does a depth-first search along this exact path:

service
port
binding
operation
input/output/fault of operation in portType
message
part
type/element in XML schema

And if you're sitting there like "girl why this order??" β€” because that is literally how you look up which XML Schema element is associated with an operation from a service/port. iykyk 🧠✨

πŸ¦‹ Example πŸ¦‹

The nodes come back in the order denoted in this example, so watch the numbered comments, they're the receipts πŸŽ€

<?xml version="1.0" encoding="UTF-8"?>
<!-- 1 -->
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="urn:HelloWorld"
  targetNamespace="urn:HelloWorld"
  xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <s:schema elementFormDefault="qualified" targetNamespace="urn:HelloWorld">
      <!-- 9 -->
      <s:element name="sayHello">
        <s:complexType>
           <s:sequence>
             <s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" />
             <s:element minOccurs="0" maxOccurs="1" name="givenName" type="s:string" nillable="1" />
           </s:sequence>
           <s:attribute name="testAttr" type="s:string" use="optional"></s:attribute>
         </s:complexType>
       </s:element>

       <!-- 13 -->
       <s:element name="sayHelloResponse">
         <s:complexType>
           <s:sequence>
             <s:element minOccurs="0" maxOccurs="1"
               name="sayHelloResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </types>

  <!-- 7 -->
  <message name="sayHelloSoapIn">
    <!-- 8 -->
    <part name="parameters" element="s0:sayHello" />
  </message>

  <!-- 11 -->
  <message name="sayHelloSoapOut">
    <!-- 12 -->
    <part name="parameters" element="s0:sayHelloResponse" />
  </message>

  <portType name="Service1Soap">
    <operation name="sayHello">
    <!-- 6 -->
    <input message="s0:sayHelloSoapIn" />
    <!-- 10 -->
    <output message="s0:sayHelloSoapOut" />
  </operation>
 </portType>

   <!-- 4 -->
   <binding name="Service1Soap" type="s0:Service1Soap">
       <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
           style="document" />

       <!-- 5 -->
       <operation name="sayHello">
           <soap:operation soapAction="urn:HelloWorld#sayHello"
               style="document" />

           <input>
               <soap:body use="literal" />
           </input>

           <output>
               <soap:body use="literal" />
           </output>
       </operation>
   </binding>

   <!-- 2 -->
   <service name="Service1">
       <!-- 3 -->
       <port name="Service1Soap" binding="s0:Service1Soap">
           <soap:address
               location="http://localhost:81/soap-wsdl-test/helloworld.pl" />
       </port>
   </service>
</definitions>
ok real talk tho 🫣 β€” do not get too attached to this order, it may change. The current order will probably stay, but the nodes that get skipped right now might get returned somewhere along the path later. So like… flexible queen behaviour. Don't hardcode your whole life on it, fr fr.

Copyright 2004-2008 Martin Kutter.

This file is part of SOAP-WSDL. You may distribute/modify it under the same terms as perl itself 🌈


πŸ‘‘ AUTHOR πŸ‘‘

Martin Kutter <martin.kutter fen-net.de> πŸ’œ


πŸŽ€ REPOSITORY INFORMATION πŸŽ€

$Rev: 239 $
$LastChangedBy: kutterma $
$Id: Client.pm 239 2007-09-11 09:45:42Z kutterma $
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $

and that's the whole page bestie, we ate and left no crumbs πŸ’…βœ¨ this was SOAP::...:WSDL11(3pm) from perl v5.36.0, dated 2022-10-14 β€” go forth and iterate, mwah πŸŽ€πŸ¦‹πŸ’–

πŸ“¦ where this page comes from