2011-01-18 8 views
15

私は最新のバージョンのsuds(https://fedorahosted.org/suds/)を初めて使用しています。私はステップ1でストールしています。SOAP sudsと恐ろしいスキーマタイプが見つかりませんエラー

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

さて、私はこれは泡の世界ではよく覆われた地面(https://fedorahosted.org/suds/wiki/TipsAndTricks#Schema-TypeNotFoundPython/Suds: Type not found: 'xs:complexType')である知っているが、(a)のスキーマは自動的にバージョン0.3.4、および(b後に拘束されることになっているので、これはわずかに異なる表示されます)回避策を明示的に使用しても、それはまだ機能しません。 WSDLと

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) 

<?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

この問題を克服してくださった将来の方々に役立つと確信しています。ああ、私はちょうど醜いが驚くほど難しいことは、インタフェースにXMLを話すことにしました。 – dpjanes

+0

@dpjanes:そうだった。この惨めなことを働かせるのに2日しかかかりませんでした。 –

+1

これは私にはまったく影響がないようです。インポートの前と後で、まったく同じエラーが発生します。私は最新の泡を使用しています。 – 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) 

重要な点は、URLから始まります。ブラウザでそのファイルを開くと、wsdlの定義が表示されます。ここに正しいURLを入力して、XMLファイルが実際に開くことを確認してください。また、URLの末尾に?wsdlを気にしてください。

第2に、imp = Import('http://schemas.xmlsoap.org/soap/encoding/')は標準のSOAPスキーマをインポートします。

第3に、imp.filter.add('http:somedomain.com/A')が特定の名前空間を追加します。上記で定義したURLをurl=に開き、セクション<wsdl:import namespace="http://somedomain.com/A"を探して、この名前空間の場所を見つけることができます。

また、あなたのURLにhttpと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)) 
関連する問題