2016-08-24 62 views
1

首先,我不明白的XML,並不能確定我有什麼問題。我嘗試使用幾個python庫,但其中大多數導致了這個錯誤。 對於當前的設置,我正在使用'zeep'python庫。使用命令來驗證文件:解析wsdl文件導致'Unable to resolve type {http://schemas.xmlsoap.org/soap/encoding/}Array。'

python -mzeep ss.xml 

我收到此錯誤:

> zeep.wsdl.wsdl: Creating definition for ss.xml 
zeep.wsdl.wsdl: Adding message: {urn:EngineSoap}Mailing_getStatistics 
Traceback (most recent call last): 
.... 
File "/usr/lib/python2.7/site-packages/zeep/xsd/schema.py", line 100, in get_type 
) % (qname.text, qname.namespace)) 
KeyError: u"Unable to resolve type {http://schemas.xmlsoap.org/soap/encoding/}Array. No schema available for the namespace u'http://schemas.xmlsoap.org/soap/encoding/'." 

和XML文件是:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions name="EngineSoap" targetNamespace="urn:EngineSoap" xmlns:typens="urn:EngineSoap" xmlns:urn="EngineSoap" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
      xmlns="http://schemas.xmlsoap.org/wsdl/"> 
    <message name="Mailing_getStatistics"> 
     <part name="mailingID" type="xsd:int"/> 
     <part name="periodFrom" type="xsd:string"/> 
     <part name="periodTill" type="xsd:string"/> 
     <part name="mlid" type="xsd:int"/> 
    </message> 
    <message name="Mailing_getStatisticsResponse"> 
     <part name="Mailing_getStatisticsReturn" type="soapenc:Array"/> 
    </message> 
    <message name="Mailing_getStatisticsPerLink"> 
     <part name="mailingID" type="xsd:int"/> 
     <part name="outlink" type="xsd:boolean"/> 
     <part name="mlid" type="xsd:int"/> 
    </message> 
    <message name="Mailing_getStatisticsPerLinkResponse"> 
     <part name="Mailing_getStatisticsPerLinkReturn" type="soapenc:Array"/> 
    </message> 

    <binding name="EngineSoapBinding" type="typens:EngineSoapPortType"> 
     <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <operation name="Mailing_getStatistics"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailing_getStatisticsPerLink"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailing_createFromContent"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailing_createFromTemplate"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailing_createFromURL"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_all"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_getUnsubscriptions"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_getUnsubscriptionsAsCSV"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_select"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_validateTechnicalSettings"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getExtraFields --> 
     <operation name="Mailinglist_getExtraFields"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getSubscribersCount --> 
     <operation name="Mailinglist_getSubscribersCount"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getSubscribers --> 
     <operation name="Mailinglist_getSubscribers"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getSubscribersCountSince --> 
     <operation name="Mailinglist_getSubscribersCountSince"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getSubscribersSince --> 
     <operation name="Mailinglist_getSubscribersSince"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getStatisticsPerCampaign --> 
     <operation name="Mailinglist_getStatisticsPerCampaign"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <!-- Mailinglist_getStatisticsPerSource --> 
     <operation name="Mailinglist_getStatisticsPerSource"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Mailinglist_getLabels"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Customer_getBouncesForRelay"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_getByEmail"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_getByUniqueID"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_sendMailingToSubscribers"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_sendMailingToSubscribersFromCSV"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_sendMailingToSubscribersFromURL"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_sendMailingToSubscriberWithAttachment"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_set"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_unsubscribe"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_temporaryUnsubscribeByEmail"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_temporaryUnsubscribeByUniqueID"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_assignLabelWeightByEmail"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_assignLabelWeightByUniqueID"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_processLeadByEmail"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 
     <operation name="Subscriber_processLeadByUniqueID"> 
      <soap:operation soapAction="urn:EngineSoapAction"/> 
      <input> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
       <soap:body namespace="urn:EngineSoap" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
     </operation> 

    </binding> 
    <service name="EngineSoapService"> 
     <port name="EngineSoapPort" binding="typens:EngineSoapBinding"> 
      <soap:address location="http://xxxx/soap/server.live.php"/> 
     </port> 
    </service> 
</definitions> 
+0

WSDL文件看起來很好,我成功SOAP UI進口它。我對zeep沒有太多的想法。你能否請用「wsdl」擴展名重命名文件並嘗試。 – Raju

+0

仍然是同樣的錯誤。我讀過'suds'庫,他們使用某種ImportDoctor來修復導入「http://schemas.xmlsoap.org/soap/encoding/」,基本上錯誤來自'type =「soapenc :陣「' –

回答

1

對於誰是有同樣的問題,任何人(和這是一個已知的問題),wsdl需要導入肥皂編碼,但它不會發生。所以看到的片段,並在服務器的文件/響應使用<types>聲明:

<definitions targetNamespace="TARGET_NAMESPACE" ...> 
    <types> 
     <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="TARGET_NAMESPACE"> 
      <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" /> 
     </schema> 
    </types> 
..... 
</definitions> 
相關問題