[Fedora-suds-list] Problem with SOAP response parsing

Elyrwen Dynesh elyrwendynesh at gmail.com
Thu Mar 25 15:19:01 UTC 2010


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.fedoraproject.org/pipermail/suds/attachments/20100325/ae240e06/attachment.html 


More information about the suds mailing list