我正在尝试使用需要xsd:timeInstant的Web服务(请参阅WSDL):
<xsd:complexType name="QueryParams">
<xsd:all>
<xsd:element name="start" type="xsd:timeInstant" minOccurs="0"/>
<xsd:element name="stop" type="xsd:timeInstant" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
因此,生成的SOAP XML请求应包含以下内容:
<start xsi:type="xsd:timeInstant">2009-05-10T17:00:00Z</start>
<stop xsi:type="xsd:timeInstant">2009-05-11T17:00:00Z</stop>
使用SUDS,我创建了以下对象:
qp = client.factory.create("ns0:QueryParams")
qp.start = "2009-05-10T17:00:00Z"
qp.stop = "2009-06-10T17:00:00Z"
不幸的是,SUDS正在将其转变为服务器拒绝的xsd:date。
<query xsi:type="ns3:QueryParams">
<start xsi:type="ns1:date">2009-05-10T17:00:00Z</start>
<stop xsi:type="ns1:date">2009-06-10T17:00:00Z</stop>
</query>
如何强制使用xsd:timeInstant?
答案 0 :(得分:0)
认为我已经找到了解决方案,所以不妨发布答案以备将来参考。
在suds / xsd / sxbuiltin.py文件中,有一个Factory类
class Factory:
tags =\
{
# any
'anyType' : XAny,
...
# dates & times
...
'gMonth' : XString,
在gMonth下,我添加了
'timeInstant' : XString,
现在可以正确复制WSDL类型xsd:timeInstant。 SOAP请求XML显示了这个:
<query xsi:type="ns3:QueryParams">
<start xsi:type="ns1:timeInstant">2009-05-10T17:00:00Z</start>
<stop xsi:type="ns1:timeInstant">2009-06-10T17:00:00Z</stop>
</query>
服务器能够处理此输入。