Daniele,

Looks you are right. I am not very good at SOAP - i am beginner.

Looks like this is a bug: https://fedorahosted.org/suds/ticket/323
Victo
On 01.08.2013 13:33, daniele visaggio wrote:
Victor,

I got your point but I believe suds is still not building the correct xml request. It is true that the "name" argument is not listed there but inside the xsd method definition there is the following tag:

<xsd:extension base='axlapi:NameAndGUIDRequest'>

From what I understood, this means that the UpdateRoutePartitionReq message should be built extending the NameAndGUIDRequest xml structure.

In fact NameAndGUIDRequest contains the the following tag:

 <xsd:element name="name" type="axlapi:String100" nillable="false">

and

<xsd:element name="uuid" type="axlapi:XUUID" nillable="false">

In fact, "name" and "uuid" tags are present inside the xml request generated by soapui application.

Basically it seems to me that UpdateRoutePartitionReq should inherit the tags defined inside NameAndGUIDRequest xml object and this is not happening.

Is this a bug or simply a feature still missing from suds?



2013/8/1 Victor Varvaryuk <victor.varvariuc@gmail.com>
You wrote:

From soapui I see that the correct xml should be:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/8.5">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:updateRoutePartition sequence="?">
         <name>?</name> <---- missing tag!
         <newName>?</newName>
         <description>?</description>
      </ns:updateRoutePartition>
   </soapenv:Body>
</soapenv:Envelope>

Is there a way to overcome this issue? why suds is showing me a method with a missing argument?

In your WSDL i don't see "name" argument:

<xsd:complexType name='UpdateRoutePartitionReq'>
<xsd:complexContent>
<xsd:extension base='axlapi:NameAndGUIDRequest'> ---> probably the problem lies here, since this xml request is not added to the soap request
<xsd:sequence>
<xsd:element nillable='false' name='newName' minOccurs='0' type='xsd:string' maxOccurs='1'></xsd:element>
<xsd:element nillable='false' name='description' minOccurs='0' type='xsd:string' maxOccurs='1'></xsd:element>
<xsd:element nillable='true' name='timeScheduleIdName' minOccurs='0' type='axlapi:XFkType' maxOccurs='1'></xsd:element>
<xsd:element type='axlapi:boolean' nillable='false' maxOccurs='1' minOccurs='0' name='useOriginatingDeviceTimeZone' default='true'></xsd:element>
<xsd:element type='axlapi:XTimeZone' nillable='false' maxOccurs='1' minOccurs='0' name='timeZone' default='GMT'></xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

So, looks like suds is behaving correctly not passing "name", because it's listed in expected arguments.

If you server still fails saying that "name" parameter is required, try creating your SOAP client like this:

client = suds.client.Client(service_url, cache=None)
Because suds caches WSDL, and it might be relying on the old version. Or delete the cache from the temp dir: https://fedorahosted.org/suds/wiki/TipsAndTricks#Performance
Victor

On 01.08.2013 12:41, daniele visaggio wrote:
Inside WSDL:

<message name="updateRoutePartitionIn">
    <part element="xsd1:updateRoutePartition" name="axlParams"/>
  </message>
  <message name="updateRoutePartitionOut">
    <part element="xsd1:updateRoutePartitionResponse" name="axlParams"/>
  </message>

<operation name="updateRoutePartition">
      <input message="s0:updateRoutePartitionIn"/>
      <output message="s0:updateRoutePartitionOut"/>
</operation>

<operation name="updateRoutePartition">
      <soap:operation soapAction="CUCM:DB ver=8.5 updateRoutePartition" style="document"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
</operation>

Inside XSD:

<xsd:element name='updateRoutePartition' type='axlapi:UpdateRoutePartitionReq'></xsd:element>
<xsd:element name='updateRoutePartitionResponse' type='axlapi:StandardResponse'></xsd:element>

I think this is the really relevant part, where all the methods related to the "partition" element are defined:

<xsd:element name='addRoutePartition' type='axlapi:AddRoutePartitionReq'></xsd:element>
<xsd:element name='addRoutePartitionResponse' type='axlapi:StandardResponse'></xsd:element>
<xsd:element name='updateRoutePartition' type='axlapi:UpdateRoutePartitionReq'></xsd:element>
<xsd:element name='updateRoutePartitionResponse' type='axlapi:StandardResponse'></xsd:element>
<xsd:element name='getRoutePartition' type='axlapi:GetRoutePartitionReq'></xsd:element>
<xsd:element name='getRoutePartitionResponse' type='axlapi:GetRoutePartitionRes'></xsd:element>
<xsd:element name='removeRoutePartition' type='axlapi:NameAndGUIDRequest'></xsd:element>
<xsd:element name='removeRoutePartitionResponse' type='axlapi:StandardResponse'></xsd:element>
<xsd:element name='listRoutePartition' type='axlapi:ListRoutePartitionReq'></xsd:element>
<xsd:element name='listRoutePartitionResponse' type='axlapi:ListRoutePartitionRes'></xsd:element>
<xsd:complexType name='AddRoutePartitionReq'>
<xsd:complexContent>
<xsd:extension base='axlapi:APIRequest'>
<xsd:sequence>
<xsd:element name='routePartition' type='axlapi:XRoutePartition'></xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name='UpdateRoutePartitionReq'>
<xsd:complexContent>
<xsd:extension base='axlapi:NameAndGUIDRequest'> ---> probably the problem lies here, since this xml request is not added to the soap request
<xsd:sequence>
<xsd:element nillable='false' name='newName' minOccurs='0' type='xsd:string' maxOccurs='1'></xsd:element>

<xsd:element nillable='false' name='description' minOccurs='0' type='xsd:string' maxOccurs='1'></xsd:element>

<xsd:element nillable='true' name='timeScheduleIdName' minOccurs='0' type='axlapi:XFkType' maxOccurs='1'></xsd:element>

<xsd:element type='axlapi:boolean' nillable='false' maxOccurs='1' minOccurs='0' name='useOriginatingDeviceTimeZone' default='true'></xsd:element>

<xsd:element type='axlapi:XTimeZone' nillable='false' maxOccurs='1' minOccurs='0' name='timeZone' default='GMT'>
<xsd:annotation>
<xsd:documentation>Only Applicable if TimeSchedule is selected. If OriginatingDevice is selected then this tag is not applicable.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence></xsd:extension>
</xsd:complexContent>
</xsd:complexType>

By the way it seems that the argument missing from the method (and so the lacking xml tag) is defined below:

<xsd:complexType name="NameAndGUIDRequest">
<xsd:annotation>
<xsd:documentation>This is a utility object that created because many of the Get, Remove, and Update methods allow the user to specify either the name or the uuid.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="axlapi:APIRequest">
<xsd:sequence>
<xsd:choice>
<xsd:element name="name" type="axlapi:String100" nillable="false">
<xsd:annotation>
<xsd:documentation>Not nullable.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="uuid" type="axlapi:XUUID" nillable="false">
<xsd:annotation>
<xsd:documentation>Not nullable.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

Thank you



2013/8/1 Victor Varvariuc <victor.varvariuc@gmail.com>
Show the WSDL file part for updateRoutePartition

--
Victor Varvaryuk (Виктор Варварюк)


On 31 July 2013 20:16, daniele visaggio <visaggio.daniele@gmail.com> wrote:
Hi all,

using version: 0.4.1 (beta)  build: R703-20101015.

I built a soap client from a wsdl file. The method I'm trying to use is the following:

updateRoutePartition(xs:string newName, xs:string description, ns0:XFkType timeScheduleIdName, ns0:boolean useOriginatingDeviceTimeZone, ns0:XTimeZone timeZone, )

The problem is that a fundamental argument is missing from the method arguments' list. The result is that on the outgoing request a crucial xml tag is not present.

This is the resulting xml sent on the wire (it's broken and the request fails):

<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/XMLSchema-instance
" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:updateRoutePartition>
         <newName>newName</newName>
         <description>NewDescrition</description>
      </ns0:updateRoutePartition>
   </ns1:Body>
</SOAP-ENV:Envelope>

From soapui I see that the correct xml should be:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/8.5">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:updateRoutePartition sequence="?">
         <name>?</name> <---- missing tag!
         <newName>?</newName>
         <description>?</description>
      </ns:updateRoutePartition>
   </soapenv:Body>
</soapenv:Envelope>


Is there a way to overcome this issue? why suds is showing me a method with a missing argument?

Thank you in advance,

Daniele

p.s. pls see attached wsdl/xsd files I'm using



_______________________________________________
suds mailing list
suds@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/suds