Python suds を使用して Cisco AXL ライブラリを操作しています。名前制限のある文字列の特別なインスタンスである simpleType を使用する必要がある関数を呼び出そうとしています。
WSDL を正常に解析した後、ファクトリを使用してオブジェクトを作成します。
uuid = client.factory.create('ns0:XUUID')
これは、WSDL に付随する XSD で次のように定義されている次の XUUID オブジェクトのインスタンスです。
<xsd:simpleType name="XUUID">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\{........-....-....-....-............\}"/>
</xsd:restriction>
</xsd:simpleType>
uuid オブジェクトの値を設定したいので、次のすべてを試しましたが成功しませんでした:
uuid.setText('{900AAAAC-E454-0B7E-07FD-FD67D48FF50E}')
uuid.set('{900AAAAC-E454-0B7E-07FD-FD67D48FF50E}')
これがサブ要素を持つ complexType である場合、それらを設定できることは明らかです。たとえば、suds ドキュメントの Person.name です。このオブジェクトの値を設定する方法がわかりません。
オブジェクトの print dir(uuid) は、これについて間違った方法で行っている可能性があることを示唆しています。
['__contains__', '__delattr__', '__doc__', '__getitem__', '__init__', '__iter__', '__keylist__', '__len__', '__metadata__', '__module__', '__printer__', '__repr__', '__setattr__', '__setitem__', '__str__', '__unicode__']
何か基本的なことが抜けている場合や、suds の使い方が完全に間違っている場合に備えて、以下でもう少しコンテキストを説明します。
WSDL から次の関数を呼び出そうとしています。
<operation name="getDevicePool">
<input message="s0:getDevicePoolIn"/>
<output message="s0:getDevicePoolOut"/>
</operation>
<message name="getDevicePoolIn">
<part element="xsd1:getDevicePool" name="axlParams"/>
</message>
次に、次の XSD 要素を参照します。
<xsd:element name='getDevicePool' type='axlapi:GetDevicePoolReq'></xsd:element>
<xsd:complexType name='GetDevicePoolReq'>
<xsd:sequence>
<xsd:choice>
<xsd:element name='name' type='axlapi:String100'></xsd:element>
<xsd:element name='uuid' type='axlapi:XUUID'></xsd:element></xsd:choice>
<xsd:element name='returnedTags' type='axlapi:RDevicePool' minOccurs='0'></xsd:element></xsd:sequence><xsd:attribute use='optional' name='sequence' type='xsd:unsignedLong'></xsd:attribute></xsd:complexType>
私は、WSDL の別の関数でうまく機能するアプローチを試みました。
searchCriteria = {
'callManagerGroupName':'Default'
}
devicePools = client.service.listDevicePool(searchCriteria)
しかし、ここではうまくいきませんでした.UUID検索文字列をXUUIDタイプにする必要があるためだと思います.