[ 
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

Reply via email to