[ http://issues.apache.org/jira/browse/AXISCPP-465?page=comments#action_61882 ] Samisa Abeysinghe commented on AXISCPP-465: -------------------------------------------
I took over the issue because I found a solution to the problem. I have put the solution in CVS. Rather than the wrapper generated code solution, I went for the Param and SoapSerializer code. Tests so far are successful (thanks to Dushshantha and Chinthana on helping with tests) We continue to test the solution > 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 > Assignee: Samisa Abeysinghe > > 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... -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira
