2012-05-11 22 views
0

我使用泡沫0.4如何在泡沫中创建xsd:int实例?

我试图创建这样的节点(来自实施例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> 

标识anyType的问题就在这里?

+0

你能告诉代码你在哪里设置id参数的SOAP调用? – dusan

回答

0

我有“相似”的问题,在这里我需要一个值有一个xsi:TYPE =“XSD:INT”(Suds write request missing datatype?),由于某种原因这不是添加到XML

我终于偶然发现这Adding xsi:type and envelope namespace when using SUDS并适应了我的使用的解决方案,基本上是一个Suds插件“重写”我的价值元素,包括xsi:type =“xsd:int”属性。

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

另外一个建议,可能是因为你知道它,输出SOAP:

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

这实际上是我最终做的,但它似乎很混乱,至少它每次处理所有节点。 –

+0

是的,我同意它很混乱。我相当肯定还有其他的方法可以做得更好,但是最终我放弃了,并且以这种方式行事。 – takilara