0

我正在使用泡沫 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>

在这里有任何类型的问题吗?

4

1 回答 1

0

我遇到了“类似”问题,我需要一个值来获得 xsi:type="xsd:int" (Suds 写入请求缺少数据类型?),并且由于某种原因,这没有添加到 xml

我最终在使用 SUDS 时偶然发现了这个添加 xsi:type 和信封命名空间,并在那里调整了解决方案以供我使用,基本上是一个 Suds 插件“重写”我的 Value 元素以包含 xsi:type="xsd:int" 属性。

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

还有一个建议,可能是你知道的,输出 SOAP:

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
于 2012-11-28T20:57:59.933 回答