axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dushshantha Chandradasa" <dchandrad...@virtusa.com>
Subject RE: new memory model problems with testcases
Date Tue, 27 Dec 2005 02:51:28 GMT
Hi Nadir,
Thanks for the fix you made to the test case. 

About the deserialization problem:

I investigated about the problem and found that the deserializer cannot
correctly handle the wrapper element of the array in RPC style SOAP
messages. 

I guess that the problem is occurred when the deserializer is trying to
deserilize the following message.

<ns1:echoStringArray xmlns:ns1="http://soapinterop.org/">
<inputStringArray xmlns:enc="http://www.w3.org/2001/06/soap-encoding"
enc:arrayType="xsd:string[2]">
<item>0th element of string array</item>
<item>1th element of string array</item>
</inputStringArray>
</ns1:echoStringArray>

To get the array size from the above message, int
SoapDeSerializer::getArraySize method is called. I guess that this is
the place where it all messes up. It correctly returns the array size.
But after that, it fails to get the array content in item tags. Hope
this information will be helpful to you.

Regards,
Dushshantha

-----Original Message-----
From: Nadir Amra [mailto:amra@us.ibm.com] 
Sent: Saturday, December 24, 2005 4:24 AM
To: Apache AXIS C Developers List
Subject: new memory model problems with testcases

Hi Dushshantha,

Thanks for fixing. In InteropTestRound1Client.cpp, I corrected the 
SOAPStruct and added further checks to check for returned array sizes 
before assuming success. For example:

        xsd__string_Array arrstr;
        xsd__string* sToSend = new xsd__string[ARRAYSIZE];
        sprintf(buffer1, "%dth element of string array", 0);
        sprintf(buffer2, "%dst element of string array", 1);
        sToSend[0]= buffer1;
        sToSend[1]= buffer2;
 
        arrstr.set(sToSend, ARRAYSIZE);
 
        ws.setTransportProperty("SOAPAction" , 
"InteropBase#echoStringArray");
        printf("invoking echoStringArray...\n");
        int outputSize = 0;
        xsd__string_Array* outPutStrArray = ws.echoStringArray(&arrstr);
        if (outPutStrArray != NULL && 
          outPutStrArray->get(outputSize) != NULL && 
          outputSize == ARRAYSIZE)
                printf("successful\n");
        else
                printf("failed: outputsize=%d\n", outputSize);

Assuming my if-check above is correct, the array size checks fail
(always 
zero).  I am assuming that is the problem you were mentioning with 
deserialization?  Andrew will have to look at this further although I
will 
continue to see if I can resolve.

Nadir K. Amra


"Dushshantha Chandradasa" <dchandradasa@virtusa.com> wrote on 12/23/2005

01:11:23 AM:

> Hi Nadir,
> The problem is with the Client implementation. It was not suit to the
> new memory model. I fixed some of these problems and committed the
> changes. I commented out the SOAPStruct array part in the file. Have
to
> correct that as well. 
> 
> Regards,
> Dushshantha 
> 


Mime
View raw message