0

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

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

但是我很难将该结构放入 spyne 模型中。

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

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 中的错误吗?还是我错过了什么?

4

1 回答 1

1

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

header = Header()

那应该是:

header = Header

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

于 2013-09-10T10:38:01.513 回答