2017-08-01 21 views
0

マルチパート添付ファイルを処理できるPython SOAPライブラリが必要です。これはSOAPpyやsudsではサポートされていませんが、ZSIとZEEPでサポートされていると私は理解しています。しかし、SOAPpyは、私が使用する必要があるWSDLファイルでうまく動作しますが、ZSIとZeepではエラーが発生します。 WSDLファイルはhttp://nva1wss.webex.com/nbr/services/NBRStorageService?wsdlです。 SoapUIでファイルを開き、 "Check WSI Compliance"オプションを使用して、すべてのチェックに合格しました。ここでPython SOAP WSDLはSOAPpyで動作しますが、ZSIやZeepでは動作しません。

は私のエラーは、次のとおりです。

zeep.exceptions.NamespaceError:タイプ{} NBRStorageServiceデータハンドラを解決することができません。ネームスペースu'NBRStorageServiceに使用可能なスキーマはありません。

ZSI.generate.WsdlGeneratorError:スキーマ "NBRStorageService"のインポートに@schemaLocation属性がない可能性があります。

----私は、WSDLでの問題は、それがZEEPは、スキーマ文書で解決することができないというデータ型を使用することであると信じていZEEPからの詳細な出力に基づいて情報----

を更新しましたhttp://schemas.xmlsoap.org/soap/encoding/。ここではWSDLのデータ型定義である:

<wsdl:types> 
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService"> 
     <import namespace="NBRStorageService"/> 
     <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
     <complexType name="ArrayOf_tns1_DataHandler"> 
      <complexContent> 
       <restriction base="soapenc:Array"> 
        <attribute ref="soapenc:arrayType" 
        wsdl:arrayType="tns1:DataHandler[]"/> 
       </restriction> 
      </complexContent> 
     </complexType> 
    </schema> 
</wsdl:types> 

このWSDLは、Apache Axisの1.4で生成されているように見えます。

これを回避する方法については、また、サーバー側の変更について誰かが特定の推奨事項を持っていれば、それらを作成することはできませんが、サーバーを扱う開発者にそれらを確実に伝えることができます。

ありがとうございました!

答えて

0

大丈夫です。それを私が直した!

私はいくつかの調査を行いましたが、これはAxisで生成されたWSDLによくある問題であることがわかりました。 DataHandler型は、tns1名前空間には存在しません。これは、apachesoap名前空間にあるはずです。だから、WSDLのネームスペースを変更しましたが、まだ動作しませんでした。

私はもう少し掘り下げましたが、「DataHandlerは、Axis以外のプラットフォームでは理解できないプラットフォーム固有の型です」という問題がありました。回避策はバイト型に変更することです。

<wsdl:types> 
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService"> 
     <import namespace="NBRStorageService"/> 
     <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
     <complexType name="ArrayOf_tns1_DataHandler"> 
      <complexContent> 
       <restriction base="soapenc:Array"> 
        <attribute ref="soapenc:arrayType" 
        wsdl:arrayType="soapenc:byte[]"/> 
       </restriction> 
      </complexContent> 
     </complexType> 
    </schema> 
</wsdl:types> 

そして、BOOM:

だから、ここで私はローカルに変更し、現在働いているWSDLの部分です!できます!添付ファイルをダウンロードして処理できるようになりました。http://docs.python-zeep.org/en/master/attachments.html

関連する問題