SYNOPSIS
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...
}
DESCRIPTION
Iterator for walking a WSDL 1.1 definition.The iterator performs a depth-first search along the following path:
service port binding operation input/output/fault of operation in portType message part type/element in XML schema
If you wonder about this path: This is how to look up which XML Schema element is associated with a operation from a service/port.
Example
The nodes are returned in the order denoted in the following example:
<?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>
You should not rely too much on this order - it may change. Even though the current order will probably remain, the nodes currently skipped might be returned somewhere along the path.
LICENSE AND COPYRIGHT
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 $