次のような複合型を含むWSDLがあります。
_<xsd:complexType name="string_array">
<xsd:complexContent>
<xsd:restriction base="SOAP-ENC:Array">
<xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
_
SOAPクライアントに zeep を使用することにし、そのタイプを、WSDLで参照されている他のメソッドの1つのパラメーターとして使用したいと思います。しかし、このタイプの使い方がわからないようです。 WSDLで参照されている特定のデータ構造の使用方法について documentation を調べたところ、client.get_type()
メソッドを使用すると書かれているので、次のようにしました。
_wsdl = "https://wsdl.location.com/?wsdl"
client = Client(wsdl=wsdl)
string_array = client.get_type('tns:string_array')
string_array('some value')
client.service.method(string_array)
_
これにより、エラー_TypeError: argument of type 'string_array' is not iterable
_が発生します。私はまた、そのような辞書を使用しようとするだけでなく、その多くのバリエーションを試しました:
_client.service.method(param_name=['some value'])
_
エラーが発生します
_ValueError: Error while create XML for complexType '{https://wsdl.location.com/?wsdl}string_array': Expected instance of type <class 'zeep.objects.string_array'>, received <class 'str'> instead.`
_
ZeepでWSDLから上記のタイプを使用する方法を誰かが知っているなら、私は感謝するでしょう。ありがとう。
Client.get_type()メソッドは、後で値を作成するために使用できる「型コンストラクター」を返します。構築された値を別の変数に割り当て、その変数をメソッド呼び出しで使用する必要があります。
wsdl = "https://wsdl.location.com/?wsdl"
client = Client(wsdl=wsdl)
string_array_type = client.get_type('tns:string_array')
string_array = string_array_type(['some value'])
client.service.method(string_array)