Hello,
I encountered a problem with parsing a SOAP response by suds. It seems that
suds cannot parse the whole response and returns to a user only a part of
the response.
In details:
I have a function popTabularResultRows which is supposed to return a list of
results (given by rows):
Input: popTabularResultRows (SOAP:body, use = encoded)
authString [ string ]
requestId [ int ]
maxRows [ int ]
returnValueInfo [ boolean ]
returnValueSid [ boolean ]
returnValueIess [ boolean ]
Output: popTabularResultRowsResponse (SOAP:body, use = encoded)
valueInfo [ TabularResultValueInfo ]
* sid [ nonNegativeInteger ]
* iess [ string ]
rows [ TabularResultRow ]
* ts [ nonNegativeInteger ]
* values (optional, unbounded) [ TabularResultValue ]
o value [ float ]
o valueS64 (optional) [ long ]
o valueU64 (optional) [ unsignedLong ]
o valueDouble (optional) [ double ]
o qual [ byte ]
o tss [ int ]
o sid (optional) [ nonNegativeInteger ]
o iess (optional) [ string ]
o corId (optional) [ nonNegativeInteger ]
rowCount [ int ]
The function is defined in WSDL as follows:
<message name="popTabularResultRows">
<part name="authString" type="xsd:string"/>
<part name="requestId" type="xsd:int"/>
<part name="maxRows" type="xsd:int"/>
<part name="returnValueInfo" type="xsd:boolean"/>
<part name="returnValueSid" type="xsd:boolean"/>
<part name="returnValueIess" type="xsd:boolean"/>
</message>
With dependencies:
<message name="popTabularResultRowsResponse">
<part name="valueInfo" type="eds:TabularResultValueInfo"/>
<part name="rows" type="eds:TabularResultRow"/>
<part name="rowCount" type="xsd:int"/>
</message>
And complex types:
<complexType name="TabularResultRow">
<sequence>
<element name="ts" type="xsd:nonNegativeInteger"
minOccurs="1"
maxOccurs="1"/>
<element name="values" type="eds:TabularResultValue"
minOccurs="0"
maxOccurs="unbounded" nillable="true"/>
</sequence>
</complexType>
<complexType name="TabularResultValue">
<sequence>
<element name="value" type="xsd:float" minOccurs="1"
maxOccurs="1"/>
<element name="valueS64" type="xsd:long" minOccurs="0"
maxOccurs="1"
nillable="true"/>
<element name="valueU64" type="xsd:unsignedLong"
minOccurs="0" maxOccurs="1"
nillable="true"/>
<element name="valueDouble" type="xsd:double"
minOccurs="0" maxOccurs="1"
nillable="true"/>
<element name="qual" type="xsd:byte" minOccurs="1"
maxOccurs="1"/>
<element name="tss" type="xsd:int" minOccurs="1"
maxOccurs="1"/>
<element name="sid" type="xsd:nonNegativeInteger"
minOccurs="0"
maxOccurs="1" nillable="true"/>
<element name="iess" type="xsd:string" minOccurs="0"
maxOccurs="1"
nillable="true"/>
<element name="corId" type="xsd:nonNegativeInteger"
minOccurs="0"
maxOccurs="1" nillable="true"/>
</sequence>
</complexType>
The problem is that the method popTabularResultRows returns just one item in
rows wherease the XML that arrives has more items:
*XML response (** rows part in italics )**:*
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': u'""',
'Content-Type':
'text/xml'}
DEBUG:suds.client:http succeeded:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
xmlns:eds="http://www.tt.com.pl/eds.wsdl
">
<SOAP-ENV:Header></SOAP-ENV:Header><SOAP-ENV:Body
SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"><eds:
popTabularResultRowsResponse><valueInfo><sid>3887</sid><iess>testshade01</iess></valueInfo>
*
<rows><ts>1269425044</ts><values><value>0.000000</value><qual>78</qual><tss>0</tss><iess>testshade01</iess></
values></rows>
<rows><ts>1269428644</ts><values><value>0.000000</value><qual>78</qual><tss>0</tss><iess>testshade01</iess></values></rows><rows><ts>1269432244</ts><values><value>0.000000</value><qual>7
8</qual><tss>0</tss><iess>testshade01</iess></values></rows><rows><ts>1269435844</ts><values><value>0.000000</value><qual>78</qual><tss>0</tss><iess>testshade01</iess></values></rows><rows><ts>1269439
444</ts><values><value>0.000000</value><qual>78</qual><tss>0</tss><iess>testshade01</iess></values></rows><rows><ts>1269443044</ts><values><value>0.000000</value><qual>78</qual><tss>0</tss><iess>tests
hade01</iess></values></rows>*
<rowCount>6</rowCount></eds:popTabularResultRowsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*In python when printing the reponse I got (just one row):
*
(reply){
valueInfo =
(TabularResultValueInfo){
sid = 3887
iess = "testshade01"
}
rows =
(TabularResultRow){
ts = 1269443044
values[] =
(TabularResultValue){
value = 0.0
qual = 78
tss = 0
iess = "testshade01"
},
}
rowCount = 6
}
{'ts': [], 'testshade01': []}
What's wrong? Is it a bug?