cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1664
Views
10
Helpful
5
Replies

No schema available for the namespace 'urn:WebdialerSoap'

floatingpurr
Level 1
Level 1

I'm trying to get a list of devices associated with the specified end-user from CUCM 10.5.2.13900-12. I'm using python zeep to handle requests and responses. Responses are like the following:

 

 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:getProfileSoapResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:WD70">
         <getProfileSoapReturn href="#id0"/>
      </ns1:getProfileSoapResponse>
      <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:GetConfigResponse" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="urn:WD70">
         <description xsi:type="xsd:string">Success</description>
         <deviceInfoList soapenc:arrayType="ns3:WDDeviceInfo[1]" xsi:type="soapenc:Array" xmlns:ns3="urn:WebdialerSoap">
            <item href="#id1"/>
         </deviceInfoList>
         <responseCode href="#id2"/>
      </multiRef>
      <multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
      <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:WDDeviceInfo" xmlns:ns4="urn:WebdialerSoap" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
         <deviceName xsi:type="xsd:string">IPCMRAEU5UCM5X7</deviceName>
         <lines soapenc:arrayType="xsd:string[1]" xsi:type="soapenc:Array">
            <item xsi:type="xsd:string">1251 ; no partition</item>
         </lines>
      </multiRef>
   </soapenv:Body>
</soapenv:Envelope>

 

 

trigger this error:

zeep.exceptions.NamespaceError: Unable to resolve type {urn:WebdialerSoap}WDDeviceInfo. No schema available for the namespace 'urn:WebdialerSoap'.

It looks like a problem with the XML schema. Is this a bug on the CUCM / WSDL side?

 

 

2 Accepted Solutions

Accepted Solutions

Thanks for the comments here, good observations.  I created a defect to track the issue...we'll see what engineering wants to do: CSCvz99757

View solution in original post

floatingpurr
Level 1
Level 1

As a temporary workaround, as suggested by @dstaudt, you can use a Zeep plugin to manually replace "urn:WebdialerSoap" with "urn:WD70".

View solution in original post

5 Replies 5

dstaudt
Cisco Employee
Cisco Employee

You might be right here.  I'm not the biggest expert on SOAP WSDL/XSD definitions, but AFAIK all of the types present in the response are documented in the 10.5 WSDL under the 'WD70' namespace, so there should be no need to specify additional namespaces in the response beyond 'ns1' which maps to 'WD70'.  I suspect changing the response so that all type references use 'ns1' (e.g. xsi:type="ns4:WDDeviceInfo" becomes xsi:type="ns1:WDDeviceInfo") and removing references to the extraneous namespaces (removing xmlns:ns4="urn:WebdialerSoap") would the more correct response.

I'm not sure there is a good workaround for this beyond major surgery to the WSDL - Zeep exists to abstract you from the SOAP namespace and XML wrangling and probably won't make it easy to reformat the response before parsing it (maybe a Zeep plugin could do it?)

If you happen to get something working, please share it.  We can open a defect against the WebDialer API to see if engineering wants to fix the WSDL, but that can be complicated by backward compatibility concerns where existing applications have worked around the issues and might break if something changes.

Probably my suggestion would be to just use WebDialer SOAP as XML over HTTP (i.e. using Python requests library) instead of trying to use Zeep.

Hi @dstaudt thanx for your kind reply. Additional namespaces are pretty common in WebDialer responses. E.g., getProfileDetailSoap

 

 

<!--getProfileDetailSoap response-->  
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:getProfileDetailSoapResponse xmlns:ns1="urn:WD70" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <getProfileDetailSoapReturn href="#id0" />
      </ns1:getProfileDetailSoapResponse>
      <multiRef xmlns:ns2="urn:WD70" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:ConfigResponseDetail">
         <description xsi:type="soapenc:string">Success</description>
         <deviceInfoListDetail soapenc:arrayType="ns2:WDDeviceInfoDetail[3]" xsi:type="soapenc:Array">
            <item href="#id1" />
            <item href="#id2" />
            <item href="#id3" />
         </deviceInfoListDetail>
         <responseCode xsi:type="xsd:int">0</responseCode>
      </multiRef>
      <multiRef xmlns:ns3="urn:WD70" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:WDDeviceInfoDetail">
         <deviceName xsi:type="soapenc:string">SEPE8B7480316D6</deviceName>
         <lines soapenc:arrayType="soapenc:string[1]" xsi:type="soapenc:Array">
            <item xsi:type="soapenc:string">1000 ; no partition</item>
         </lines>
         <phoneDesc xsi:type="soapenc:string">SEPE8B7480316D6</phoneDesc>
         <phoneType xsi:type="soapenc:string">Cisco 6961</phoneType>
      </multiRef>
      <multiRef xmlns:ns4="urn:WD70" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:WDDeviceInfoDetail">
         <deviceName xsi:type="soapenc:string">SEPF01FAF38ABC2</deviceName>
         <lines soapenc:arrayType="soapenc:string[1]" xsi:type="soapenc:Array">
            <item xsi:type="soapenc:string">1002 ; no partition</item>
         </lines>
         <phoneDesc xsi:type="soapenc:string" />
         <phoneType xsi:type="soapenc:string">Cisco IP Communicator</phoneType>
      </multiRef>
      <multiRef xmlns:ns5="urn:WD70" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:WDDeviceInfoDetail">
         <deviceName xsi:type="soapenc:string">CSFuserBill</deviceName>
         <lines soapenc:arrayType="soapenc:string[1]" xsi:type="soapenc:Array">
            <item xsi:type="soapenc:string">1001 ; no partition</item>
         </lines>
         <phoneDesc xsi:type="soapenc:string" />
         <phoneType xsi:type="soapenc:string">Cisco Unified Client services Framework</phoneType>
      </multiRef>
   </soapenv:Body>
</soapenv:Envelope>

 

 

However, those namespaces are usually declared correctly, e,g.,

 

xmlns:ns5="urn:WD70"

 

In the responses from the service <getProfileSoap>, ns3 and ns4 look not consistent with the WSDL. Both are defined this way 

 

 

xmlns:ns3="urn:WebdialerSoap"

 

 

but, as pointed out by the zeep exception, there is no schema available for the namespace 'urn:WebdialerSoap'. 

I believe that this problem can be fixed simply pointing ns3 and ns4 definitions to "urn:WD70", as it happens for the rest of ns* namespaces documented here.

Maybe it can be worth opening a defect. I think that the only possible workaround is ignoring the namespaces, as well as the XML validation, and parsing the response manually, as you suggested. Providing valid XML files shouldn't break existing software since it is probably just ignoring weird declarations. Of course, this is just my point of view.

Another curiosity: is this a problem affecting also further releases?

Thanks for the comments here, good observations.  I created a defect to track the issue...we'll see what engineering wants to do: CSCvz99757

Thank you!

floatingpurr
Level 1
Level 1

As a temporary workaround, as suggested by @dstaudt, you can use a Zeep plugin to manually replace "urn:WebdialerSoap" with "urn:WD70".

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: