导入命名空间后的TypeNotFoundError

时间:2014-06-24 23:01:51

标签: python magento soap suds

我在Python(2.7)中的应用程序应该使用客户端来使用SOAP Web服务,如WSDL上所述(由Magento生成(1.7.0)并在最后发布)。

对于此任务,当我尝试连接这些代码时,选择了Suds(4.0):

from suds.client import Client       
client = Client(url)

由于此处描述的众所周知的问题https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs

,我收到了一个TypeNotFound错误

然后我将代码更改为:

from suds.client import Client
from suds.xsd.doctor import Import, ImportDoctor
#Fixing the import
imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
imp.filter.add('urn:Magento')
client = Client(self.url, plugins=[ImportDoctor(imp)] )
#Now Authentication
session = client.service.login(username, password)
#Call a method
client.service.call(session,'catalog_product.info',['123'])

然而,现在出现了一个新的例外:

File "/home/david.gonzalez/.virtualenvs/testlib/lib/python2.7/site- packages/suds/mx/literal.py", line 86, in start
    raise TypeNotFound(content.tag)
suds.TypeNotFound: Type not found: 'args'

我不明白,为什么在wsdl中找不到'args'的类型:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:typens="urn:Magento" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Magento" targetNamespace="urn:Magento">
   <types>
      <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
         <!--
 <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" /> 
-->
         <complexType name="FixedArray">
            <complexContent>
               <restriction base="soapenc:Array">
                  <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]" />
               </restriction>
            </complexContent>
         </complexType>
      </schema>
   </types>
   <message name="call">
      <part name="sessionId" type="xsd:string" />
      <part name="resourcePath" type="xsd:string" />
      <part name="args" type="xsd:anyType" />
   </message>
   <message name="callResponse">
      <part name="callReturn" type="xsd:anyType" />
   </message>
   <message name="multiCall">
      <part name="sessionId" type="xsd:string" />
      <part name="calls" type="typens:FixedArray" />
      <part name="options" type="xsd:anyType" />
   </message>
   <message name="multiCallResponse">
      <part name="multiCallReturn" type="typens:FixedArray" />
   </message>
   <message name="endSession">
      <part name="sessionId" type="xsd:string" />
   </message>
   <message name="endSessionResponse">
      <part name="endSessionReturn" type="xsd:boolean" />
   </message>
   <message name="login">
      <part name="username" type="xsd:string" />
      <part name="apiKey" type="xsd:string" />
   </message>
   <message name="loginResponse">
      <part name="loginReturn" type="xsd:string" />
   </message>
   <message name="resources">
      <part name="sessionId" type="xsd:string" />
   </message>
   <message name="resourcesResponse">
      <part name="resourcesReturn" type="typens:FixedArray" />
   </message>
   <message name="globalFaults">
      <part name="sessionId" type="xsd:string" />
   </message>
   <message name="globalFaultsResponse">
      <part name="globalFaultsReturn" type="typens:FixedArray" />
   </message>
   <message name="resourceFaults">
      <part name="resourceName" type="xsd:string" />
      <part name="sessionId" type="xsd:string" />
   </message>
   <message name="resourceFaultsResponse">
      <part name="resourceFaultsReturn" type="typens:FixedArray" />
   </message>
   <message name="startSession" />
   <message name="startSessionResponse">
      <part name="startSessionReturn" type="xsd:string" />
   </message>
   <portType name="Mage_Api_Model_Server_HandlerPortType">
      <operation name="call">
         <documentation>Call api functionality</documentation>
         <input message="typens:call" />
         <output message="typens:callResponse" />
      </operation>
      <operation name="multiCall">
         <documentation>Multiple calls of resource functionality</documentation>
         <input message="typens:multiCall" />
         <output message="typens:multiCallResponse" />
      </operation>
      <operation name="endSession">
         <documentation>End web service session</documentation>
         <input message="typens:endSession" />
         <output message="typens:endSessionResponse" />
      </operation>
      <operation name="login">
         <documentation>Login user and retrive session id</documentation>
         <input message="typens:login" />
         <output message="typens:loginResponse" />
      </operation>
      <operation name="startSession">
         <documentation>Start web service session</documentation>
         <input message="typens:startSession" />
         <output message="typens:startSessionResponse" />
      </operation>
      <operation name="resources">
         <documentation>List of available resources</documentation>
         <input message="typens:resources" />
         <output message="typens:resourcesResponse" />
      </operation>
      <operation name="globalFaults">
         <documentation>List of resource faults</documentation>
         <input message="typens:globalFaults" />
         <output message="typens:globalFaultsResponse" />
      </operation>
      <operation name="resourceFaults">
         <documentation>List of global faults</documentation>
         <input message="typens:resourceFaults" />
         <output message="typens:resourceFaultsResponse" />
      </operation>
   </portType>
   <binding name="Mage_Api_Model_Server_HandlerBinding" type="typens:Mage_Api_Model_Server_HandlerPortType">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
      <operation name="call">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="multiCall">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="endSession">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="login">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="startSession">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="resources">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="globalFaults">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
      <operation name="resourceFaults">
         <soap:operation soapAction="urn:Mage_Api_Model_Server_HandlerAction" />
         <input>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </input>
         <output>
            <soap:body namespace="urn:Magento" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
         </output>
      </operation>
   </binding>
   <service name="MagentoService">
      <port name="Mage_Api_Model_Server_HandlerPort" binding="typens:Mage_Api_Model_Server_HandlerBinding">
         <soap:address location="http://127.0.0.1/magento/index.php/api/soap/index/" />
      </port>
   </service>
</definitions>

我的感觉是名称空间的名称错误,但是,我已经尝试过这个结果相同的结果: SOAP suds and the dreaded schema Type Not Found error

1 个答案:

答案 0 :(得分:1)

这是你的电话:

client.service.call(session,'catalog_product.info',['123'])#&lt; --- ['123']

也许需要xsd:anyType[]才能工作; i.o.w.数组anyType而不是anyType

<message name="call">
   <part name="sessionId" type="xsd:string" />
   <part name="resourcePath" type="xsd:string" />
   <part name="args" type="xsd:anyType[]" />
</message>