2017-05-20 17 views
0

(リモート)メソッドを呼び出して添付ファイルをダウンロードするときにzeepの使用に成功しました。python zeepを使用して添付ファイルとしてSOAP経由でファイルをアップロードする方法

私はファイルをアップロードする必要がある方法を見つけました。ファイルは添付ファイルとして渡す必要があります。次のように私は、通常、リモートWebサービスメソッドを呼び出します。

client.service.fooMethod私の特定のケースでは(引数1、ARG2を、...)

を、arg1にはURI、私がアップロードしたいファイルがありますサーバー。添付ファイルとしてアップロードする必要があります。 これについてはどうすればいいですか?ここで

は、より具体的な例である:

は、メソッド名はUploadPortfoliosで、次のスキーマを持っています

<xs:element name="UploadPortfolio"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="tns:URI"/> 
     <xs:element ref="tns:PortfolioID"/> 
     <xs:element ref="tns:AsOfDate"/> 
     <xs:element minOccurs="0" ref="tns:SuppressPositionLog"/> 
     <xs:element minOccurs="0" ref="tns:PositionDetailLogAsAttachment"/> 
     <xs:element minOccurs="0" ref="tns:UploadSharedPortfolio"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

私がUploadPortfoliosを呼び出すためにpythonでZEEPを使用しています。 、どういうわけか私は添付ファイルで送信する必要があるため

portfolio_management_wsdl = 'https://ondemand.uat.riskmetrics.com/ondemand/soap/PortfolioManagement?wsdl' 
client_pfm = Client(portfolio_management_wsdl, transport=transport, wsse=wsse) 
uri = r'cid://SomeDataFile.xml' 
args = {'URI':uri, 'AsOfDate':'20160129'} 
result = client_pfm.service.UploadPortfolios(**args) 

言うまでもないが、上記の文句を言わない仕事を言う、:<someContentID>は、添付ファイルのコンテンツIDがどこにあるのuri引数は文字列cid:<someContentID>を含める必要があります。

SoapUI(https://www.soapui.org/downloads/soapui.html)を使用すると、問題なく機能を呼び出すことができます。以下は、

POST https://ondemand.uat.riskmetrics.com/ondemand/soap/PortfolioManagement.PortfolioManagementHttp sSoap12Endpoint/ HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: multipart/related; type="application/xop+xml"; start="<[email protected]>"; start-info="application/soap+xml"; action="urn:RiskMetricsWS:1.0:PortfolioManagement:UploadPortfolio"; boundary="----=_Part_46_453204030.1495210657807" 
MIME-Version: 1.0 
Content-Length: 7668 
Host: ondemand.uat.riskmetrics.com 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 


------=_Part_46_453204030.1495210657807 
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; action="UploadPortfolio" 
Content-Transfer-Encoding: 8bit 
Content-ID: <[email protected]> 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsdl="http://..." xmlns:xsd="http://..." xmlns:xsd1="http://..."> 
    <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" ... </soap:Header> 
    <soap:Body> 
     <wsdl:UploadPortfolio> 
     <wsdl:URI><inc:Include href="cid:530345234005" xmlns:inc="http://www.w3.org/2004/08/xop/include"/></wsdl:URI> 
     <wsdl:PortfolioID>TestPtf_RML4</wsdl:PortfolioID> 
     <wsdl:AsOfDate>20170509</wsdl:AsOfDate> 
     <wsdl:SuppressPositionLog>false</wsdl:SuppressPositionLog> 
     <wsdl:PositionDetailLogAsAttachment>true</wsdl:PositionDetailLogAsAttachment> 
     <wsdl:UploadSharedPortfolio>true</wsdl:UploadSharedPortfolio> 
     </wsdl:UploadPortfolio> 
    </soap:Body> 
</soap:Envelope> 
------=_Part_46_453204030.1495210657807 
Content-Type: text/xml; charset=us-ascii 
Content-Transfer-Encoding: 7bit 
Content-ID: <530345234005> 
Content-Disposition: attachment; name="SomeDataFile.xml" 

<someInformation> 
... 
</someInformation> 

------=_Part_46_453204030.1495210657807-- 

答えて

0

(いくつかの部分が省略されている)SOAPUIによって生成された生データであり、サーバに送信された私はelletheeによって作成されたtransport_with_attachを使用してみましたし、URIの引数としてclient.attach(filename)を渡されました。それは有望に見え、メッセージは正しい形式です。サーバがで応答しかし:不正な形式のXMLとは何かを持っている

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 
Message: Premature end of file. 

+0

これは質問への答えを提供していない(と思います)。十分な[評判](http://stackoverflow.com/help/whats-reputation)があれば、どの投稿でも[コメント](http://stackoverflow.com/help/privileges/comment)できるようになります。また、これを確認してください(代わりに何ができますか?)(https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reationation-to-comment-what-c​​an-i-do-instead )。 – thewaywewere

関連する問題