#25 SOAP::Lite does not understand complex types in wsdl

open
nobody
None
5
2007-10-03
2004-10-24
Lexi Baugher
No

SOAP::Lite does not understand complex types in wsdl.
This means it can't generate useful stubs for service
methods that accept complex parameters.

For example, here is a sinppet of simple-type WSDL
that SOAP::Lite does understand:

<message name="getQuoteRequest1">
<part name="symbol" type="xsd:string"/>
</message>
...
<portType name="StockQuotePortType">
<operation name="getQuote" parameterOrder="symbol">
<input message="tns:getQuoteRequest1"/>
<output message="tns:getQuoteResponse1"/>
</operation>
</portType>

Here is a snippet of WSDL using complex types that
SOAP::Lite does not understand:

<wsdl:types>
<schema ....>
<complexType name="Person">
<sequence>
<element name="name" nillable="true"
type="xsd:string"/>
<element name="email" nillable="true"
type="xsd:string"/>
<element name="id" type="xsd:int" />
</sequence>
</complexType>
</schema></wsdl:types>
...
<wsdl:message name="addPersonRequest">
<wsdl:part name="newPerson" type="impl:Person/>
</wsdl:message>
...
<portType name="PersonService">
<wsdl:operation name="addPerson">
<wsdl:input message="impl:addPersonRequest"
name="addPersonRequest"/>
<wsdl:output message="impl:addPersonResponse"
name="addPersonResponse"/>
</wsdl:operation>
</portType>
------

SOAP::Lite seems to not resolve the extra layers of
indirection involved with referencing a complex type
defined in another section of the wsdl.

Discussion

  • Ryan Troll
    Ryan Troll
    2005-02-23

    Logged In: YES
    user_id=569674

    I've also hit this bug.

    Consider the WSDL:

    http://ws1.api.re2.yahoo.com/ws/soap-demo/full.wsdl

    This wsdl defines a method (strArrayReverse) that uses a
    complex type (ArrayOfstring) for it's args. However, when
    used, perl returns the error:

    Type 'ArrayOfstring' can't be found in a schema class
    'SOAP::Serializer'

     
  • Martin Kutter
    Martin Kutter
    2007-10-03

    • labels: 536485 -->
    • milestone: 304765 -->
    • assigned_to: byrnereese --> nobody