client stub delete Ret; causes Debug Assertion Failed! Win32
------------------------------------------------------------

         Key: AXISCPP-858
         URL: http://issues.apache.org/jira/browse/AXISCPP-858
     Project: Axis-C++
        Type: Bug
  Components: Client - Stub  
    Versions: 1.5 Final    
 Environment: client-Windows XP
server-Windows XP Apache Axis Java 1.2.1 deployed on Tomcat 5.5.9

    Reporter: Brian Brooks


The stub generated by 

java -classpath %lib%\..\axis\wsdl2ws.jar;%axis% 
org.apache.axis.wsdl.wsdl2ws.WSDL2Ws %wsdl% -o./ClientOut -lc++ -sclient

has a defect.  In a debug win32 build, this results in the Microsoft runtime 
stopping the a client with a failed assertion

          /*
         * If this ASSERT fails, a bad pointer has been passed in. It may be
         * totally bogus, or it may have been allocated from another heap.
         * The pointer MUST come from the 'local' heap.
         */
        _ASSERTE(_CrtIsValidHeapPointer(pUserData));

the call stack at the point of failure is

  _free_dbg(void *, int)
  free(void *)
  operator delete(void *)
  Calculator::add(int, int)
  main(int, char * *)

The Calculator::add(int, int) function is declared in the generated stub 
Calculator.cpp.  This function is shown below.  The line that reads

                delete Ret;

seems to be the problem.

/*Methods corresponding to the web service methods*/

/*
 * This method wrap the service method add
 */
xsd__int Calculator::add(xsd__int Value0, xsd__int Value1)
{
        xsd__int* Ret = NULL;
        const char* pcCmplxFaultName;
        try
        {
                if (AXIS_SUCCESS != m_pCall->initialize(CPP_RPC_PROVIDER)) 
                        return *Ret;
        if (NULL==m_pCall->getTransportProperty("SOAPAction",false))
        {
                m_pCall->setTransportProperty(SOAPACTION_HEADER , "");
        }
                m_pCall->setSOAPVersion(SOAP_VER_1_1);
                m_pCall->setOperation("add", 
"http://localhost:8080/axis/Calculator.jws";);
                applyUserPreferences();
                m_pCall->addParameter((void*)&Value0, "i1", XSD_INT);
                m_pCall->addParameter((void*)&Value1, "i2", XSD_INT);
                if (AXIS_SUCCESS == m_pCall->invoke())
                {
                        if(AXIS_SUCCESS == m_pCall->checkMessage("addResponse", 
"http://localhost:8080/axis/Calculator.jws";))
                        {
                                Ret = m_pCall->getElementAsInt("addReturn", 0);
                        }
                }
        m_pCall->unInitialize();
                xsd__int r = *Ret;
                delete Ret;
                return r;
        }
        catch(AxisException& e)
        {
                int iExceptionCode = e.getExceptionCode();
                if(AXISC_NODE_VALUE_MISMATCH_EXCEPTION != iExceptionCode)
                {
                        throw SoapFaultException(e);
                }
                ISoapFault* pSoapFault = (ISoapFault*)
                        
m_pCall->checkFault("Fault","http://localhost:8080/axis/Calculator.jws"; );
                if(pSoapFault)
                {
                        m_pCall->unInitialize();
                        throw SoapFaultException(e);
                }
                else throw;
        }
}



-- 
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
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to