You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2004/09/06 11:18:23 UTC

cvs commit: ws-axis/c/samples/client/interoptests/base InteropBaseClient.cpp

samisa      2004/09/06 02:18:23

  Modified:    c/samples/client/interoptests/base InteropBaseClient.cpp
  Log:
  Cleaned all definite memory leaks with the help of valgrind.
  Also changed the usage semantics to pass the service URL directly, instead of host and port.
  
  Revision  Changes    Path
  1.22      +245 -131  ws-axis/c/samples/client/interoptests/base/InteropBaseClient.cpp
  
  Index: InteropBaseClient.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/samples/client/interoptests/base/InteropBaseClient.cpp,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- InteropBaseClient.cpp	16 Aug 2004 06:15:08 -0000	1.21
  +++ InteropBaseClient.cpp	6 Sep 2004 09:18:22 -0000	1.22
  @@ -1,197 +1,311 @@
  -// InteropBaseClient.cpp : Defines the entry point for the console application.
  -//
  +/*
  + *   Copyright 2003-2004 The Apache Software Foundation.
  + *
  + *   Licensed under the Apache License, Version 2.0 (the "License");
  + *   you may not use this file except in compliance with the License.
  + *   You may obtain a copy of the License at
  + *
  + *       http://www.apache.org/licenses/LICENSE-2.0
  + *
  + *   Unless required by applicable law or agreed to in writing, software
  + *   distributed under the License is distributed on an "AS IS" BASIS,
  + *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  + *   See the License for the specific language governing permissions and
  + *   limitations under the License.
  + *
  + *
  + * @author Sanjaya Singharage (sanjayas@opensource.lk)
  + * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
  + * @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
  + *
  + */
  +
   #include <string>
  -using namespace std;
  +#include <iostream>
   
  -#include "InteropTestPortType.h" 
   #include <axis/AxisGenException.h>
  +#include "InteropTestPortType.h"
  +
  +using namespace std;
   
   #define ARRAYSIZE 2
   
  -int main(int argc, char* argv[])
  +static void
  +usage (char *programName, char *defaultURL)
   {
  -	int x;
  -	char buffer1[100];
  -	char endpoint[256];
  -	const char* server="localhost";
  -	const char* port="80";
  -	try
  -        {
  -	if (argc == 3)
  +    cout << "\nUsage:\n"
  +	<< programName << " [-? | service_url] " << endl
  +	<< "    -?             Show this help.\n"
  +	<< "    service_url    URL of the service.\n"
  +	<< "    Default service URL is assumed to be " << defaultURL
  +	<<
  +	"\n    Could use http://localhost:8080/axis/services/echo to test with Axis Java."
  +	<< endl;
  +}
  +
  +
  +int
  +main (int argc, char *argv[])
  +{
  +    int x;
  +    char buffer1[100];
  +    char endpoint[256];
  +
  +    // Set default service URL
  +    sprintf (endpoint, "http://localhost/axis/base");
  +    // Could use http://localhost:8080/axis/services/echo to test with Axis Java
  +
  +    try
  +    {
  +
  +	if (argc > 1)
   	{
  -		server = argv[1];
  -		port = argv[2];
  +	    // Watch for special case help request
  +	    if (!strncmp (argv[1], "-", 1)) // Check for - only so that it works for 
  +                                            //-?, -h or --help; -anything 
  +	    {
  +		usage (argv[0], endpoint);
  +		return 2;
  +	    }
  +	    sprintf (endpoint, argv[1]);
   	}
  -	printf("Usage :\n %s <server> <port>\n\n", argv[0]);
  -	printf("Sending Requests to Server http://%s:%s ........\n\n", server, port);
  -	sprintf(endpoint, "http://%s:%s/axis/base", server, port);
  -	//endpoint for Axis Java sample
  -	//sprintf(endpoint, "http://%s:%s/axis/services/echo", server, port);
  -	
  -	InteropTestPortType ws(endpoint);
   
  -	printf("invoking echoString...\n");
  +
  +	cout << endl << " Using service at " << endpoint << endl << endl;
  +
  +	InteropTestPortType ws (endpoint);
  +
   	//testing echoString 
  -	string bigstring;
  -	for (int ii=0;ii<2;ii++)
  -	{
  -		bigstring += "hello world ";
  -	}
  -	strcpy(buffer1, bigstring.c_str());
  -	printf(ws.echoString(buffer1));
  -	if (0 == strcmp(ws.echoString("hello world"), "hello world"))
  -		printf("successful\n");
  +	printf ("invoking echoString...\n");
  +        char* echoStringResult = ws.echoString ("hello world");
  +	if (0 == strcmp (echoStringResult, "hello world"))
  +	    printf ("successful\n");
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory 
  +        if (echoStringResult)
  +            free(echoStringResult);
  +
   	// testing echoStringArray 
   	xsd__string_Array arrstr;
  -	arrstr.m_Array = new char*[ARRAYSIZE];
  +	arrstr.m_Array = new char *[ARRAYSIZE];
   	arrstr.m_Size = ARRAYSIZE;
  -	sprintf(buffer1, "%dth element of string array", 0);
  -	//sprintf(buffer2, "%dth element of string array", 1);
  -	for(int i=0; i< ARRAYSIZE; i++)
  -	{
  -		arrstr.m_Array[i] = buffer1;
  -	}
  -	//arrstr.m_Array[1] = buffer2;
  -	printf("invoking echoStringArray...\n");
  -	if (ws.echoStringArray(arrstr).m_Array != NULL)
  -		printf("successful\n");
  +	sprintf (buffer1, "%dth element of string array", 0);
  +	for (int i = 0; i < ARRAYSIZE; i++)
  +	{
  +	    arrstr.m_Array[i] = buffer1;
  +	}
  +	printf ("invoking echoStringArray...\n");
  +	xsd__string_Array arrstrResult = ws.echoStringArray (arrstr);
  +	if (arrstrResult.m_Array != NULL)
  +        {
  +	    printf ("successful\n");
  +            // Do stuff and clean memory
  +            for( int i = 0; i < arrstrResult.m_Size; i++ )
  +                free (arrstrResult.m_Array[i]);
  +            delete [] arrstrResult.m_Array;
  +        }
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory
  +        delete [] arrstr.m_Array;
  +
   	// testing echoInteger 
  -	printf("invoking echoInteger...\n");
  -	if (ws.echoInteger(56) == 56)
  -		printf("successful\n");
  +	printf ("invoking echoInteger...\n");
  +	if (ws.echoInteger (56) == 56)
  +	    printf ("successful\n");
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
   	// testing echoIntegerArray 
   	xsd__int_Array arrint;
   	arrint.m_Array = new int[ARRAYSIZE];
   	arrint.m_Size = ARRAYSIZE;
  -	for (x=0;x<ARRAYSIZE;x++)
  +	for (x = 0; x < ARRAYSIZE; x++)
   	{
  -		arrint.m_Array[x] = x;
  +	    arrint.m_Array[x] = x;
   	}
  -	printf("invoking echoIntegerArray...\n");
  -	if (ws.echoIntegerArray(arrint).m_Array != NULL)
  -		printf("successful\n");
  -	else
  -		printf("failed\n");
  +	printf ("invoking echoIntegerArray...\n");
  +	xsd__int_Array arrintResult = ws.echoIntegerArray (arrint);
  +	if (arrintResult.m_Array != NULL)
  +        {
  +	    printf ("successful\n");
  +            // Do stuff and clean memory
  +            delete [] arrintResult.m_Array;
  +	}
  +        else
  +	    printf ("failed\n");
  +
  +        // Clean memory
  +        delete [] arrint.m_Array;
  +
   	// testing echoFloat 
  -	printf("invoking echoFloat...\n");
  +	printf ("invoking echoFloat...\n");
   	float fvalue = 1.4214;
  -	if (ws.echoFloat(fvalue) > 1.42)
  -		printf("successful\n");
  +	if (ws.echoFloat (fvalue) > 1.42)
  +	    printf ("successful\n");
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
   	// testing echoFloat 
   	xsd__float_Array arrfloat;
   	arrfloat.m_Array = new float[ARRAYSIZE];
   	arrfloat.m_Size = ARRAYSIZE;
  -	for (x=0;x<ARRAYSIZE;x++)
  +	for (x = 0; x < ARRAYSIZE; x++)
   	{
  -		arrfloat.m_Array[x] = 1.1111*x;
  +	    arrfloat.m_Array[x] = 1.1111 * x;
   	}
  -	printf("invoking echoFloatArray...\n");
  -	if (ws.echoFloatArray(arrfloat).m_Array != NULL)
  -		printf("successful\n");
  +	printf ("invoking echoFloatArray...\n");
  +        xsd__float_Array arrfloatResult = ws.echoFloatArray (arrfloat);
  +	if (arrfloatResult.m_Array != NULL)
  +        {
  +	    printf ("successful\n");
  +            // Do stuff & clean memory
  +            // It is our responsibility to deallocate deserializer allocated memory
  +            delete [] arrfloatResult.m_Array;
  +        }
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +        
  +        // Clean memory
  +        delete [] arrfloat.m_Array;
  +
   	// testing echo Struct
   	SOAPStruct stct;
   	stct.varFloat = 12345.7346345;
   	stct.varInt = 5000;
  -	stct.varString = strdup("This is string in SOAPStruct");
  -	printf("invoking echoStruct...\n");
  -	if (ws.echoStruct(&stct) != NULL)
  -		printf("successful\n");
  +	stct.varString = strdup ("This is string in SOAPStruct");
  +	printf ("invoking echoStruct...\n");
  +	SOAPStruct* stctResult = ws.echoStruct (&stct);
  +	if (stctResult != NULL)
  +        {
  +	    printf ("successful\n");
  +            // Do stuff and clean memory
  +            free(stctResult->varString);
  +            delete stctResult;
  +        }
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory 
  +        free(stct.varString);
  +
   	//testing echo Array of Struct
   	SOAPStruct_Array arrstct;
   	arrstct.m_Array = new SOAPStruct[ARRAYSIZE];
   	arrstct.m_Size = ARRAYSIZE;
  -	for (x=0;x<ARRAYSIZE;x++)
  +	for (x = 0; x < ARRAYSIZE; x++)
   	{
  -		arrstct.m_Array[x].varFloat = 1.1111*x;
  -		arrstct.m_Array[x].varInt = x;
  -		sprintf(buffer1, "varString of %dth element of SOAPStruct array", x);
  -		arrstct.m_Array[x].varString = buffer1;
  -	}
  -	//testing echo Struct Array
  -	printf("invoking echoStructArray...\n");
  -	if (ws.echoStructArray(arrstct).m_Array != NULL)
  -		printf("successful\n");
  +	    arrstct.m_Array[x].varFloat = 1.1111 * x;
  +	    arrstct.m_Array[x].varInt = x;
  +	    sprintf (buffer1,
  +		     "varString of %dth element of SOAPStruct array", x);
  +	    arrstct.m_Array[x].varString = buffer1;
  +	}
  +
  +	printf ("invoking echoStructArray...\n");
  +        SOAPStruct_Array arrstctResult = ws.echoStructArray (arrstct);
  +	if (arrstctResult.m_Array != NULL)
  +        {
  +	    printf ("successful\n");
  +            // Do stuff and clean memory
  +            for( int i = 0; i < arrstctResult.m_Size; i++ )
  +               free (arrstctResult.m_Array[i].varString);
  +            delete [] arrstctResult.m_Array;
  +        }
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory
  +        delete [] arrstct.m_Array;
  +
   	//testing echo void
  -	printf("invoking echoVoid...\n");
  -	ws.echoVoid();
  -	printf("successful\n");
  +	printf ("invoking echoVoid...\n");
  +	ws.echoVoid ();
  +	printf ("successful\n");
  +
   	//testing echo base 64 binary
   
  -	const char* bstr = "some string that is sent encoded to either base64Binary or hexBinary";
  +	const char *bstr =
  +	    "some string that is sent encoded to either base64Binary or hexBinary";
   
  -	printf("invoking echoBase64...\n");
  +	printf ("invoking echoBase64...\n");
   	xsd__base64Binary bb;
  -	bb.__ptr = (unsigned char*)strdup(bstr);
  -	bb.__size = strlen(bstr);
  -	if (bb.__size == ws.echoBase64(bb).__size)
  +	bb.__ptr = (unsigned char *) strdup (bstr);
  +	bb.__size = strlen (bstr);
  +	xsd__base64Binary bbResult = ws.echoBase64 (bb);
  +	if (bb.__size == bbResult.__size)
   	{
  -		printf("successful\n");
  -		printf("Returned String :\n%s\n", bb.__ptr);
  +	    printf ("successful\n");
  +            // Do stuff
  +	    printf ("Returned String :\n%s\n", bbResult.__ptr);
  +            // Clean memory
  +            free(bbResult.__ptr);
   	}
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory
  +        free(bb.__ptr);
   
   	time_t tim;
  -	time(&tim);
  -	tm* lt = gmtime(&tim);
  -	printf("invoking echoDate...\n");
  -	if (memcmp(&ws.echoDate(*lt), lt, sizeof(tm)) == 0)
  -		printf("successful\n");
  +	time (&tim);
  +	tm *lt = gmtime (&tim);
  +	printf ("invoking echoDate...\n");
  +	if (memcmp (&ws.echoDate (*lt), lt, sizeof (tm)) == 0)
  +	    printf ("successful\n");
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
   	//testing echo hex binary
   
  -	printf("invoking echoHexBinary...\n");
  +	printf ("invoking echoHexBinary...\n");
   	xsd__hexBinary hb;
  -	hb.__ptr = (unsigned char*)strdup(bstr);
  -	hb.__size = strlen(bstr);
  -	if (hb.__size == ws.echoHexBinary(hb).__size)
  +	hb.__ptr = (unsigned char *) strdup (bstr);
  +	hb.__size = strlen (bstr);
  +	xsd__hexBinary hbResult = ws.echoHexBinary (hb);
  +	if (hb.__size == hbResult.__size)
   	{
  -		printf("successful\n");
  -		printf("Returned String :\n%s\n", hb.__ptr);
  +	    printf ("successful\n");
  +            // Do stuff
  +	    printf ("Returned String :\n%s\n", hbResult.__ptr);
  +            // Clean memory
  +            free(hbResult.__ptr);
   	}
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
  +        // Clean memory
  +        free(hb.__ptr);
  +
   	//testing echo decimal
  -	printf("invoking echoDecimal...\n");
  -	if (ws.echoDecimal(1234.567890) > 1234.56)
  -		printf("successful\n");
  +	printf ("invoking echoDecimal...\n");
  +	if (ws.echoDecimal (1234.567890) > 1234.56)
  +	    printf ("successful\n");
   	else
  -		printf("failed\n");
  +	    printf ("failed\n");
  +
   	//testing echo boolean
  -	printf("invoking echoBoolean...\n");
  -	if (ws.echoBoolean(true_) == true_)
  -		printf("successful\n");
  -	else
  -		printf("failed\n");
  -		
  -	/*getchar();*/
  -        }
  -        catch(AxisException& e)
  -        {
  -            printf("Exception : %s\n", e.what());
  -        }
  -        catch(exception& e)
  -        {
  -            printf("Unknown exception has occured\n");
  -        }
  -        catch(...)
  -        {
  -            printf("Unknown exception has occured\n");
  -        }
  -	return 0;
  +	printf ("invoking echoBoolean...\n");
  +	if (ws.echoBoolean (true_) == true_)
  +	    printf ("successful\n");
  +	else
  +	    printf ("failed\n");
  +
  +    }
  +    catch (AxisException & e)
  +    {
  +	printf ("Exception : %s\n", e.what ());
  +    }
  +    catch (exception & e)
  +    {
  +	printf ("Unknown exception has occured\n");
  +    }
  +    catch (...)
  +    {
  +	printf ("Unknown exception has occured\n");
  +    }
  +    return 0;
   }