我正在尝试使用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中的一个错误吗?或者我错过了什么?
答案 0 :(得分:1)
原来,这条线是罪魁祸首:
header = Header()
应该是:
header = Header
非常讨厌的行为,很容易被忽视。