Daniele,
Looks you are right. I am not very good at SOAP - i am beginner.
Looks like this is a bug:
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(a)gmail.com
<mailto: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(a)gmail.com
> <mailto:victor.varvariuc@gmail.com>>
>
> Show the WSDL file part for updateRoutePartition
>
> --
> */Victor Varvaryuk (Виктор Варварюк)/*
>
>
> On 31 July 2013 20:16, daniele visaggio
> <visaggio.daniele(a)gmail.com
> <mailto: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(a)lists.fedoraproject.org
> <mailto:suds@lists.fedoraproject.org>
>
https://admin.fedoraproject.org/mailman/listinfo/suds
>
>
>