You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Samisa Abeysinghe (JIRA)" <ax...@ws.apache.org> on 2005/03/31 13:42:17 UTC

[jira] Assigned: (AXISCPP-465) Bug in SoapSerializer::addOutputParam

     [ http://issues.apache.org/jira/browse/AXISCPP-465?page=history ]

Samisa Abeysinghe reassigned AXISCPP-465:
-----------------------------------------

    Assign To: Samisa Abeysinghe  (was: Roshan Weerasuriya)

> 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