2014-04-03 9 views
0

저는 Cisco Call Manager의 AXL이 PHP가 아닌 Python으로 작동하도록 노력하고 있습니다 (문제없이 실행하고있는 곳). 문제가 발생했습니다. 나는 그것에 맞서 머리를 때리는 데 시간을 보냈다. 그래서 나는 당신이 어떤 통찰력을 제공 할 수 있는지보기 위해 외부 의견을 요구할 때라고 생각했다. 내 소독 코드는 다음과 같습니다 :Python Suds 및 Cisco Axl로 정확한 속성 중첩 얻기

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 

문제는 비누 출력이 존재 끝입니다 :

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' 

당신이, 그것은 searchCriteria 속성 내부 (정의 searchCriteria 포함) 모든 중첩 것 볼 수 있듯이을, returnedTags 속성은 searchCriteria의 일부로 간주됩니다. 이유를 찾거나 문제를 해결하는 방법을 결정하는 데 문제가 있습니다. 이 wsdl 가져 오는 방법에 문제가 있습니까?

가져온 wsdl 또는 xsd 파일을 보려면 알려주십시오. 그들은 꽤 크고,이 컴퓨터 (직장에서 차단)에서 pastebin이나 Google 워드 프로세서에 액세스 할 수 없지만, 그들을 던질 곳을 찾을 수 있습니다.

도움을 주셔서 감사합니다.

답변

0

이것은 listPhone의 코드이지만 listPoolDevice에서도 작동해야합니다. 디버그 및 로깅 명령을 내 코드와 함께 사용하면 요청이 전송 될 때 어떻게 나타나는지 확인할 수 있지만 문제가 해결되어 CUCM 및 AXL로 파이썬을 활용할 수 있다고 생각합니다.

from suds.client import Client 

cmserver = '10.10.10.10' 
cmport = '8443' 
wsdl = 'file:///your/system/path/schema/current/AXLAPI.wsdl' 
location = 'https://' + cmserver + ':' + cmport + '/axl/' 
username = 'username' 
password = 'password' 

client = Client(wsdl,location=location, username=username, password=password) 

result = client.service.listPhone({'name':'SEP%'},{'name':'','model':''}) 

for node in result['return']['phone']: 
    print str(node['name']), str(node['model'])