suds发送无属性

时间:2013-05-27 07:06:54

标签: python wsdl suds

我正在尝试调用需要Null(None)属性的服务,但suds会删除它们。我需要发送..

<ns1:Body>
  <ns0:QueryIntersection>
     <ns0:intersectingRoad>
        <ns2:RoadName xsi:nil="true"/>
        <ns2:RoadType xsi:nil="true"/>
     </ns0:intersectingRoad>
     <ns0:subjectRoad>
        <ns2:RoadName>BURKE</ns2:RoadName>
        <ns2:RoadType>ROAD</ns2:RoadType>
     </ns0:subjectRoad>
  </ns0:QueryIntersection>

但是suds删除了IntersectingRoad对象,只发送

<ns1:Body>
  <ns0:QueryIntersection>
     <ns0:subjectRoad>
        <ns2:RoadName>BURKE</ns2:RoadName>
        <ns2:RoadType>ROAD</ns2:RoadType>
     </ns0:subjectRoad>
  </ns0:QueryIntersection>

如果我在IntersectingRoad对象中设置其中一个值,它将发送它并正常工作,但None也是一个有效的请求。 这是我正在使用的代码的摘录......

Int1 = client.factory.create('ns2:IntersectingRoad')
Int1.RoadName = None
Int1.RoadType = None

Int2 = client.factory.create('ns2:SubjectRoad')
Int2.RoadName = "BURKE"
Int2.RoadType = "ROAD"

try:
    Ints = client.service.QueryIntersection(Int1,Int2, )
except Exception as e:
    print e.message

请帮忙!

1 个答案:

答案 0 :(得分:8)

Suds具有用于传递可选参数的特殊null()函数,因为None被视为缺少值。

我认为你的情况如下:

from suds import null

Int1 = client.factory.create('ns2:IntersectingRoad')
Int1.RoadName = null()
Int1.RoadType = null()