次のような suds を使用して、SOAP サーバーにリクエストを送信しようとしています。
<SOAP-ENV:Envelope xmlns:ns0="http://example.com/wsdl/abc/model/v1" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://example.com/xsd/abc/common/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:myMethod>
<unique_id>5211c04b-9cf5-4368-a393-ed96d7b5489d</unique_id>
<metadata>
<ns2:StringMetadata id="user">test_user</ns2:StringMetadata>
<ns2:StringMetadata id="filename">myfile.zip</ns2:StringMetadata>
<ns2:StringMetadata id="unique_id">5211c04b-9cf5-4368-a393-ed96d7b5489d</ns2:StringMetadata>
</metadata>
</ns0:myMethod>
</ns1:Body>
dictのみを使用してそれを行う方法はありますか?
私はこれを試しています:
params = {
'unique_id' : uid,
"metadata": {
'StringMetadata' : ['test_user', 'myfile.zip']
}
}
caller.myMethod(**params)
このリクエストを生成するもの:
<SOAP-ENV:Envelope xmlns:ns0="http://example.com/wsdl/abc/model/v1" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://example.com/xsd/abc/common/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:myMethod>
<unique_id>2ae5a60e-7928-4d4f-9e53-bafe2a003b8a</unique_id>
<metadata>
<ns2:StringMetadata>test_user</ns2:StringMetadata>
<ns2:StringMetadata>myfile.zip</ns2:StringMetadata>
</metadata>
</ns0:myMethod>
</ns1:Body>
</SOAP-ENV:Envelope>
したがって、id属性がStringMetadaにないことがわかります。別の呼び出し元から検証されていない Json (または dict) を取得する一種の Rest to Soap プロキシを作成しているため、dictのみを使用して実行したいと考えています。したがって、可能な限り動的にする必要があります。
その場で要素を構築しようとしましたが (factory.create を使用)、頭痛の種のようです... 要素属性 ('_id'、'@id' または '#id') に特別なキーワードを渡すことで解決策をいただければ幸いです。 ')...
また、次のように StringMetadata を宣言しようとしました。
"metadata": {
'StringMetadata' : [{'_id': 'user'}, 'myfile.zip']
}
しかし、それは私に与えました:
<ns2:StringMetadata id="user"/>
<ns2:StringMetadata>myfile.zip</ns2:StringMetadata>
解決策がある場合は、サルのクラスに (オンザフライで) モンキー パッチを適用してください。
よろしく