spyne generates bad WSDL/XSD schema for ComplexModels with ComplexModel children

1.2k Views Asked by At

I'm trying to use spyne to implement a SOAP service in Python. My client sends SOAP requests like this:

<ns1:loadServices xmlns:ns1="dummy">
  <serviceParams xmlns="dummy">
    <header>
        <user>foo</user>
        <password>secret</password>
    </header>
  </serviceParams>
</ns1:loadServices>

But I have difficulties putting that structure into a spyne model.

So far I came up with this code:

class Header(ComplexModel):
    __type_name__ = 'header'
    user = Unicode
    password = Unicode


class serviceParams(ComplexModel):
    __type_name__ = 'serviceParams'
    header = Header()


class DummyService(ServiceBase):
    @rpc(serviceParams, _returns=Unicode)
    def loadServices(ctx, serviceParams):
        return '42'

The problem is that spyne generates and XSD like this:

...
<xs:complexType name="loadServices">
  <xs:sequence>
    <xs:element name="serviceParams" type="tns:serviceParams" minOccurs="0" nillable="true"/>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="serviceParams"/>
...

which is not what I want because essentially it says that "serviceParams" is just an empty tag without children.

Is that a bug in spyne? Or am I missing something?

1

There are 1 best solutions below

3
On BEST ANSWER

It turned out that this line was the culprit:

header = Header()

that should be:

header = Header

Very nasty behavior and really easy to overlook.