2011-01-18 19 views
15

मैं पहली बार झाग का नवीनतम संस्करण (https://fedorahosted.org/suds/) का उपयोग कर रहा हूँ और मैं कदम से एक में ठप हो रही।सोप झाग और खतरनाक स्कीमा नहीं मिला प्रकार की त्रुटि

suds.TypeNotFound: Type not found: '(schema, http://www.w3.org/2001/XMLSchema,)' 

अब, मैं जानता हूँ कि इस झाग दुनिया में अच्छी तरह से कवर जमीन (https://fedorahosted.org/suds/wiki/TipsAndTricks#Schema-TypeNotFound और Python/Suds: Type not found: 'xs:complexType') है, लेकिन यह करने के लिए थोड़ा अलग है क्योंकि (क) स्कीमा स्वचालित रूप से संस्करण 0.3.4 और (ख के बाद बाध्य होने के लिए माना जाता है प्रकट होता है) स्पष्ट रूप से वर्कअराउंड का उपयोग करके, यह अभी भी काम नहीं करता है।

from suds.client import Client 
from suds.xsd.sxbasic import Import 

url = 'file:wsdl.wsdl' 
Import.bind('http://schemas.xmlsoap.org/soap/encoding/') 
client = Client(url, cache = None) 
wsdl साथ

:

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:tns="http://ws.client.com/Members.asmx" 
xmlns:s="http://www.w3.org/2001/XMLSchema" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
targetNamespace="http://ws.client.com/Members.asmx" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
    <wsdl:types> 
    <s:schema elementFormDefault="qualified" targetNamespace="http://ws.client.com/Members.asmx"> 

     <s:element name="GetCategoriesResponse"> 
     <s:complexType> 
      <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="GetCategoriesResult"> 
       <s:complexType> 
       <s:sequence> 
        <s:element ref="s:schema" /> 
        <s:any /> 
       </s:sequence> 
       </s:complexType> 
      </s:element> 
      </s:sequence> 
     </s:complexType> 
     </s:element> 

    </s:schema> 
    </wsdl:types> 
</wsdl:definitions> 

ऊपर अपवाद अर्जित करता है।

उत्तर

11

हम यह काम कर रहा है और मुझे आशा है कि आप के रूप में अच्छा प्रदर्शन किया है, भले ही यह थोड़ा विचित्र है। शायद एक स्पष्ट स्थान या फ़िल्टर मदद करेगा। उदा।

imp = Import('http://schemas.xmlsoap.org/soap/encoding/', location='http://schemas.xmlsoap.org/soap/encoding/') 
imp.filter.add('http://ws.client.com/Members.asmx') 
client = Client(url,plugins=[ImportDoctor(imp)] 
+0

उत्तर के लिए धन्यवाद और मुझे यकीन है कि इससे भविष्य में आने वाले लोगों की मदद मिलेगी जो इस मुद्दे पर आते हैं। हां, मैंने एक्सएमएल से इंटरफ़ेस से बात करने का फैसला किया जो बदसूरत लेकिन आश्चर्यजनक रूप से अपरिहार्य है। – dpjanes

+0

@dpjanes: वास्तव में यह किया था। इस विस्फोटित चीज़ को काम करने के लिए केवल दो दिन लग गए। –

+1

ऐसा लगता है कि मेरे लिए कोई असर नहीं पड़ता है। मुझे आयात करने से पहले और बाद में वर्णित सटीक त्रुटि मिलती है। मैं नवीनतम सूड का उपयोग कर रहा हूं 0.4 – ThatAintWorking

18

मैं इस समय थोड़ी देर के लिए अपने सिर पर टक्कर लगी थी। अंत में मैंने निम्नलिखित वाक्यविन्यास का उपयोग करके इस मुद्दे को हल किया:

from suds.xsd.doctor import ImportDoctor, Import 

url = 'http://somedomain.com/filename.php?wsdl' 
imp = Import('http://schemas.xmlsoap.org/soap/encoding/') 
imp.filter.add('http://some/namespace/A') 
doctor = ImportDoctor(imp) 

client = Client(url, doctor=doctor) 

महत्वपूर्ण रूप से, यूआरएल से शुरू करें। उस फ़ाइल को अपने ब्राउज़र में खोलें और यह आपको wsdl परिभाषा प्रदान करेगा। सुनिश्चित करें कि आपके पास यहां दर्ज सही यूआरएल है और एक एक्सएमएल फ़ाइल वास्तव में खुलती है। यूआरएल के अंत में wsdl भी ध्यान दें।

दूसरा, imp = Import('http://schemas.xmlsoap.org/soap/encoding/') मानक सोप स्कीमा आयात करेगा।

तीसरा, imp.filter.add('http:somedomain.com/A') अपने विशिष्ट नाम स्थान जोड़ देगा। आप उपरोक्त परिभाषित यूआरएल को url= में खोलकर और <wsdl:import namespace="http://somedomain.com/A" अनुभाग को देखकर यह नामस्थान स्थान पा सकते हैं।

इसके अलावा http अपने URL में https बनाम बारे में सचेत रहें।

+1

+1 संदर्भ के लिए नेमस्पेस-यूआरएल, यह वास्तव में काफी महत्वपूर्ण है, क्योंकि आप आसानी से wsdl-url का पुन: उपयोग कर सकते हैं, जो कुछ भी नहीं करेगा – asdfsdfsdfsdfsd3232

+0

क्या यह किसी समस्या पर लागू होता है जिसका सामना मैं कर रहा हूं https://stackoverflow.com/questions/44586989/not- सक्षम-से-निर्माण-ए-साबुन-फ़िल्टर-इन-सूड? – Hussain

5
जो लोग अभी भी इस समस्या से परेशान है के लिए

। यह लिंक https://bitbucket.org/jurko/suds/issue/20/typenotfound-schema उपयोगी जानकारी प्रदान कर सकता है। समाधान इस तरह होगा:

from suds.client import Client 
from suds.xsd.doctor import Import, ImportDoctor 

url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl' 
imp = Import('http://www.w3.org/2001/XMLSchema', 
    location='http://www.w3.org/2001/XMLSchema.xsd') 
imp.filter.add('http://WebXml.com.cn/') 
client = Client(url, doctor=ImportDoctor(imp)) 
संबंधित मुद्दे