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 na...@apache.org on 2006/04/11 17:26:48 UTC

svn commit: r393244 - in /webservices/axis/trunk/c: include/axis/ src/cbindings/ src/engine/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ tests/auto_build/testcases/client/c/

Author: nadiramra
Date: Tue Apr 11 08:26:35 2006
New Revision: 393244

URL: http://svn.apache.org/viewcvs?rev=393244&view=rev
Log:
C support fixes/enhancements.

Modified:
    webservices/axis/trunk/c/include/axis/Axis.h
    webservices/axis/trunk/c/src/cbindings/AxisC.cpp
    webservices/axis/trunk/c/src/engine/Axis.cpp
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParamCFileWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
    webservices/axis/trunk/c/tests/auto_build/testcases/client/c/SimpleTypeArrayClient.c

Modified: webservices/axis/trunk/c/include/axis/Axis.h
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/include/axis/Axis.h?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/include/axis/Axis.h (original)
+++ webservices/axis/trunk/c/include/axis/Axis.h Tue Apr 11 08:26:35 2006
@@ -77,14 +77,14 @@
 
 /**
   * Allocates storage to be used by Axis engine.  All proxy code and allocated
-  * storage required by the client must use this to allocate storage
-  * that may be freed by proxy code or the Axis engine.
+  * storage required by the client for basic types must use this 
+  * function in order that it may be freed by proxy code or the Axis engine.
   * 
   * @param size - size of storage to be allocated
   * @return pointer to allocated storage
   */
 AXISC_STORAGE_CLASS_INFO 
-void * axiscAxisNew(int size);
+void * axiscAxisNew(AXISC_XSDTYPE type, int size);
 
 /**
   * Registers a function that will be invoked to handle Axis engine

Modified: webservices/axis/trunk/c/src/cbindings/AxisC.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/cbindings/AxisC.cpp?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/cbindings/AxisC.cpp (original)
+++ webservices/axis/trunk/c/src/cbindings/AxisC.cpp Tue Apr 11 08:26:35 2006
@@ -19,14 +19,18 @@
 
 #include <axis/Axis.hpp>
 #include <axis/AxisException.hpp>
+#include <axis/AxisUserAPI.hpp>
 
-AXIS_CPP_NAMESPACE_USE
-
-extern "C" {
+#include <axis/Axis.h>
 #include <axis/GDefine.h>
 #include <axis/AxisUserAPI.h>
+#include <axis/AxisUserAPIArrays.h>
 #include <axis/TypeMapping.h>
-#include <axis/Axis.h>
+
+
+AXIS_CPP_NAMESPACE_USE
+
+extern "C" {
 
 static AXIS_EXCEPTION_HANDLER_FUNCT global_exceptionHandler = NULL;
 
@@ -84,7 +88,84 @@
     
     try 
     {
-        Axis::AxisDelete(pValue, (XSDTYPE) type);
+	    if (pValue == NULL)
+	        return rc;
+	        
+	    // There are some types we cannot pass to C++ engine
+	    switch (type)
+	    {
+	        case XSDC_DURATION:
+	        case XSDC_DATETIME:
+	        case XSDC_TIME:
+	        case XSDC_DATE:
+	        case XSDC_GYEARMONTH:
+	        case XSDC_GYEAR:
+	        case XSDC_GMONTHDAY:
+	        case XSDC_GDAY:
+	        case XSDC_GMONTH:
+	        case XSDC_STRING:
+	        case XSDC_NORMALIZEDSTRING:
+	        case XSDC_TOKEN:
+	        case XSDC_LANGUAGE:
+	        case XSDC_NAME:
+	        case XSDC_NCNAME:
+	        case XSDC_ID:
+	        case XSDC_IDREF:
+	        case XSDC_IDREFS:
+	        case XSDC_ENTITY:
+	        case XSDC_ENTITIES:
+	        case XSDC_NMTOKEN:
+	        case XSDC_NMTOKENS:
+	        case XSDC_BOOLEAN:
+	        case XSDC_FLOAT:
+	        case XSDC_DECIMAL:
+	        case XSDC_NONPOSITIVEINTEGER:
+	        case XSDC_NEGATIVEINTEGER:
+	        case XSDC_INTEGER:
+	        case XSDC_LONG:
+	        case XSDC_INT:
+	        case XSDC_SHORT:
+	        case XSDC_BYTE:
+	        case XSDC_NONNEGATIVEINTEGER:
+	        case XSDC_UNSIGNEDLONG:
+	        case XSDC_UNSIGNEDINT:
+	        case XSDC_UNSIGNEDSHORT:
+	        case XSDC_UNSIGNEDBYTE:
+	        case XSDC_POSITIVEINTEGER:
+	        case XSDC_DOUBLE:
+	        case XSDC_ANYURI:
+	        case XSDC_QNAME:
+	        case XSDC_NOTATION:
+	        case C_USER_TYPE:
+	        case XSDC_ANY:
+	        case C_ATTACHMENT:
+	        case XSDC_UNKNOWN:
+	        {
+	            Axis::AxisDelete(pValue, (XSDTYPE) type);
+	            break;
+	        }
+	        case XSDC_ARRAY:
+	        {
+	            // TODO delete array elements if simple types
+	            delete (Axisc_Array*) pValue;
+	            break;
+	        }
+	        case XSDC_BASE64BINARY:
+	        {
+	            // TODO delete elements?	        
+	            delete (xsdc__base64Binary*) pValue;
+	            break;
+	        }
+	        case XSDC_HEXBINARY:
+	        {
+	            // TODO delete elements?	        
+	            delete (xsdc__hexBinary*) pValue;
+	            break;
+	        }
+	        
+	        default:
+	            ;
+	    }
     }
     catch ( AxisException& e  )
     {
@@ -98,6 +179,207 @@
     }    
     
     return rc;
+}
+
+
+AXISC_STORAGE_CLASS_INFO 
+void *axiscAxisNew(AXISC_XSDTYPE type, int size)
+{
+    void *retVal=NULL;
+    
+    try 
+    {	        
+	    switch (type)
+	    {
+            case XSDC_DURATION:
+            {
+                retVal = new xsd__duration();
+                break;
+            }
+            case XSDC_DATETIME:
+            {
+                retVal = new xsd__dateTime();
+                break;
+            }
+            case XSDC_TIME:
+            {
+                retVal = new xsd__time();
+                break;
+            }
+            case XSDC_DATE:
+            {
+                retVal = new xsd__date();
+                break;
+            }
+            case XSDC_GYEARMONTH:
+            {
+                retVal = new xsd__gYearMonth();
+                break;
+            }           
+            case XSDC_GYEAR:
+            {
+                retVal = new xsd__gYear();
+                break;
+            }
+            case XSDC_GMONTHDAY:
+            {
+                retVal = new xsd__gMonthDay();
+                break;
+            }
+            case XSDC_GDAY:
+            {
+                retVal = new xsd__gDay();
+                break;
+            }
+            case XSDC_GMONTH:
+            {
+                retVal = new xsd__gMonth();
+                break;
+            }
+            case XSDC_STRING:
+            case XSDC_NORMALIZEDSTRING:
+            case XSDC_TOKEN:
+            case XSDC_LANGUAGE:
+            case XSDC_NAME:
+            case XSDC_NCNAME:
+            case XSDC_ID:
+            case XSDC_IDREF:
+            case XSDC_IDREFS:
+            case XSDC_ENTITY:
+            case XSDC_ENTITIES:
+            case XSDC_NMTOKEN:
+            case XSDC_NMTOKENS:
+            case XSDC_ANYURI:
+            case XSDC_QNAME:
+            case XSDC_NOTATION:
+            {
+                retVal = new char[size+1];
+                break;
+            }
+            case XSDC_BOOLEAN:
+            {
+                retVal = new xsd__boolean();
+                break;
+            }
+            case XSDC_BASE64BINARY:
+            {
+                xsdc__base64Binary *b64bin = new xsdc__base64Binary();
+                b64bin->__size=0;
+                b64bin->__ptr=NULL;
+                retVal = b64bin;
+                break;
+            }
+            case XSDC_HEXBINARY:
+            {
+                xsdc__hexBinary *hexbin = new xsdc__hexBinary();
+                hexbin->__size=0;
+                hexbin->__ptr=NULL;
+ 				retVal = hexbin;
+                break;
+            }
+            case XSDC_FLOAT:
+            {
+                retVal = new xsd__float();
+                break;
+            }
+            case XSDC_DECIMAL:
+            {
+                retVal = new xsd__decimal();
+                break;
+            }
+            case XSDC_INTEGER:
+            {
+                retVal = new xsd__integer();
+                break;
+            }
+            case XSDC_NONPOSITIVEINTEGER:
+            {
+                retVal = new xsd__nonPositiveInteger();
+                break;
+            }
+            case XSDC_NEGATIVEINTEGER:
+            {
+                retVal = new xsd__negativeInteger();
+                break;
+            }
+            case XSDC_LONG:
+            {
+                retVal = new xsd__long();
+                break;
+            }
+            case XSDC_INT:
+            {
+                retVal = new xsd__int();
+                break;
+            }
+            case XSDC_SHORT:
+            {
+                retVal = new xsd__short();
+                break;
+            }
+            case XSDC_BYTE:
+            {
+                retVal = new xsd__byte();
+                break;
+            }
+            case XSDC_NONNEGATIVEINTEGER:
+            {
+                retVal = new xsd__nonNegativeInteger();
+                break;
+            }
+            case XSDC_UNSIGNEDLONG:
+            {
+                retVal = new xsd__unsignedLong();
+                break;
+            }
+            case XSDC_UNSIGNEDINT:
+            {
+                retVal = new xsd__unsignedInt();
+                break;
+            }
+            case XSDC_UNSIGNEDSHORT:
+            {
+                retVal = new xsd__unsignedShort();
+                break;
+            }
+            case XSDC_UNSIGNEDBYTE:
+            {
+                retVal = new xsd__unsignedByte();
+                break;
+            }
+            case XSDC_POSITIVEINTEGER:
+            {
+                retVal = new xsd__positiveInteger();
+                break;
+            }
+            case XSDC_DOUBLE:
+            {
+                retVal = new xsd__double();
+                break;
+            }
+            case XSDC_ARRAY:
+            {
+                Axisc_Array * array = new Axisc_Array();
+                array->m_Array = NULL;
+                array->m_Size  = 0;
+                array->m_Type  = XSDC_UNKNOWN;
+                retVal = array;
+                break;
+            }
+            case C_USER_TYPE:
+            case XSDC_UNKNOWN:
+            case XSDC_ANY:
+            case C_ATTACHMENT:
+            default:
+                break;
+	    }
+    }
+    catch ( ... )
+    {
+        axiscInvokeExceptionHandler(-1, "Unrecognized exception thrown.");
+    }    
+    
+    return retVal;
 }
 
 AXISC_STORAGE_CLASS_INFO 

Modified: webservices/axis/trunk/c/src/engine/Axis.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/engine/Axis.cpp?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/engine/Axis.cpp (original)
+++ webservices/axis/trunk/c/src/engine/Axis.cpp Tue Apr 11 08:26:35 2006
@@ -85,6 +85,7 @@
 DeserializerPool* g_pDeserializerPool;
 SerializerPool* g_pSerializerPool;
 HandlerPool* g_pHandlerPool;
+
 // Unsynchronized read-only global variables.
 WSDDDeployment* g_pWSDDDeployment;
 AxisConfig* g_pConfig;
@@ -106,14 +107,10 @@
     // unsynchronized read-only global variables.
     g_pWSDDDeployment = new WSDDDeployment ();
 
-	if( g_pConfig != NULL)
-	{
-		g_pConfig = new AxisConfig( g_pConfig);
-	}
-	else
-	{
-		g_pConfig = new AxisConfig();
-	}
+    if( g_pConfig != NULL)
+        g_pConfig = new AxisConfig( g_pConfig);
+    else
+        g_pConfig = new AxisConfig();
 }
 
 void ModuleUnInitialize ()
@@ -126,12 +123,13 @@
     delete g_pSerializerPool;
     delete g_pHandlerPool;
     delete g_pHandlerLoader;
+    
     // unsynchronized read-only global variables.
     delete g_pWSDDDeployment;
     delete g_pConfig;
 
-	g_pConfig = NULL;
-	g_pWSDDDeployment = NULL;
+    g_pConfig = NULL;
+    g_pWSDDDeployment = NULL;
 
     AxisTrace::terminate();
 }
@@ -168,11 +166,9 @@
                      try
                      {
                         Status = engine->process(pStream);
-					   if (AXIS_SUCCESS == Status)
-						{
-							pStream->flushOutput();
-						}
-						else
+                       if (AXIS_SUCCESS == Status)
+                            pStream->flushOutput();
+                        else
                         {
                             ServerAxisEngine* pObjTempServer = (ServerAxisEngine*) engine;
                             pObjTempServer->setFaultOutputStream(Status, pStream);
@@ -193,7 +189,6 @@
                     delete engine;
                 }
             }
-          // Handle the GET method
             else if (AXIS_HTTP_GET == pStream->getSubProtocol())
             {
                 // get the uri path
@@ -279,25 +274,21 @@
                 }
                 else
                 {
-					sServiceName = g_pConfig->getAxisConfProperty(AXCONF_AXISHOME);
+                    sServiceName = g_pConfig->getAxisConfProperty(AXCONF_AXISHOME);
                     sServiceName += WSDLDIRECTORY + sUriWOAxis + ".wsdl";
                     // Check whether wsdl file is available
                     if ((WsddFile = fopen (sServiceName.c_str (), "r")) == NULL)
                     {
-                        pStream->sendBytes("<h3>Url not available</h3>",
-                            NULL);
+                        pStream->sendBytes("<h3>Url not available</h3>", NULL);
                         Status = AXIS_SUCCESS;
-                        // Handle the error
                     }
                     else
                     {
                         int charcount = 0;
-                        while ((charcount = fread (ReadBuffer, 1,
-                            BYTESTOREAD - 1, WsddFile)) != 0)
+                        while ((charcount = fread (ReadBuffer, 1, BYTESTOREAD - 1, WsddFile)) != 0)
                         {
                             *(ReadBuffer + charcount) = '\0';
-                            pStream->sendBytes(ReadBuffer,
-                                NULL);
+                            pStream->sendBytes(ReadBuffer, NULL);
                         }
                         Status = AXIS_SUCCESS;
                         fclose (WsddFile);
@@ -305,7 +296,7 @@
                 }
             }
             
-	    break;
+        break;
 
         default:
             pStream->sendBytes("Unknown Protocol", NULL);
@@ -373,16 +364,16 @@
 
             if (bServer) // no client side wsdd processing at the moment
             {
-    		    // Read from the configuration file
+                // Read from the configuration file
                 status = g_pConfig->readConfFile (); 
 
                 if (status == AXIS_SUCCESS)
-                {					
-					try
-					{            
-						XMLParserFactory::initialize();
-					}
-					catch (AxisException& e)
+                {                    
+                    try
+                    {            
+                        XMLParserFactory::initialize();
+                    }
+                    catch (AxisException& e)
                     {
                         throw AxisEngineException(e.getExceptionCode(), e.what());
                     }
@@ -399,9 +390,7 @@
                     try
                     {            
                         if (AXIS_SUCCESS != g_pWSDDDeployment->loadWSDD (pWsddPath))
-                        {
                             status = AXIS_FAIL;
-                        }
                     }
                     catch (AxisException& e)
                     {
@@ -409,9 +398,7 @@
                     }
                 }
                 else
-                {
                     status = AXIS_FAIL;
-                }
            }
            else if (bServer == 0)      // client side module initialization
            {
@@ -425,22 +412,18 @@
                    XMLParserFactory::initialize();
                    SOAPTransportFactory::initialize();
 
-                   char *	pClientWsddPath = g_pConfig->getAxisConfProperty(AXCONF_CLIENTWSDDFILEPATH);
+                   char *    pClientWsddPath = g_pConfig->getAxisConfProperty(AXCONF_CLIENTWSDDFILEPATH);
     
-// May be there is no client side handlers configured. So may not have CLIENTWSDDFILEPATH entry in axiscpp.conf 
+                   // May be there is no client side handlers configured. So may not have CLIENTWSDDFILEPATH entry in axiscpp.conf 
                    if (pClientWsddPath)
-                   {
                        if (AXIS_SUCCESS != g_pWSDDDeployment->loadWSDD (pClientWsddPath))
-                       {
                            status = AXIS_FAIL;
-                       }
-                   }
                 }
                 else
                 {
                     AXISTRACE3( "Reading from the configuration file failed. \
-								Check for error in the configuration file.\n\
-								Handlers and logging are not working");
+                                Check for error in the configuration file.\n\
+                                Handlers and logging are not working");
                     /* TODO:Improve the AxisTrace so that it will log these kind of 
                      * messages into a log file according to the critical level 
                      * specified.
@@ -455,7 +438,7 @@
        }
        else if (AxisEngine::m_bServer != bServer)
        {
-		   throw AxisEngineException(SERVER_ENGINE_EXCEPTION);
+           throw AxisEngineException(SERVER_ENGINE_EXCEPTION);
        }
     }
     catch (...)
@@ -531,288 +514,243 @@
 
 void Axis::AxisDelete(void *pValue, XSDTYPE type)
 {
-    if (pValue != NULL)
+    if (pValue == NULL)
+        return;
+        
+    switch (type)
     {
-        switch (type)
+        case XSD_DURATION:
         {
-            case XSD_DURATION:
-            {
-                delete (xsd__duration*) pValue;
-                pValue = NULL;
-    			break;
-            }
-            case XSD_DATETIME:
-            {
-                delete (xsd__dateTime*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_TIME:
-            {
-                delete (xsd__time*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_DATE:
-            {
-                delete (xsd__date*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_GYEARMONTH:
-            {
-                delete (xsd__gYearMonth*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_GYEAR:
-            {
-                delete (xsd__gYear*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_GMONTHDAY:
-            {
-                delete (xsd__gMonthDay*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_GDAY:
-            {
-                delete (xsd__gDay*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_GMONTH:
-            {
-                delete (xsd__gMonth*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_STRING:
-            {
-                delete [] (xsd__string) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NORMALIZEDSTRING:
-            {
-                delete [] (xsd__normalizedString) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_TOKEN:
-            {
-                delete [] (xsd__token) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_LANGUAGE:
-            {
-                delete [] (xsd__language) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NAME:
-            {
-                delete [] (xsd__Name) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NCNAME:
-            {
-                delete [] (xsd__NCName) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_ID:
-            {
-                delete [] (xsd__ID) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_IDREF:
-            {
-                delete [] (xsd__IDREF) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_IDREFS:
-            {
-                delete [] (xsd__IDREFS) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_ENTITY:
-            {
-                delete [] (xsd__ENTITY) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_ENTITIES:
-            {
-                delete [] (xsd__ENTITIES) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NMTOKEN:
-            {
-                delete [] (xsd__NMTOKEN) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NMTOKENS:
-            {
-                delete [] (xsd__NMTOKENS) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_BOOLEAN:
-            {
-                delete (xsd__boolean*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_BASE64BINARY:
-            {
-                delete (xsd__base64Binary*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_HEXBINARY:
-            {
-                delete (xsd__hexBinary*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_FLOAT:
-            {
-                delete (xsd__float*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_DECIMAL:
-            {
-                delete (xsd__decimal*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NONPOSITIVEINTEGER:
-            {
-                delete (xsd__nonPositiveInteger*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NEGATIVEINTEGER:
-            {
-                delete (xsd__negativeInteger*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_INTEGER:
-            {
-                delete (xsd__integer*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_LONG:
-            {
-                delete (xsd__long*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_INT:
-            {
-                delete (xsd__int*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_SHORT:
-            {
-                delete (xsd__short*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_BYTE:
-            {
-                delete (xsd__byte*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NONNEGATIVEINTEGER:
-            {
-                delete (xsd__nonNegativeInteger*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_UNSIGNEDLONG:
-            {
-                delete (xsd__unsignedLong*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_UNSIGNEDINT:
-            {
-                delete (xsd__unsignedInt*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_UNSIGNEDSHORT:
-            {
-                delete (xsd__unsignedShort*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_UNSIGNEDBYTE:
-            {
-                delete (xsd__unsignedByte*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_POSITIVEINTEGER:
-            {
-                delete (xsd__positiveInteger*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_DOUBLE:
-            {
-                delete (xsd__double*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_ANYURI:
-            {
-                delete [] (xsd__anyURI) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_QNAME:
-            {
-                delete [] (xsd__QName) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_NOTATION:
-            {
-                delete [] (xsd__NOTATION) pValue;
-                pValue = NULL;
-                break;
-            }
-            case USER_TYPE:
-                // The USER_TYPE object should be cleared by the Application
-                break;
-            case XSD_ARRAY:
-            {
-                delete (Axis_Array*) pValue;
-                pValue = NULL;
-                break;
-            }
-            case XSD_ANY:
-            case ATTACHMENT:
-            case XSD_UNKNOWN:
-            default:
-    			;
+            delete (xsd__duration*) pValue;
+            break;
         }
+        case XSD_DATETIME:
+        {
+            delete (xsd__dateTime*) pValue;
+            break;
+        }
+        case XSD_TIME:
+        {
+            delete (xsd__time*) pValue;
+            break;
+        }
+        case XSD_DATE:
+        {
+            delete (xsd__date*) pValue;
+            break;
+        }
+        case XSD_GYEARMONTH:
+        {
+            delete (xsd__gYearMonth*) pValue;
+            break;
+        }
+        case XSD_GYEAR:
+        {
+            delete (xsd__gYear*) pValue;
+            break;
+        }
+        case XSD_GMONTHDAY:
+        {
+            delete (xsd__gMonthDay*) pValue;
+            break;
+        }
+        case XSD_GDAY:
+        {
+            delete (xsd__gDay*) pValue;
+            break;
+        }
+        case XSD_GMONTH:
+        {
+            delete (xsd__gMonth*) pValue;
+            break;
+        }
+        case XSD_STRING:
+        {
+            delete [] (xsd__string) pValue;
+            break;
+        }
+        case XSD_NORMALIZEDSTRING:
+        {
+            delete [] (xsd__normalizedString) pValue;
+            break;
+        }
+        case XSD_TOKEN:
+        {
+            delete [] (xsd__token) pValue;
+            break;
+        }
+        case XSD_LANGUAGE:
+        {
+            delete [] (xsd__language) pValue;
+            break;
+        }
+        case XSD_NAME:
+        {
+            delete [] (xsd__Name) pValue;
+            break;
+        }
+        case XSD_NCNAME:
+        {
+            delete [] (xsd__NCName) pValue;
+            break;
+        }
+        case XSD_ID:
+        {
+            delete [] (xsd__ID) pValue;
+            break;
+        }
+        case XSD_IDREF:
+        {
+            delete [] (xsd__IDREF) pValue;
+            break;
+        }
+        case XSD_IDREFS:
+        {
+            delete [] (xsd__IDREFS) pValue;
+            break;
+        }
+        case XSD_ENTITY:
+        {
+            delete [] (xsd__ENTITY) pValue;
+            break;
+        }
+        case XSD_ENTITIES:
+        {
+            delete [] (xsd__ENTITIES) pValue;
+            break;
+        }
+        case XSD_NMTOKEN:
+        {
+            delete [] (xsd__NMTOKEN) pValue;
+            break;
+        }
+        case XSD_NMTOKENS:
+        {
+            delete [] (xsd__NMTOKENS) pValue;
+            break;
+        }
+        case XSD_BOOLEAN:
+        {
+            delete (xsd__boolean*) pValue;
+            break;
+        }
+        case XSD_BASE64BINARY:
+        {
+            delete (xsd__base64Binary*) pValue;
+            break;
+        }
+        case XSD_HEXBINARY:
+        {
+            delete (xsd__hexBinary*) pValue;
+            break;
+        }
+        case XSD_FLOAT:
+        {
+            delete (xsd__float*) pValue;
+            break;
+        }
+        case XSD_DECIMAL:
+        {
+            delete (xsd__decimal*) pValue;
+            break;
+        }
+        case XSD_NONPOSITIVEINTEGER:
+        {
+            delete (xsd__nonPositiveInteger*) pValue;
+            break;
+        }
+        case XSD_NEGATIVEINTEGER:
+        {
+            delete (xsd__negativeInteger*) pValue;
+            break;
+        }
+        case XSD_INTEGER:
+        {
+            delete (xsd__integer*) pValue;
+            break;
+        }
+        case XSD_LONG:
+        {
+            delete (xsd__long*) pValue;
+            break;
+        }
+        case XSD_INT:
+        {
+            delete (xsd__int*) pValue;
+            break;
+        }
+        case XSD_SHORT:
+        {
+            delete (xsd__short*) pValue;
+            break;
+        }
+        case XSD_BYTE:
+        {
+            delete (xsd__byte*) pValue;
+            break;
+        }
+        case XSD_NONNEGATIVEINTEGER:
+        {
+            delete (xsd__nonNegativeInteger*) pValue;
+            break;
+        }
+        case XSD_UNSIGNEDLONG:
+        {
+            delete (xsd__unsignedLong*) pValue;
+            break;
+        }
+        case XSD_UNSIGNEDINT:
+        {
+            delete (xsd__unsignedInt*) pValue;
+            break;
+        }
+        case XSD_UNSIGNEDSHORT:
+        {
+            delete (xsd__unsignedShort*) pValue;
+            break;
+        }
+        case XSD_UNSIGNEDBYTE:
+        {
+            delete (xsd__unsignedByte*) pValue;
+            break;
+        }
+        case XSD_POSITIVEINTEGER:
+        {
+            delete (xsd__positiveInteger*) pValue;
+            break;
+        }
+        case XSD_DOUBLE:
+        {
+            delete (xsd__double*) pValue;
+            break;
+        }
+        case XSD_ANYURI:
+        {
+            delete [] (xsd__anyURI) pValue;
+            break;
+        }
+        case XSD_QNAME:
+        {
+            delete [] (xsd__QName) pValue;
+            break;
+        }
+        case XSD_NOTATION:
+        {
+            delete [] (xsd__NOTATION) pValue;
+            break;
+        }
+        case USER_TYPE:
+            // The USER_TYPE object should be cleared by the Application
+            break;
+        case XSD_ARRAY:
+        {
+            delete (Axis_Array*) pValue;
+            break;
+        }
+        case XSD_ANY:
+        case ATTACHMENT:
+        case XSD_UNKNOWN:
+        default:
+            ;
     }
 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java Tue Apr 11 08:26:35 2006
@@ -130,7 +130,7 @@
         writer.write("\tAxiscBool blnIsNewPrefix = xsdc_boolean_false;\n\n");
         
         writer.write("\tif ( param == NULL )\n\t{\n");
-        writer.write("\t\taxiscSerializeAsAttribute(pSZ, \"xsi:nil\", 0, (void*)&(xsdc_boolean_true), XSD_BOOLEAN);\n");
+        writer.write("\t\taxiscSerializeAsAttribute(pSZ, \"xsi:nil\", 0, (void*)&(xsdc_boolean_true), XSDC_BOOLEAN);\n");
         writer.write("\t\taxiscSerializeIWrapperSoapSerializer(pSZ, \">\", NULL);\n");
         writer.write("\t\treturn AXISC_SUCCESS;\n");
         writer.write("\t}\n\n");
@@ -479,15 +479,23 @@
                         baseTypeName = CUtils.getclass4qname(attribs[i].getType().getBaseType());
                     else
                         baseTypeName = attribs[i].getTypeName();
+
+                    writer.write("\t/* If there is an existing array, delete it */\n");
+                    writer.write("\tif (param->" + attribs[i].getParamNameAsMember() + " != NULL)\n");
+                    writer.write("\t{\n");
+                    writer.write("\t\taxiscAxisDelete(param->" + attribs[i].getParamNameAsMember() + ", XSDC_ARRAY);\n");
+                    writer.write("\t\tparam->" + attribs[i].getParamNameAsMember() + "= NULL;\n");
+                    writer.write("\t}\n");
+                    writer.write("\n");
                     
-                    writer.write("\tAxisc_Array *array" + arrayCount + "= axiscGetBasicArrayIWrapperSoapDeSerializer(pDZ, " 
+                    writer.write("\t/* Deserialize array */\n");
+                    writer.write("\tparam->" + attribs[i].getParamNameAsMember() 
+                            + " = (" + baseTypeName + "_Array *)" 
+                            + "axiscGetBasicArrayIWrapperSoapDeSerializer(pDZ, " 
                             + CUtils.getXSDTypeForBasicType(baseTypeName) + ", \"" 
-                            + attribs[i].getParamNameAsSOAPElement()
-                            + "\",0);\n");
-      
-                    writer.write("\tparam->" + attribs[i].getParamNameAsMember() + " = array" + arrayCount + "->m_Array;\n");
-              
-                    // TODO C-BINDING MEMORY MANAGEMENT?
+                            + attribs[i].getParamNameAsSOAPElement() + "\",0);\n");
+
+                    writer.write("\n");
                 }
                 else
                 {
@@ -678,6 +686,7 @@
                     + CUtils.getXSDTypeForBasicType(extensionBaseAttrib.getTypeName()) + ");\n");
         }
         
+        writer.write("\t/* Return deserialization status */\n");
         writer.write("\treturn axiscGetStatusIWrapperSoapDeSerializer(pDZ);\n");
         writer.write("}\n");
     }
@@ -722,21 +731,29 @@
 
         writer.write("void Axis_Delete_" + classname
                 + "(" + classname + "* param, AxiscBool bArray, int nSize)\n");
+        
         writer.write("{\n");
-        writer.write("\tif (!param) return;\n\n");
+        writer.write("\t/* If NULL, just return */\n");
+        writer.write("\tif (!param)\n");
+        writer.write("\t\treturn;\n");
+        writer.write("\n");
+        
+        writer.write("\t/* Recursion is used to delete arrays */\n");
         writer.write("\tif (bArray)\n");
         writer.write("\t{\n");
         writer.write("\t\tif (nSize > 0)\n");
         writer.write("\t\t{\n");
         writer.write("\t\t\tint count;\n");
+        writer.write("\t\t\t" + classname + " **paramArray = (" + classname + " **)param;\n");
         writer.write("\t\t\tfor (count = 0 ; count < nSize ; count++ )\n");
         writer.write("\t\t\t{\n");
-        writer.write("\t\t\t\tif ( (( " + classname + " ** ) param)[count])\n");
+        writer.write("\t\t\t\tif (paramArray[count])\n");
         writer.write("\t\t\t\t{\n");
-        writer.write("\t\t\t\t\tfree ((( " + classname + " ** ) param)[count]);\n");
+        writer.write("\t\t\t\t\tAxis_Delete_" + classname + "(paramArray[count],0,0);\n");
+        writer.write("\t\t\t\t\tparamArray[count] = NULL;\n");
         writer.write("\t\t\t\t}\n");
         writer.write("\t\t\t}\n");
-        writer.write("\t\t\tfree(( " + classname + " ** ) param);\n");
+        writer.write("\t\t\tfree(param);\n");
         writer.write("\t\t}\n");
         writer.write("\t}\n");
         writer.write("\telse\n");
@@ -749,13 +766,6 @@
 // Following will need to be used above....
 //    private void writeDeleteGlobalMethod() throws IOException
 //    {
-//        writer.write("/**\n");
-//        writer.write(" * This static method to deallocate a " + classname + " type of object\n");
-//        writer.write(" */\n");
-//
-//        writer.write(
-//            "void Axis_Delete_" + classname + "(" + classname + "* param, AxiscBool bArray, int nSize)\n");
-//        writer.write("{\n");
 //        boolean hasComplexTypeOrArray = false;
 //        for (int i = 0; i < attribs.length; i++)
 //        {

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ClientStubWriter.java Tue Apr 11 08:26:35 2006
@@ -267,7 +267,7 @@
             if (returntypeisarray)
             {
                 //for arrays
-                writer.write(outparamTypeName + " RetArray = {NULL, 0, XSD_UNKNOWN};\n");
+                writer.write(outparamTypeName + " RetArray = {NULL, 0, XSDC_UNKNOWN};\n");
             }
             else
                 if (!returntypeissimple)

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParamCFileWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParamCFileWriter.java?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParamCFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParamCFileWriter.java Tue Apr 11 08:26:35 2006
@@ -117,7 +117,7 @@
         try
         {
             writer.write("#include <stdlib.h>\n");
-            writer.write("#include <memory.h>\n");
+            writer.write("#include <string.h>\n");
             writer.write("\n");
 
             writer.write("#include <axis/Axis.h>\n");

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubWriter.java Tue Apr 11 08:26:35 2006
@@ -211,7 +211,7 @@
         {
             writer.write("\t");
             if (returntypeisarray)
-                writer.write(outparamType + " RetArray = {NULL, 0, XSD_UNKNOWN};\n");
+                writer.write(outparamType + " RetArray = {NULL, 0, XSDC_UNKNOWN};\n");
             else if (!returntypeissimple)
             {
                 // for AnyType and complex types

Modified: webservices/axis/trunk/c/tests/auto_build/testcases/client/c/SimpleTypeArrayClient.c
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/tests/auto_build/testcases/client/c/SimpleTypeArrayClient.c?rev=393244&r1=393243&r2=393244&view=diff
==============================================================================
--- webservices/axis/trunk/c/tests/auto_build/testcases/client/c/SimpleTypeArrayClient.c (original)
+++ webservices/axis/trunk/c/tests/auto_build/testcases/client/c/SimpleTypeArrayClient.c Tue Apr 11 08:26:35 2006
@@ -46,7 +46,7 @@
     
     array_input.m_Array = array;
     array_input.m_Size  = 100;
-    array_input.m_Type  = XSD_INT;
+    array_input.m_Type  = XSDC_INT;
 
     input = Axis_Create_Type(0,0,0);
     input->item = &array_input;
@@ -62,10 +62,11 @@
     {
        returnValue = 0;
        for ( i = 0; i < 100; i++ )
-         printf ("item [%d] = %d\n",i,output->item->m_Array[i]);
+         printf ("item [%d] = %d\n",i,*output->item->m_Array[i]);
     }
     
     input->item = NULL;
+    
     Axis_Delete_Type(input,0,0);
     Axis_Delete_Type(output,0,0);