WSDL2WS generate wrong code: complex array should not been deleted
------------------------------------------------------------------

         Key: AXISCPP-968
         URL: http://issues.apache.org/jira/browse/AXISCPP-968
     Project: Axis-C++
        Type: Bug

  Components: WSDL processing - RPC  
    Versions:  1.6 Beta    
 Environment:  Platform:
        Linux fedora 3.0
Axis version:
        Server-side Axis C++ 1.6Beta
XML Parser Lib:
xersesc 2.6
WSDL2ws tool by using axis java 1.3
Client-side version Axis java 1.3
Http Server Version:
Apache 2.0.53
Tomcat 2.0.58
    Reporter: Michael Xiong
    Priority: Critical


  [Error Statement]:
I have used AxisCPP1.6Beta version to generate TestWrapper.cpp  like the below:
TestWrapper.cpp :
int TestWrapper::OperationTest(void* pTestMsg)
{
... ...
        MailBoxInformation_Array out0;
... ...
        try
        {
        pWs->GetMailBox(v0,v1,v2,&out0,&out1);
        pIWSSZ->addOutputCmplxArrayParam((Axis_Array*)(&out0),(void*) 
Axis_Serialize_MailBoxInformation, (void*) Axis_Delete_MailBoxInformation, 
(void*) Axis_GetSize_MailBoxInformation, ">GetMailBoxResponse>MailBox", 
Axis_URI_MailBoxInformation);
        delete out0;
... ...
}

>From the generated code, out0 is really a complex array, which is a new  
>addressing/accessing method introduced from axis-c-1.6 and be used elsewhere.
The complex array it-self is an object, not simple memory block, so should not 
been deleted directly by delete.
In deed it will been released after out of stack automatically, I think.

[solution]:
I have investigated the source code of AxisCPP/WSDL2Ws tool, and found that if 
I modify the following code at about line 781~801 in writeMethodInWrapper 
method that belongs to WrapWriter (wsdl2ws/cpp/iteral) class, the generated 
code will become correct.
                                 else
                                {
                                    containedType = qname.getLocalPart();
                                    writer.write(
                                        
"\tpIWSSZ->addOutputCmplxArrayParam((Axis_Array*)(&out"
                                            + i
                                            + "),"
                                            + "(void*) Axis_Serialize_"
                                            + containedType
                                            + ", (void*) Axis_Delete_"
                                            + containedType
                                            + ", (void*) Axis_GetSize_"
                                            + containedType
                                            + ", \""
                                            + returnParamName
                                            + "\", Axis_URI_"
                                            + containedType
                                            + ");\n");
//<mxiong debug 2006/4/25
//                                    writer.write("\tdelete out" + i + ";\n");
//>mxiong debug 2006/4/25
                                }
                            }

So I think it maybe a bug, could you like to check it ? 

-- 
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