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 2007/03/12 16:45:21 UTC

svn commit: r517263 - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws: c/BeanParamWriter.java cpp/BeanParamWriter.java cpp/ParmHeaderFileWriter.java

Author: nadiramra
Date: Mon Mar 12 08:45:20 2007
New Revision: 517263

URL: http://svn.apache.org/viewvc?view=rev&rev=517263
Log:
AXISCPP-1028 - More efficient use of memory resources.

Modified:
    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/cpp/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java?view=diff&rev=517263&r1=517262&r2=517263
==============================================================================
--- 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 Mon Mar 12 08:45:20 2007
@@ -486,8 +486,8 @@
         CUtils.printMethodComment(writer, "Function to deserialize an object of type "  
                 + classname + ".");  
         
-        writer.write("int Axis_DeSerialize_" + classname
-                + "(" + classname + "* param, AXISCHANDLE pDZ)\n{\n");
+        writer.write("int Axis_DeSerialize_" + classname + "(" + classname 
+                + "* param, AXISCHANDLE pDZ)\n{\n");
 
         //=============================================================================
         // No attributes or elements to deserialize? Then deserialize extension and return.
@@ -507,7 +507,8 @@
 
         //=============================================================================
         // Deserialize attributes.
-        // Makes logic simpler to follow with slight duplication. TODO
+        // Actually, attribute deserialization takes place in same loop as elements
+        // in order to avoid duplication. But here, we put out a comment block.
         //=============================================================================        
         
         if (attributeParamCount > 0)
@@ -646,9 +647,13 @@
                 else
                     isPointerType = CUtils.isPointerType(attribs[i].getTypeName());
                 
-                if (attribs[i].getChoiceElement() || attribs[i].getAllElement()
-                        || attribs[i].isNillable() || isElementNillable(i) ||
-                        isElementOptional(i) || isPointerType)
+                if (attribs[i].isNillable() ||
+                        isElementNillable(i) ||
+                        isElementOptional(i) ||
+                        attribs[i].getChoiceElement() ||
+                        attribs[i].getAllElement() ||
+                        attribs[i].isOptional() ||
+                        isPointerType)                
                 {
                     writer.write(tab2 + "param->"
                             + attribs[i].getParamNameAsMember() + " = "

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java?view=diff&rev=517263&r1=517262&r2=517263
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java Mon Mar 12 08:45:20 2007
@@ -171,7 +171,7 @@
                     // Setter method
                     writer.write("void " + classname + "::\nset"
                             + methodName + "(" + properParamType  
-                            + " pInValue, bool deep)\n{\n");
+                            + " pInValue, bool deep, bool makeCopy)\n{\n");
 
                     writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
                     writer.write("\t\tdelete " + parameterName + ";\n");
@@ -179,7 +179,7 @@
 
                     writer.write("\tif (pInValue != NULL)\n");
                     writer.write("\t{\n");
-                    writer.write("\t\tif (deep)\n");
+                    writer.write("\t\tif (deep && makeCopy)\n");
                     writer.write("\t\t{\n");
                     
                     writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
@@ -215,7 +215,7 @@
                     
                     if((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()) 
                             && (isPointerType || attribs[i].getAllElement() || attribs[i].getChoiceElement()))
-                        writer.write(", bool deep");
+                        writer.write(", bool deep, bool makeCopy");
                     
                     writer.write(")\n{\n");
                     
@@ -227,7 +227,7 @@
                         
                         writer.write("\tif(InValue != NULL)\n");
                         writer.write("\t{\n");
-                        writer.write("\t\tif (deep)\n");
+                        writer.write("\t\tif (deep && makeCopy)\n");
                         writer.write("\t\t{\n");
                         writer.write("\t\t\t" + parameterName + " = new char[strlen(InValue) + 1];\n");
                         writer.write("\t\t\tstrcpy(" + parameterName + ", InValue);\n");
@@ -247,7 +247,7 @@
 
                         writer.write("\tif (InValue != NULL)\n");
                         writer.write("\t{\n");
-                        writer.write("\t\tif (deep)\n");
+                        writer.write("\t\tif (deep && makeCopy)\n");
                         writer.write("\t\t{\n");
                         writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
                         writer.write("\t\t\t*" + parameterName + " = *InValue;\n");
@@ -738,17 +738,13 @@
 
         //=============================================================================
         // Deserialize attributes.
-        // Makes logic simpler to follow with slight duplication. TODO
+        // Actually, attribute deserialization takes place in same loop as elements
+        // in order to avoid duplication. But here, we put out a comment block.
         //=============================================================================        
         
         if (attributeParamCount > 0)
             CUtils.printBlockComment(writer, "Deserialize attributes.");
-        
-        for (int i = 0; i < attributeParamCount; i++) 
-        {
             
-        }
-        
         //=============================================================================
         // Deserialize attributes and elements.
         //=============================================================================        
@@ -876,82 +872,46 @@
                 else
                     isPointerType = CUtils.isPointerType(attribs[i].getTypeName());
 
+                String typeName = attribs[i].getTypeName();
+                String baseTypeName = null;
+                if (type.isSimpleType())
+                    baseTypeName = CUtils.getclass4qname (type.getBaseType ());
+                else
+                    baseTypeName = typeName;
+                
+                if( isPointerType)
+                {
+                    writer.write(tab2 + typeName + " pValue" + i + " = pIWSDZ->" +
+                            CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
+                            "(\"" + soapTagName + "\", 0);\n");
+                }
+                else
+                {
+                    writer.write(tab2 + typeName + " * pValue" + i + " = pIWSDZ->" +
+                            CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
+                            "(\"" + soapTagName + "\", 0);\n");
+                }
+                
+                // All these fields are pointers, so we should be able to pass ownership of 
+                // deserialized object to object instance.
                 if (attribs[i].isNillable() ||
                         isElementNillable(i) ||
                         isElementOptional(i) ||
+                        attribs[i].getChoiceElement() ||
+                        attribs[i].getAllElement() ||
+                        attribs[i].isOptional() ||
                         isPointerType)
                 {
-                    if (attribs[i].getChoiceElement() && isElementNillable(i) && !isPointerType)
-                    {
-                        writer.write(tab2 + "param->"
-                                + attribs[i].getParamNameAsMember()
-                                + " = (" + attribs[i].getTypeName()
-                                + "**)(" + attribs[i].getTypeName()
-                                +"*)new " +attribs[i].getTypeName() + ";\n");
-                        
-                        writer.write(tab2 + "*(param->"
-                                + attribs[i].getParamNameAsMember() + ") = pIWSDZ->"
-                                + CUtils.getParameterGetValueMethodName(
-                                        attribs[i].getTypeName(), attribs[i].isAttribute()) + "( \""
-                                + soapTagName + "\",0);\n");
-                    }
-                    else
-                    {
-                        String typeName = attribs[i].getTypeName();
-                        String baseTypeName = null;
-                        if (type.isSimpleType())
-                            baseTypeName = CUtils.getclass4qname (type.getBaseType ());
-                        else
-                            baseTypeName = typeName;
-                        
-                        if( isPointerType)
-                        {
-                            writer.write(tab2 + typeName + " pValue" + i + " = pIWSDZ->" +
-                                    CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
-                                    "( \"" + soapTagName + "\", 0);\n");
-                        }
-                        else
-                        {
-                            writer.write(tab2 + typeName + " *    pValue" + i + " = pIWSDZ->" +
-                                    CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
-                                    "( \"" + soapTagName + "\", 0);\n");
-                        }
-                        
-                        writer.write(tab2 + "if( pValue" + i + " == NULL)\n");
-                        writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                        writer.write(tab2 + "else\n");
-                        writer.write(tab2 + "{\n");
-                        
-                        writer.write(tab2 + "\tparam->set" + attribs[i].getMethodName() + " (pValue" + i + ");\n");
-                        writer.write(tab2 + "\tAxis::AxisDelete( (void *) pValue" + i + ", " 
-                                + CUtils.getXSDTypeForBasicType( baseTypeName) + ");\n");
-                        writer.write(tab2 + "}\n");
-                    }
+                    writer.write(tab2 + "param->set" + attribs[i].getMethodName() 
+                            + "(pValue" + i + ", true, false);\n");
                 } 
-                else if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
-                {
-                    writer.write(tab2 + "param->"
-                            + attribs[i].getParamNameAsMember() + " = pIWSDZ->"
-                            + CUtils.getParameterGetValueMethodName(
-                                    attribs[i].getTypeName(), attribs[i].isAttribute()) + "( \""
-                            + soapTagName + "\",0);\n");
-//                    writer.write(tab2 + "param->__axis_deepcopy_"  + attribs[i].getParamNameAsMember()
-//                            + " = true;\n");
-                }
                 else
-                {
-                    String elementNameToSearchFor = attribs[i].isAttribute()? attribs[i].getParamNameAsSOAPString():attribs[i].getElementNameAsSOAPString();
-                    
-                    writer.write(tab2 + attribs[i].getTypeName() + " * "
-                            + attribs[i].getParamNameAsMember() + " = NULL;\n");
-                    writer.write(tab2 + "if ((" + attribs[i].getParamNameAsMember() + " = pIWSDZ->"
-                            + CUtils.getParameterGetValueMethodName(
-                                    attribs[i].getTypeName(), attribs[i].isAttribute()) + "( \""
-                            + elementNameToSearchFor + "\",0)) != NULL)\n");
+                {   
+                    writer.write(tab2 + "if (pValue" + i + ")\n");
                     writer.write(tab2 + "{\n");
-                    writer.write(tab2 + "\tparam->set"
-                            + attribs[i].getMethodName() + "(* " + attribs[i].getParamNameAsMember() + " );\n");
-                    writer.write(tab2 + "\tAxis::AxisDelete( (void *) " + attribs[i].getParamNameAsMember() + ", " + CUtils.getXSDTypeForBasicType( attribs[i].getTypeName()) + ");\n");
+                    writer.write(tab2 + "\tparam->set" + attribs[i].getMethodName() + "(*pValue" + i + ");\n");
+                    writer.write(tab2 + "\tAxis::AxisDelete((void *)pValue" + i 
+                            + ", " + CUtils.getXSDTypeForBasicType( attribs[i].getTypeName()) + ");\n");
                     writer.write(tab2 + "}\n");                        
                 }
                 
@@ -1036,11 +996,11 @@
         writer.write("void Axis_Delete_" + classname + "(" + classname + "* param, int nSize)\n");
         writer.write("{\n");
         
-        writer.write("\t/* If null just return */\n");
+        writer.write("\t// If null just return.\n");
         writer.write("\tif (!param)\n");
         writer.write("\t\treturn;\n\n");
         
-        writer.write("\t/* Reclaim array objects if array */\n");
+        writer.write("\t// Reclaim array objects if array.\n");
         writer.write("\tif (nSize > 0)\n");
         writer.write("\t{\n");
         writer.write("\t\tfor (int count = 0 ; count < nSize ; count++ )\n");
@@ -1215,7 +1175,6 @@
             CUtils.printMethodComment(writer, "Method to initialize objects of class " + classname + ".");
             
             writer.write("void " + classname + "::\nreset()\n{\n");
-            writer.write("\t/*do not allocate memory to any pointer members here\n\t because deserializer will allocate memory anyway. */\n");
             
             int anyCounter = 0;
 
@@ -1290,8 +1249,7 @@
                 writer.write(classname + "::\n~" + classname + "() throw ()\n{\n");
             else
                 writer.write(classname + "::\n~" + classname + "()\n{\n");
-            
-            writer.write("\t/*delete any pointer and array members here*/\n");
+
             int anyCounter = 0;
             
             for(int i = 0; i< attribs.length;i++)

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java?view=diff&rev=517263&r1=517262&r2=517263
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java Mon Mar 12 08:45:20 2007
@@ -416,7 +416,7 @@
                                 || isPointerType 
                                 || attribs[i].getChoiceElement() 
                                 || attribs[i].getAllElement()))                
-                    writer.write(", bool deep = true");
+                    writer.write(", bool deep=true, bool makeCopy=true");
                     
                 writer.write(");\n");
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org