如何在suds中创建xsd:int实例?

时间:2012-05-11 16:51:21

标签: python soap suds

我正在使用泡沫0.4

我正在尝试创建这样的节点(来自示例SOAP请求):

<id xsi:type="xs:int">123456</id>

它是SOAP调用的一个参数,只是传递一个int就会产生这个:

<int>123456</int>

给了我

Expected: class java.lang.Integer, got class org.apache.xerces.dom.ElementNSImpl

所以我需要的是一种创建正确类型的方法。我已经尝试创建一个xsd:int的实例,但是我无法看到设置值。

有人有任何想法吗?

修改

代码:

findResult = self.client.service.find(self._getSession(), 'Candidate', 123456)

find = self.client.factory.create('find')
find.session = self._getSession()
find.entityName = 'Candidate'
find.id = 123456
findResult = self.client.service.find(find)

两次都是相同的结果。它似乎将id作为文本字段传递。我检查了类型,我肯定使用int类型。 在WSDL模式中,参数类型为:

<xs:complexType name="find">
  <xs:sequence>
    <xs:element name="session" type="xs:string" minOccurs="0"/>
    <xs:element name="entityName" type="xs:string" minOccurs="0"/>
    <xs:element name="id" type="xs:anyType" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

我在这里输入任何类型的问题吗?

1 个答案:

答案 0 :(得分:0)

我有“类似”的问题,我需要一个值来获得xsi:type =“xsd:int”(Suds write request missing datatype?),并且由于某种原因,这不会被添加到xml中

我最终偶然发现了这个Adding xsi:type and envelope namespace when using SUDS并根据我的用法调整了解决方案,基本上是一个Suds插件“重写”我的Value元素以包含xsi:type =“xsd:int”属性。

可能您可以使用类似的方法在传出的SOAP上设置类型。

也可能是您知道的,输出SOAP:

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)