spyne为ComplexModel子节点的ComplexModel生成错误的WSDL / XSD架构

时间:2013-09-09 16:10:30

标签: python soap xsd wsdl spyne

我正在尝试使用spyne在Python中实现SOAP服务。我的客户端发送如下的SOAP请求:

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

但是我很难将这种结构变成一个间谍模型。

到目前为止,我想出了这段代码:

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'

问题是spyne生成和XSD像这样:

...
<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"/>
...

这不是我想要的,因为基本上它说“serviceParams”只是一个没有孩子的空标签。

这是spyne中的一个错误吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

原来,这条线是罪魁祸首:

header = Header()

应该是:

header = Header

非常讨厌的行为,很容易被忽视。