axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roshan Weerasuriya <ros...@opensource.lk>
Subject Re: [jira] Created: (AXISCPP-465) Bug in SoapSerializer::addOutputParam
Date Tue, 22 Feb 2005 14:34:54 GMT
hi Adrian and All,

Can you please add a comment to this JIRA issue, from the JIRA site.

Roshan

On Tue, 2005-02-22 at 15:21 +0100, Roshan Weerasuriya (JIRA) wrote:
> Bug in SoapSerializer::addOutputParam
> -------------------------------------
> 
>          Key: AXISCPP-465
>          URL: http://issues.apache.org/jira/browse/AXISCPP-465
>      Project: Axis-C++
>         Type: Bug
>   Components: Serialization  
>     Reporter: Roshan Weerasuriya
> 
> 
> hi Adrian and All,
> 
> (Adrian this is related to a change which you have done recently)
> 
> There is a problem in SoapSerializer::addOutputParam method. But this is actualy not
a bug in this method even though I say so, that is because the following scenario.
> 
> This is the current method...
> int SoapSerializer::addOutputParam(const AxisChar* pchName, void* pValue, 
>                                    XSDTYPE type)
> {
> ...
> ....
>   case XSD_INT:
>   case XSD_BOOLEAN:
>         pParam->m_Value.nValue = (int*)(pValue);
>         break; 
> 
> Now the generated server side wrapper has the following code.
> 
> int CalculatorWrapper::add(void* pMsg)
> {
> ...
> .....
> try
> {
> xsd__int ret = pWs->add(v0,v1);
> return pIWSSZ->addOutputParam("addReturn", (void*)&ret, XSD_INT); //This is wrong
because ret is a 
>                                                                    //local variable and
we pass the 
>                                                                    //address of this
to the method 
> }
> catch(...){
> }
> }
> 
> My Suggestion:
> ==============
> 
> There are two ways to tacke this problem.
> 
> method 1)
> Change the SoapSerializer::addOutputParam() method as following.
> 
> ...
> .....
> case XSD_INT:
> case XSD_BOOLEAN:
> 	//----added by roshan---
> 	{
> 	pParam->m_Value.nValue = new int();
>         *pParam->m_Value.nValue = *(int*)(pValue);
> 	//----end added by roshan---        
> 	}
>         break; 
> 
> method 2)
> Change the wrapper generation to some thing like following:
> 
> int CalculatorWrapper::add(void* pMsg)
> {
> ...
> .....
> try
> {
> xsd__int ret = pWs->add(v0,v1);
> xsd__int* ret2 = new xsd__int(sizeof(ret));
> *ret2 = ret;
> 
> return pIWSSZ->addOutputParam("addReturn", (void*)ret2, XSD_INT);
> 
> 
> 
> I prefer solution method2 because it doesn't look nice and doesn't look more readable
to send a local variables address to a another method, any ideas please...
> 


Mime
View raw message