I've been working on getting Cisco Call Manager's AXL working with Python rather than php (where I have it running without a problem), and have been running into an issue. I've spent hours beating my head against it, so I figured it's time to request an outside opinion to see if you can offer any insight. My sanitized code is below:
from suds.client import Client
from suds.transport.https import HttpAuthenticated
import logging
logging.basicConfig(level=logging.CRITICAL)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.CRITICAL)
logging.getLogger('suds.xsd.schema').setLevel(logging.CRITICAL)
logging.getLogger('suds.wsdl').setLevel(logging.CRITICAL)
service = 'https://IPADDRESS:PORT/axl/'
wsdl = 'file:///PATH/TO/LOCAL/WSDL/AXLAPI.wsdl'
username = "username"
password = "password"
client = Client(wsdl, location = service, transport = HttpAuthenticated(username = username, password = password))
name = "NAME_DP"
tags = ["regionName"]
print "<THIS IS A LISTDEVICEPOOL REQUEST>"
dp = client.factory.create('ns0:ListDevicePoolReq')
dp.searchCriteria.name = name
dp.returnedTags = tags
result = client.service.listDevicePool(dp)
print "<THIS IS THE RESULT>"
print result
The issue is the soap output ends up being:
DEBUG:suds.client:headers = {'SOAPAction': u'"CUCM:DB ver=8.5 listDevicePool"',
'Content-Type': 'text/xml; charset=utf-8'}
ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://www.cisco.com/AXL/API/8.5" xmlns:ns1="http:
//schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchem
a-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns1:Body>
<ns0:listDevicePool>
<searchCriteria>
<searchCriteria>
<name>NAME_DP</name>
</searchCriteria>
<returnedTags>regionName</returnedTags>
</searchCriteria>
</ns0:listDevicePool>
</ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:http failed:
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://sc
hemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapen
v:Server</faultcode><faultstring>Usage: Required returnedTags as empty tag or sh
ould contain requested tags</faultstring><detail><axlError><axlcode>5003</axlcod
e><axlmessage>Usage: Required returnedTags as empty tag or should contain reques
ted tags</axlmessage><request>listDevicePool</request></axlError></detail></soap
env:Fault></soapenv:Body></soapenv:Envelope>
Traceback (most recent call last):
File "C:\Users\C53170\Desktop\sudstest\barebones.py", line 39, in <module>
result = client.service.listDevicePool(dp)
File "C:\Python27\lib\site-packages\suds\client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "C:\Python27\lib\site-packages\suds\client.py", line 602, in invoke
result = self.send(soapenv)
File "C:\Python27\lib\site-packages\suds\client.py", line 649, in send
result = self.failed(binding, e)
File "C:\Python27\lib\site-packages\suds\client.py", line 702, in failed
r, p = binding.get_fault(reply)
File "C:\Python27\lib\site-packages\suds\bindings\binding.py", line 265, in ge
t_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Usage: Required returnedTags as empty tag or should contain requested tags'
As you can see, it's nesting everything (including the defined searchCriteria) inside the searchCriteria attribute, which results in the returnedTags attribute being seen as part of the searchCriteria. I'm having trouble discovering why, or determining how to correct it. Is this a problem with how the wsdl is imported?
If you need to see the wsdl, or the xsd file that are imported, let me know. They're quite large, and I don't have access to pastebin or google docs from this computer (blocked at work), but I can find some place to throw them up.
Thank you in advance for your assistance!