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/05 19:18:33 UTC

svn commit: r391679 [1/2] - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c: ./ literal/

Author: nadiramra
Date: Wed Apr  5 10:18:30 2006
New Revision: 391679

URL: http://svn.apache.org/viewcvs?rev=391679&view=rev
Log:
Remove duplication as was done in C++ generation code.

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

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/AllParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/AllParamWriter.java?rev=391679&r1=391678&r2=391679&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/AllParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/AllParamWriter.java Wed Apr  5 10:18:30 2006
@@ -20,9 +20,13 @@
  * @author Susantha Kumara(susantha@opensource.lk, skumara@virtusa.com)
  * @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
  */
+
 package org.apache.axis.wsdl.wsdl2ws.c;
 import java.util.Iterator;
 
+import javax.xml.namespace.QName;
+
+import org.apache.axis.wsdl.wsdl2ws.CUtils;
 import org.apache.axis.wsdl.wsdl2ws.SourceWriter;
 import org.apache.axis.wsdl.wsdl2ws.WSDL2Ws;
 import org.apache.axis.wsdl.wsdl2ws.WrapperFault;
@@ -35,7 +39,7 @@
  */
 public class AllParamWriter implements SourceWriter
 {
-    protected WebServiceContext wscontext;
+    private WebServiceContext wscontext;
 
     /**
      * @param wscontext
@@ -51,40 +55,44 @@
      */
     public void writeSource() throws WrapperFault
     {
-        Iterator enu = wscontext.getTypemap().getTypes().iterator();
+        Iterator types = wscontext.getTypemap().getTypes().iterator();
         Type type = null;
-        while (enu.hasNext())
+        while (types.hasNext())
         {
             try
             {
-                type = (Type) enu.next();
+                type = (Type) types.next();
                 if (type.isArray())
                 {
                     if (WSDL2Ws.verbose)
                         System.out.println("Array writer called ......");
-                    ArrayParamWriter writer = (new ArrayParamWriter(wscontext, type));
-                    if (!writer.isSimpleTypeArray())
-                        writer.writeSource();
+                    (new ArrayParamWriter(wscontext, type)).writeSource();
                 }
                 /* TODO check whether this type is referenced or not. Synthesize only if  reference
-                 * But of cause that depends on the commandline option too  */
+                 * But of course that depends on the commandline option too  */
                 else if (type.getLanguageSpecificName().startsWith(">"))
                 {
                     /* TODO do some processing to this type before synthesizing to remove ">" charactors.
                      * And then it should also be synthesized if commandline option says to */
-                    System.out.println("ignoring anonymous type " + type.getLanguageSpecificName() + "\n");
+                    if(WSDL2Ws.verbose)
+                    {                          
+                        System.out.println(
+                                "ignoring anonymous type " + type.getLanguageSpecificName() + "\n");
+                    }
                 }
                 else
                 {
                     if (WSDL2Ws.verbose)
                         System.out.println("struct writer called ......");
+                    
                     (new BeanParamWriter(wscontext, type)).writeSource();
                     (new ParmHeaderFileWriter(wscontext, type)).writeSource();
                 }
             }
             catch (Exception e)
             {
-                System.out.println("Error occurred generating code for " + type.getLanguageSpecificName()
+                System.out.println(
+                        "Error occurred generating code for " + type.getLanguageSpecificName()
                             + ". Other classes will continue to be generated.");
                 e.printStackTrace();
             }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ArrayParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ArrayParamWriter.java?rev=391679&r1=391678&r2=391679&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ArrayParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ArrayParamWriter.java Wed Apr  5 10:18:30 2006
@@ -153,17 +153,9 @@
              *    <xsd:attribute name="att_kind" type="tns:Kind" />
              * </xsd:complexType>
              */
-            //writer.write("\t"+attribs[0].getTypeName()+"* m_Array;\n\tint m_Size;\n} "+classname+";\n\n");
-            if (attribs[0].isSimpleType())
-            {
-                throw new WrapperFault("Error : no need to synthesis arrays for simple types");
-            }
-            else
-            {
-                writer.write("\tstruct " + attribs[0].getTypeName()
+            writer.write("\tstruct " + attribs[0].getTypeName()
                         + "Tag * m_Array;\n\tint m_Size;\n\tAXISC_XSD_TYPE m_Type;\n} "
                         + classname + ";\n\n");
-            }
         }
         catch (IOException e)
         {

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=391679&r1=391678&r2=391679&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 Wed Apr  5 10:18:30 2006
@@ -56,46 +56,7 @@
     protected void writeGlobalCodes() throws WrapperFault
     {
         try
-        {
-            HashSet typeSet = new HashSet();
-            String typeName;
-            for (int i = 0; i < attribs.length; i++)
-            {
-                if (!attribs[i].isSimpleType())
-                {
-                    typeSet.add(attribs[i].getTypeName());
-                }
-            }
-            Iterator itr = typeSet.iterator();
-            while (itr.hasNext())
-            {
-                typeName = itr.next().toString();
-                writer.write(
-                    "extern int Axis_DeSerialize_"
-                        + typeName
-                        + "("
-                        + typeName
-                        + "* param, IWrapperSoapDeSerializer* pDZ);\n");
-                writer.write(
-                    "extern void* Axis_Create_"
-                        + typeName
-                        + "("
-                        + typeName
-                        + "* pObj, bool bArray, int nSize);\n");
-                writer.write(
-                    "extern void Axis_Delete_"
-                        + typeName
-                        + "("
-                        + typeName
-                        + "* param, bool bArray, int nSize);\n");
-                writer.write(
-                    "extern int Axis_Serialize_"
-                        + typeName
-                        + "("
-                        + typeName
-                        + "* param, IWrapperSoapSerializer* pSZ, bool bArray);\n");
-                writer.write("extern int Axis_GetSize_" + typeName + "();\n\n");
-            }
+        {           
             writeSerializeGlobalMethod();
             writeDeSerializeGlobalMethod();
             writeCreateGlobalMethod();
@@ -114,17 +75,9 @@
     protected void writeGetSizeGlobalMethod() throws IOException
     {
         writer.write("/**\n");
-        writer.write(
-            " * This static method gives the size of "
-                + classname
-                + " type of object\n");
+        writer.write(" * This static method gives the size of " + classname + " type of object\n");
         writer.write(" */\n");
-        writer.write(
-            "int Axis_GetSize_"
-                + classname
-                + "()\n{\n\treturn sizeof("
-                + classname
-                + ");\n}\n");
+        writer.write("int Axis_GetSize_" + classname + "()\n{\n\treturn sizeof(" + classname + ");\n}\n");
     }
 
     /**
@@ -134,340 +87,624 @@
     private void writeSerializeGlobalMethod() throws IOException, WrapperFault
     {
         writer.write("/**\n");
-        writer.write(
-            " * This static method serialize a "
-                + classname
-                + " type of object\n");
+        writer.write(" * This static method serializes a " + classname + " type of object\n");
         writer.write(" */\n");
-
-        writer.write(
-            "int Axis_Serialize_"
-                + classname
-                + "("
-                + classname
-                + "* param, IWrapperSoapSerializer* pSZ, bool bArray)\n{\n");
+        writer.write("int Axis_Serialize_" + classname
+                + "(" + classname + "* param, AXISCHANDLE pSZ, AxiscBool bArray)\n{\n");
+        
         if (attribs.length == 0)
         {
-            //nothing to print if this is simple type we have inbuild types
-            System.out.println(
-                "Possible error in class "
-                    + classname
-                    + ": class with no attributes....................");
-            writer.write("\t}\n\n");
+            writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ,\">\", NULL);\n");
+
+            if (extensionBaseAttrib != null)
+            {
+                String typeName = extensionBaseAttrib.getTypeName();
+                writer.write("\taxiscSerializeAsChardata(pSZ,(void*)");
+                
+                if (!CUtils.isPointerType(typeName))
+                    writer.write("&");
+                
+                writer.write("(param->"
+                        + extensionBaseAttrib.getParamNameAsMember()
+                        + "), "
+                        + CUtils.getXSDTypeForBasicType(typeName) + ");\n");
+            } 
+            else
+            {
+                System.out.println("Possible error in class " + classname
+                        + ": class with no attributes....................");
+            }
+            
+            writer.write("\treturn AXISC_SUCCESS;\n");
+            writer.write("}\n\n");
             return;
         }
-        writer.write("\tconst AxisChar* sPrefix;\n");
-        writer.write("\tif (bArray)\n");
-        writer.write("\t{\n");
-        writer.write(
-            "\t\tpSZ->_functions->serializeStartElementOfType(pSZ->_object, Axis_TypeName_"
-                + classname
-                + ", 0, 0);\n");
-        writer.write("\t}\n");
-        writer.write("\telse\n");
-        writer.write("\t{\n");
-        writer.write(
-            "\t\tsPrefix = pSZ->_functions->getNamespacePrefix(pSZ->_object, Axis_URI_"
-                + classname
-                + ");\n");
-        writer.write(
-            "\t\tpSZ->_functions->serializeStartElementOfType(pSZ->_object, Axis_TypeName_"
-                + classname
-                + ", Axis_URI_"
-                + classname
-                + ", sPrefix);\n");
+
+        String arrayType;
+        /*
+         * A type does not know whether it is used as a nillable parameter So
+         * this may not be the appropriate place to do this
+         */
+        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\taxiscSerializeIWrapperSoapSerializer(pSZ, \">\", NULL);\n");
+        writer.write("\t\treturn AXISC_SUCCESS;\n");
         writer.write("\t}\n\n");
-        String arrayType = null;
-        for (int i = 0; i < attribs.length; i++)
+
+        writer.write("\tif (!bArray)\n\t{\n");
+        writer.write("\t\tconst AxiscChar* sPrefix = axiscGetNamespacePrefixIWrapperSoapSerializer(pSZ,Axis_URI_" + classname + ", &blnIsNewPrefix);\n");
+        writer.write("\t\tif (blnIsNewPrefix)\n\t\t{\n");
+        writer.write("\t\t\taxiscSerializeIWrapperSoapSerializer(pSZ,\" xmlns:\", sPrefix, \"=\\\"\",\n");
+        writer.write("\t\t\t\tAxis_URI_" + classname + ", \"\\\"\", NULL );\n");
+        writer.write("\t\t}\n");
+        writer.write("\t}\n");
+
+        
+        writer.write("\t/* If there are any attributes serialize them. If there aren't then close the tag */\n");
+        for (int i = 0; i < attributeParamCount; i++)
         {
-            if (attribs[i].isArray())
+            if (attribs[i].isArray() || !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
+            {
+                throw new WrapperFault("Error : an attribute is not basic type");
+            }
+            else
             {
-                if (attribs[i].isSimpleType())
+                //remove _Ref sufix and _ prefix in SOAP tag name
+                String soapTagName = attribs[i].getParamName();
+                if (soapTagName.lastIndexOf("_Ref") > -1)
+                    soapTagName = soapTagName.substring(0, soapTagName.lastIndexOf("_Ref"));
+                
+                if (soapTagName.charAt(0) == '_')
+                    soapTagName = soapTagName.substring(1, soapTagName.length());
+
+                Type type = attribs[i].getType();
+                boolean isPointerType = false;
+                String basicType = null;
+                
+                if (!attribs[i].isSimpleType() && type.isSimpleType())
                 {
-                    writer.write(
-                        "\tpSZ->_functions->serializeBasicArray(pSZ->_object, (Axis_Array*)(&param->"
-                            + attribs[i].getParamName()
-                            + "),"
-                            + CUtils.getXSDTypeForBasicType(
-                                attribs[i].getTypeName())
-                            + ", \""
-                            + attribs[i].getParamName()
-                            + "\");\n");
+                    basicType = CUtils.getclass4qname(attribs[i].getType().getBaseType());
+                    isPointerType = CUtils.isPointerType(CUtils.getclass4qname(type.getBaseType())); 
                 }
                 else
                 {
-                    String elm = attribs[i].getParamName();
-                    if (attribs[i].isReference())
-                        elm = attribs[i].getTypeName();
-                    arrayType = attribs[i].getTypeName();
-                    writer.write(
-                        "\tpSZ->_functions->serializeCmplxArray(pSZ->_object, (Axis_Array*)(&param->"
-                            + attribs[i].getParamName()
-                            + "),\n");
-                    writer.write(
-                        "\t\t(void*) Axis_Serialize_"
-                            + arrayType
-                            + ", (void*) Axis_Delete_"
-                            + arrayType
-                            + ", (void*) Axis_GetSize_"
-                            + arrayType
-                            + ",\n");
-                    writer.write(
-                        "\t\t\""
-                            + elm
-                            + "\", Axis_TypeName_"
-                            + arrayType
-                            + ");\n");
+                    basicType = attribs[i].getTypeName();
+                    isPointerType = CUtils.isPointerType(attribs[i].getTypeName());
+                }
+                
+                if (isPointerType)
+                {
+                    writer.write("\tif (0 != param->" + attribs[i].getParamNameAsMember() + ")\n");
+                    writer.write("\t\taxiscSerializeAsAttribute(pSZ,\""
+                            + soapTagName + "\", 0, (void*)(param->"
+                            + attribs[i].getParamNameAsMember() + "), "
+                            + CUtils.getXSDTypeForBasicType(basicType) + ");\n");
+                }
+                else
+                {
+                    writer.write("\t\taxiscSerializeAsAttribute(pSZ,\""
+                            + soapTagName
+                            + "\", 0, (void*)&(param->"
+                            + attribs[i].getParamNameAsMember()
+                            + "), "
+                            + CUtils.getXSDTypeForBasicType(attribs[i].getTypeName()) + ");\n");
+                }
+                
+                if (!attribs[i].isOptional())
+                {
+                    /* This avoid segmentation fault at runtime */
+                    /*
+                     * writer.write("\telse\n");
+                     * writer.write("\t\tAXISTRACE1(\"The mandatory attribute
+                     * "+attribs[i].getParamName()+" is not set\",
+                     * CRITICAL);\n");
+                     */
                 }
             }
+        }
+        
+        if (type.isFault())
+        {
+            writer.write("\tif(Axis_URI_" + classname + ")\n\t{\n");
+            writer.write("\t\tAxiscBool blnIsNewPrefix = xsdc_boolean_false;\n");
+            writer.write("\t\tconst AxisChar* sPrefix = axiscGetNamespacePrefixIWrapperSoapSerializer(pSZ,Axis_URI_"
+                        + classname + ", &blnIsNewPrefix);\n");
+            writer.write("\t\taxiscSerializeIWrapperSoapSerializer(pSZ, \" xmlns:\", sPrefix, \"=\\\"\",");
+            writer.write("Axis_URI_" + classname + ", \" " + " \\\"\"");
+            writer.write(", NULL);\n\t}\n");
+        }               
+        
+        writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ, \">\", 0);\n");
+        if (extensionBaseAttrib != null)
+        {
+            String typeName = extensionBaseAttrib.getTypeName(); 
+            if( typeName != null)
+            {
+                writer.write("\taxiscSerializeAsChardata(pSZ, (void*)");
+                if (!CUtils.isPointerType(typeName))
+                    writer.write("&");
+
+                writer.write("(param->" + extensionBaseAttrib.getParamNameAsMember() + "), "
+                        + CUtils.getXSDTypeForBasicType(typeName) + ");\n");
+            }
+        }
+
+        writer.write("\n\t/* then serialize elements if any*/\n");
+
+        boolean firstIfWritten = false;
+        int anyCounter = 0; //counter for any types.
+        
+        for (int i = attributeParamCount; i < attribs.length; i++)
+        {
+            String namespace = "";
+            if (attribs[i].getNsQualified())
+                namespace = "Axis_URI_" + classname;
             else
-                if (attribs[i].isSimpleType())
+                namespace = "NULL";
+            
+            // if the attribute is a choice following should do
+            if (attribs[i].getChoiceElement())
+            {
+                if (!firstIfWritten)
+                {
+                    writer.write("\tif");
+                    firstIfWritten = true;
+                } 
+                else
+                    writer.write("\telse if");
+
+                writer.write("(param->" + attribs[i].getParamNameAsMember() + ")\n\t{\n\t");
+            }
+ 
+            //if the attribute is a 'all' following should do
+            if (attribs[i].getAllElement())
+                if (attribs[i].getMinOccurs() == 0)
+                    writer.write("\tif(param->" + attribs[i].getParamNameAsMember() + ")\n\t{\n\t");
+             
+            if (attribs[i].isAnyType())
+            {
+                anyCounter += 1;
+                writer.write("\taxiscSerializeAnyObject(pSZ, param->any" + Integer.toString(anyCounter) +");\n");
+            }
+            else if (attribs[i].isArray())
+            {
+                if (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                 {
-                    if (attribs[i].isAttribute())
+                    String baseTypeName = null;
+                    if (!attribs[i].isSimpleType() && attribs[i].getType().isSimpleType())
+                        baseTypeName = CUtils.getclass4qname(attribs[i].getType().getBaseType());
+                    else
+                        baseTypeName = attribs[i].getTypeName();
+                    
+                    writer.write("\taxiscSerializeBasicArray(pSZ, (const Axisc_Array *)param->" + attribs[i].getParamName()
+                        + ", " + namespace + ","
+                        + CUtils.getXSDTypeForBasicType(baseTypeName) + ", \""
+                        + attribs[i].getParamNameAsSOAPElement() + "\");\n");
+                }
+                else
+                {
+                    arrayType = attribs[i].getTypeName();
+                    
+                    if (attribs[i].getNsQualified())
+                        namespace = "Axis_URI_" + arrayType;
+                    else
+                        namespace = "NULL";
+                    
+                    writer.write("\taxiscSerializeCmplxArray(pSZ, param->"
+                                    + attribs[i].getParamNameAsMember() + ",\n");
+                    writer.write("\t\t\t\t\t\t (void*) Axis_Serialize_" + arrayType + ",\n");
+                    writer.write("\t\t\t\t\t\t (void*) Axis_Delete_" + arrayType + ",\n");
+                    writer.write("\t\t\t\t\t\t (void*) Axis_GetSize_" + arrayType + ",\n");
+                    writer.write("\t\t\t\t\t\t \""
+                            + attribs[i].getElementNameAsString() + "\", " + namespace + ");\n");
+                }
+            }
+            else if (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
+            {
+                String typeName = attribs[i].getTypeName();
+                String baseTypeName = null;
+                if (attribs[i].getType().isSimpleType())
+                    baseTypeName = CUtils.getclass4qname (attribs[i].getType().getBaseType ());
+                else
+                    baseTypeName = typeName;
+                
+                if (attribs[i].isOptional())
+                    writer.write("\tif (param->" + attribs[i].getParamNameWithoutSymbols() + " != NULL)\n\t\t{\n\t");
+                
+                if (CUtils.isPointerType(baseTypeName))
+                {
+                    writer.write("\t\taxiscSerializeAsElement(pSZ, \""
+                            + attribs[i].getSOAPElementNameAsString()
+                            + "\", " + namespace
+                            + ", (void*)(param->" + attribs[i].getParamNameWithoutSymbols() + "), "
+                            + CUtils.getXSDTypeForBasicType(baseTypeName) + ");\n");
+                }
+                else if (attribs[i].getChoiceElement()
+                            || attribs[i].getAllElement()
+                            || isElementNillable(i) || isElementOptional(i))
+                {
+                    // If the simple type is a choice it is handled
+                    // as a pointer variable. These variables should be defined
+                    // as pointers in the header file. This is the same in 'all' element
+                    
+                    if (((attribs[i].getChoiceElement())
+                            && (isElementNillable(i)))
+                            && !(attribs[i].getTypeName().equals("xsdc__string")) )
                     {
-                        if (attribs[i].isOptional())
-                        {
-                            writer.write(
-                                "\tif(0 != param->"
-                                    + attribs[i].getParamName()
-                                    + ")\n");
-                            writer.write(
-                                "\t\tpSZ->_functions->serializeAsAttribute(pSZ->_object, \""
-                                    + attribs[i].getParamName()
-                                    + "\", 0, (void*)(param->"
-                                    + attribs[i].getParamName()
-                                    + "), "
-                                    + CUtils.getXSDTypeForBasicType(
-                                        attribs[i].getTypeName())
-                                    + ");\n");
-                        }
-                        else
-                        {
-                            writer.write(
-                                "\tpSZ->_functions->serializeAsAttribute(pSZ->_object, \""
-                                    + attribs[i].getParamName()
-                                    + "\", 0, (void*)&(param->"
-                                    + attribs[i].getParamName()
-                                    + "), "
-                                    + CUtils.getXSDTypeForBasicType(
-                                        attribs[i].getTypeName())
-                                    + ");\n");
-                        }
+                        writer.write("\t\taxiscSerializeAsElement(pSZ, \""
+                                + attribs[i].getSOAPElementNameAsString() + "\", " + namespace
+                                + ", (void*)(*(param->" + attribs[i].getParamNameWithoutSymbols()
+                                + ")), " + CUtils.getXSDTypeForBasicType(baseTypeName) + ");\n");
                     }
                     else
                     {
-                        writer.write(
-                            "\tpSZ->_functions->serializeAsElement(pSZ->_object, \""
-                                + attribs[i].getParamName()
-                                + "\", (void*)&(param->"
-                                + attribs[i].getParamName()
-                                + "), "
-                                + CUtils.getXSDTypeForBasicType(
-                                    attribs[i].getTypeName())
-                                + ");\n");
-                    }
-                }
+                        writer.write("\t\taxiscSerializeAsElement(pSZ, \""
+                                + attribs[i].getSOAPElementNameAsString() + "\", " + namespace
+                                + ", (void*)(param->" + attribs[i].getParamNameWithoutSymbols()
+                                + "), " + CUtils.getXSDTypeForBasicType(baseTypeName) + ");\n");
+                    }    
+                }                           
                 else
                 {
-                    //if complex type
-                    writer.write(
-                        "\tAxis_Serialize_"
-                            + attribs[i].getTypeName()
-                            + "(param->"
-                            + attribs[i].getParamName()
-                            + ", pSZ, false);\n");
+                    writer.write("\taxiscSerializeAsElement(pSZ, \""
+                            + attribs[i].getSOAPElementNameAsString() + "\", " + namespace
+                            + ", (void*)&(param->" + attribs[i].getParamNameWithoutSymbols()
+                            + "), " + CUtils.getXSDTypeForBasicType(baseTypeName) + ");\n");
+                }
+                
+                if (attribs[i].isOptional())
+                    writer.write("\t\t}\n");
+            }
+            else
+            {
+                //if complex type
+                String elm = attribs[i].getParamName();
+                if (elm.lastIndexOf("_Ref") > -1)
+                    elm = elm.substring(0, elm.lastIndexOf("_Ref"));
+
+                if (elm.charAt(0) == '_')
+                    elm = elm.substring(1, elm.length());
+                
+                if (attribs[i].isReference())
+                    elm = attribs[i].getTypeName();
+                
+                if (attribs[i].isOptional())
+                    writer.write("\tif (param->" + attribs[i].getParamName() + " != NULL)\n\t{\n");
+                
+                if (attribs[i].getNsQualified())
+                {
+                    writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ, \"<\", axiscGetNamespacePrefixIWrapperSoapSerializer(pSZ, \""
+                                    + type.getName().getNamespaceURI()
+                                    + "\"), \":\", \"" + elm + "\", 0);\n");
+                    writer.write("\tAxis_Serialize_" + attribs[i].getTypeName()
+                            + "(param->" + attribs[i].getParamName() + ", pSZ);\n");
+                    writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ, \"</\", axiscGetNamespacePrefixIWrapperSoapSerializer(pSZ, \""
+                                    + type.getName().getNamespaceURI()
+                                    + "\"), \":\", \"" + elm + "\", \">\", 0);\n");
                 }
+                else
+                {
+                    writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ, \"<" + elm + "\", 0);\n");
+                    writer.write("\tAxis_Serialize_" + attribs[i].getTypeName()
+                            + "(param->" + attribs[i].getParamName() + ", pSZ);\n");
+                    writer.write("\taxiscSerializeIWrapperSoapSerializer(pSZ, \"</" + elm + "\", \">\", 0);\n");
+                }
+                
+                if (attribs[i].isOptional())
+                    writer.write("\t}\n");
+            }
+
+            //end if choice element
+
+            if (attribs[i].getChoiceElement())
+                writer.write("\t}\n");
+            
+            if (attribs[i].getAllElement())
+                if (attribs[i].getMinOccurs() == 0)
+                    writer.write("\t}\n");
         }
-        writer.write(
-            "\n\tpSZ->_functions->serializeEndElementOfType(pSZ->_object, Axis_TypeName_"
-                + classname
-                + ");\n");
-        writer.write("\treturn AXIS_SUCCESS;\n");
-        writer.write("}\n\n");
 
+        writer.write("\n\tif (!bArray && blnIsNewPrefix)\n");
+        writer.write("\t\taxiscRemoveNamespacePrefix(pSZ, Axis_URI_" + classname + ");\n\n");
+        
+        writer.write("\treturn AXISC_SUCCESS;\n");
+        writer.write("}\n\n");     
     }
 
     /**
      * @throws IOException
      * @throws WrapperFault
      */
-    private void writeDeSerializeGlobalMethod()
-        throws IOException, WrapperFault
+    private void writeDeSerializeGlobalMethod() throws IOException, WrapperFault
     {
         writer.write("/**\n");
-        writer.write(
-            " * This static method deserialize a "
-                + classname
-                + " type of object\n");
+        writer.write(" * This static method deserializes a " + classname + " type of object\n");
         writer.write(" */\n");
-
-        writer.write(
-            "int Axis_DeSerialize_"
-                + classname
-                + "("
-                + classname
-                + "* param, IWrapperSoapDeSerializer* pDZ)\n{\n");
+        writer.write("int Axis_DeSerialize_" + classname
+                + "(" + classname + "* param, AXISCHANDLE pDZ)\n{\n");
+        
         if (attribs.length == 0)
         {
-            System.out.println(
-                "Possible error in class "
-                    + classname
-                    + ": class with no attributes....................");
-            writer.write("\t}\n\n");
+            if (extensionBaseAttrib != null)
+            {
+                writer.write("\taxiscGetChardataAs(pDZ, (void*)&(param->"
+                        + extensionBaseAttrib.getParamNameAsMember() + "), "
+                        + CUtils.getXSDTypeForBasicType(extensionBaseAttrib.getTypeName()) + ");\n");
+            }
+            else
+            {
+                System.out.println("Possible error in class " + classname
+                        + ": class with no attributes....................");
+            }
+
+            writer.write("\treturn AXISC_SUCCESS;\n");
+            writer.write("}\n\n");
             return;
-        }
-        boolean aretherearrayattribs = false;
+        }  
+
+        String arrayType = null;
+        boolean peekCalled = false;
+        boolean firstIfWritten = false;
+        boolean foundAll = false;
+        int anyCounter = 0; //counter for any types.
+        int arrayCount = 0;
+        
         for (int i = 0; i < attribs.length; i++)
-        {
-            if (attribs[i].isArray())
+        {       
+            //if the attribute is a 'choice' construct we have to peek and make
+            // the choice - TODO
+
+            //if the attribute is a 'all' construct we have to check Min
+            // occures TODO
+
+            
+            if (attribs[i].isAnyType())
             {
-                aretherearrayattribs = true;
-                break;
+                anyCounter +=1;
+                writer.write("\tparam->any" + anyCounter + " = axiscGetAnyObject(pDZ);\n");
             }
-        }
-        if (aretherearrayattribs)
-        {
-            writer.write("\tAxis_Array array;\n");
-        }
-        String containedType = null;
-        for (int i = 0; i < attribs.length; i++)
-        {
-            if (attribs[i].isArray())
+            else if (attribs[i].isArray())
             {
-                containedType = attribs[i].getTypeName();
-                if (attribs[i].isSimpleType())
-                {
-                    writer.write(
-                        "\tarray = pDZ->_functions->getBasicArray(pDZ->_object, "
-                            + CUtils.getXSDTypeForBasicType(containedType)
-                            + ",0,0);\n");
-                    writer.write(
-                        "\tmemcpy(&(param->"
-                            + attribs[i].getParamName()
-                            + "), &array, sizeof(Axis_Array));\n");
+                writer.write("\n\t{\n"); // start new variable scope
+                arrayCount++;
+                
+                if (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
+                {
+                    String baseTypeName = null;
+                    if (!attribs[i].isSimpleType() && attribs[i].getType().isSimpleType())
+                        baseTypeName = CUtils.getclass4qname(attribs[i].getType().getBaseType());
+                    else
+                        baseTypeName = attribs[i].getTypeName();
+                    
+                    writer.write("\tAxisc_Array *array" + arrayCount + "= axiscGetBasicArrayIWrapperSoapDeSerializer(pDZ, " 
+                            + CUtils.getXSDTypeForBasicType(baseTypeName) + ", \"" 
+                            + attribs[i].getParamNameAsSOAPElement()
+                            + "\",0);\n");
+                    
+                    // TODO MEMORY MANAGEMENT
                 }
                 else
                 {
-                    writer.write(
-                        "\tarray = pDZ->_functions->getCmplxArray(pDZ->_object, (void*)Axis_DeSerialize_"
-                            + containedType
-                            + "\n\t\t, (void*)Axis_Create_"
-                            + containedType
-                            + ", (void*)Axis_Delete_"
-                            + containedType
-                            + "\n\t\t, (void*)Axis_GetSize_"
-                            + containedType
-                            + ", Axis_TypeName_"
-                            + containedType
-                            + ", Axis_URI_"
-                            + containedType
-                            + ");\n");
-                    writer.write(
-                        "\tmemcpy(&(param->"
-                            + attribs[i].getParamName()
-                            + "), &array, sizeof(Axis_Array));\n");
-                }
+                    arrayType = attribs[i].getTypeName();
+                    writer.write("\tAxisc_Array array" + arrayCount + " = axiscGetCmplxArrayCall(pDZ," 
+                            + "&array" + arrayCount + ","
+                            + "(void*)Axis_DeSerialize_"  + arrayType
+                            + "\n\t\t, (void*)Axis_Create_" + arrayType
+                            + ", (void*)Axis_Delete_" + arrayType
+                            + "\n\t\t, (void*)Axis_GetSize_" + arrayType
+                            + ", \""  + attribs[i].getElementNameAsString()
+                            + "\", Axis_URI_" + arrayType + ");\n");
+                }
+                
+                writer.write("\tmemcpy(&(param->" + attribs[i].getParamName()
+                        + "), &array" + arrayCount + ", sizeof(Axisc_Array));\n");
+                
+                writer.write("\n\t}\n"); // end new variable scope
             }
-            else
-                if (attribs[i].isSimpleType())
+            else if ((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
+            {
+                writer.write("\n\t{\n"); // start new variable scope
+                
+                String soapTagName = (attribs[i].isAttribute() ? attribs[i].getParamName() : attribs[i].getElementNameAsString());
+                if (soapTagName.lastIndexOf("_Ref") > -1)
+                    soapTagName = soapTagName.substring(0, soapTagName.lastIndexOf("_Ref"));
+
+                if (soapTagName.charAt(0) == '_')
+                    soapTagName = soapTagName.substring(1, soapTagName.length());
+                
+                if (attribs[i].isOptional())
+                {
+                    writer.write("\tconst char* elementName" + i + " = axiscPeekNextElementName(pDZ);\n");
+                    writer.write("\t\tif(strcmp(elementName" + i + ", \"" + soapTagName + "\") == 0)\n");
+                    writer.write("\t\t{\n");
+                }
+                
+                Type type = attribs[i].getType();
+                boolean isPointerType = false;
+                if (type.isSimpleType())
+                    isPointerType = CUtils.isPointerType(CUtils.getclass4qname(type.getBaseType())); 
+                else
+                    isPointerType = CUtils.isPointerType(attribs[i].getTypeName());
+                
+                if (attribs[i].isNillable() ||
+                        isElementNillable(i) ||
+                        isElementOptional(i) ||
+                        isPointerType)
                 {
-                    if (attribs[i].isAttribute())
+                    if (attribs[i].getChoiceElement() && isElementNillable(i) && !isPointerType)
                     {
-                        if (attribs[i].isOptional())
+                        // TODO
+                        writer.write("\tparam->"
+                                + attribs[i].getParamNameAsMember()
+                                + " = (" + attribs[i].getTypeName()
+                                + "**)(" + attribs[i].getTypeName()
+                                +"*)malloc(sizeof(" +attribs[i].getTypeName() + ");\n");
+                        
+                        writer.write("\t\t*(param->"
+                                + attribs[i].getParamNameAsMember() + ") = "
+                                + CUtils.getParameterGetValueMethodName(
+                                        attribs[i].getTypeName(), attribs[i].isAttribute()) + "(pDZ, \""
+                                + soapTagName + "\",0);\n");
+                    }
+                    else
+                    {
+                        String typeName = attribs[i].getTypeName();
+                        String baseTypeName = null;
+                        if (type.isSimpleType())
+                            baseTypeName = CUtils.getclass4qname (type.getBaseType ());
+                        else
+                            baseTypeName = typeName;
+
+                        String elementName = attribs[i].getParamNameAsMember();
+
+                        writer.write("\t{\n");
+                        if( isPointerType)
                         {
-                            //TODO
+                            writer.write("\t" + typeName + "    pValue" + i + " = " +
+                                    CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
+                                    "(pDZ,\"" + soapTagName + "\", 0);\n\n");
                         }
                         else
                         {
-                            writer.write(
-                                "\tparam->"
-                                    + attribs[i].getParamName()
-                                    + " = pDZ->_functions->"
-                                    + CUtils.getParameterGetValueMethodName(
-                                        attribs[i].getTypeName(),
-                                        true)
-                                    + "(pDZ->_object,0,0);\n");
+                            writer.write("\t" + typeName + " *  pValue" + i + " = " +
+                                    CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
+                                    "(pDZ, \"" + soapTagName + "\", 0);\n\n");
                         }
+                        
+                        writer.write( "\tparam->" + elementName + "= pValue" + i + ";\n");
+                        writer.write( "\tif( pValue" + i + " != NULL)\n");
+                        writer.write("\t\taxiscAxisDelete( (void *) pValue" + i + ", " 
+                                + CUtils.getXSDTypeForBasicType( baseTypeName) + ");\n\n");
+                        writer.write("\t}\n\n");
                     }
-                    else
-                    {
-                        writer.write(
-                            "\tparam->"
-                                + attribs[i].getParamName()
-                                + " = pDZ->_functions->"
-                                + CUtils.getParameterGetValueMethodName(
-                                    attribs[i].getTypeName(),
-                                    false)
-                                + "(pDZ->_object,0,0);\n");
-                    }
+                } 
+                else if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
+                {
+                    writer.write("\tparam->"
+                            + attribs[i].getParamNameAsMember() + " = "
+                            + CUtils.getParameterGetValueMethodName(
+                                    attribs[i].getTypeName(), attribs[i].isAttribute()) + "(pDZ, \""
+                            + soapTagName + "\",0);\n");
                 }
                 else
                 {
-                    //if complex type
-                    writer.write(
-                        "\tparam->"
-                            + attribs[i].getParamName()
-                            + " = ("
-                            + attribs[i].getTypeName()
-                            + "*)pDZ->_functions->getCmplxObject(pDZ->_object, (void*)Axis_DeSerialize_"
-                            + attribs[i].getTypeName()
-                            + "\n\t\t, (void*)Axis_Create_"
-                            + attribs[i].getTypeName()
-                            + ", (void*)Axis_Delete_"
-                            + attribs[i].getTypeName()
-                            + "\n\t\t, Axis_TypeName_"
-                            + attribs[i].getTypeName()
-                            + ", Axis_URI_"
-                            + attribs[i].getTypeName()
-                            + ");\n");
+                    String elementNameToSearchFor = attribs[i].isAttribute()? attribs[i].getParamNameAsMember():attribs[i].getSOAPElementNameAsString();
+                    
+                    writer.write("\t{\n");
+                    writer.write("\t" + attribs[i].getTypeName() + " * "
+                        + attribs[i].getParamNameAsMember() + " = " 
+                        + CUtils.getParameterGetValueMethodName(attribs[i].getTypeName(), attribs[i].isAttribute()) 
+                        + "(pDZ, \"" + elementNameToSearchFor + "\",0);\n");
+                    
+                    writer.write("\tif (" + attribs[i].getParamNameAsMember() + " != NULL)\n\t{\n");
+                    writer.write("\t\tparam->" + attribs[i].getParamName() + " = *"
+                            + attribs[i].getParamNameAsMember() + ";\n");
+                    writer.write("\t\taxiscAxisDelete( (void *) " + attribs[i].getParamNameAsMember() 
+                            + ", " + CUtils.getXSDTypeForBasicType( attribs[i].getTypeName()) + ");\n");
+                    writer.write("\t}\n");  
+                    writer.write("\t}\n");                    
+                }
+                
+                if (attribs[i].isOptional())
+                {
+                    writer.write("\t\t\t}\n");
+                    writer.write("\t\telse\n");
+                    writer.write("\t\t{\n");
+                    writer.write("\t\t\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
+                    writer.write("\t\t}\n\n");
                 }
+                
+                writer.write("\n\t}\n"); // end new variable scope
+            }
+            else
+            {
+                writer.write("\n\t{\n"); // start new variable scope
+                
+                //if complex type
+                //remove _Ref sufix and _ prefix in SOAP tag name
+                String soapTagName = attribs[i].getParamName();
+
+                if (soapTagName.lastIndexOf("_Ref") > -1)
+                    soapTagName = soapTagName.substring(0, soapTagName.lastIndexOf("_Ref"));
+
+                if (soapTagName.charAt(0) == '_')
+                    soapTagName = soapTagName.substring(1, soapTagName.length());
+                
+                if (attribs[i].isOptional())
+                {
+                    writer.write("\tconst char* elementName" + i + " = axiscPeekNextElementName(pDZ);\n");
+                    writer.write("\tif(strcmp(elementName" + i + ", \"" + soapTagName + "\") == 0)\n");
+                    writer.write("\t{\n");
+                }
+
+                writer.write("\tparam->" + attribs[i].getParamNameAsMember() 
+                        + " = ("  + attribs[i].getTypeName()
+                        + "*)axiscGetCmplxObject(pDZ,(void*)Axis_DeSerialize_"
+                        + attribs[i].getTypeName()
+                        + "\n\t\t, (void*)Axis_Create_"
+                        + attribs[i].getTypeName() + ", (void*)Axis_Delete_"
+                        + attribs[i].getTypeName() + "\n\t\t, \"" + soapTagName
+                        + "\", Axis_URI_" + attribs[i].getTypeName() + ");\n");
+                
+                if (attribs[i].isOptional())
+                {
+                    writer.write("\t}\n");
+                    writer.write("\telse\n");
+                    writer.write("\t{\n");
+                    writer.write("\t\tparam->" + attribs[i].getParamNameAsMember() + " = NULL;\n");
+                    writer.write("\t}\n\n");
+                }      
+                
+                writer.write("\n\t}\n"); // end new variable scope
+            }
+
+            if (attribs[i].getChoiceElement())
+                writer.write("\t}\n");
+            
+            if (attribs[i].getAllElement())
+                if (attribs[i].getMinOccurs() == 0)
+                    writer.write("\t}\n");
+            
+        }
+        
+        if (extensionBaseAttrib != null
+                && extensionBaseAttrib.getTypeName() != null)
+        {
+            writer.write("\taxiscGetChardataAs(pDZ, (void*)&(param->"
+                    + extensionBaseAttrib.getParamNameAsMember() + "), "
+                    + CUtils.getXSDTypeForBasicType(extensionBaseAttrib.getTypeName()) + ");\n");
         }
-        writer.write("\treturn pDZ->_functions->getStatus(pDZ->_object);\n");
+        
+        writer.write("\treturn axiscGetStatusIWrapperSoapDeSerializer(pDZ);\n");
         writer.write("}\n");
     }
+    
 
     /**
      * @throws IOException
      */
     private void writeCreateGlobalMethod() throws IOException
     {
-        writer.write(
-            "void* Axis_Create_"
-                + classname
-                + "("
-                + classname
-                + "* pObj, bool bArray, int nSize)\n{\n");
+        writer.write("/**\n");
+        writer.write(" * This static method to deallocate a " + classname + " type of object\n");
+        writer.write(" */\n");
+        
+        writer.write("void* Axis_Create_" + classname + "(void* pObj, AxiscBool bArray, int nSize)\n{\n");
         writer.write("\t" + classname + "* pTemp;\n");
         writer.write("\tif (bArray && (nSize > 0))\n\t{\n");
-        writer.write("\t\tpObj = malloc(sizeof(" + classname + ")*nSize);\n");
+        writer.write("\t\tif (pObj)\n\t\t{\n");
+        writer.write("\t\t\tpObj = (void *)  realloc(pObj, sizeof(" + classname + ")*nSize);\n");
         writer.write("\t\t\tpTemp = pObj;\n");
         writer.write("\t\t\tpTemp += nSize/2;\n");
-        writer.write(
-            "\t\t\tmemset(pTemp, 0, sizeof(" + classname + ")*nSize/2);\n");
+        writer.write("\t\t\tmemset(pTemp, 0, sizeof(" + classname + ")*nSize/2);\n");
+        writer.write("\t\t}\n\t\telse\n\t\t{\n");
+        writer.write("\t\t\tpObj = (void *)  malloc(sizeof(" + classname + ")*nSize);\n");
+        writer.write("\t\t\tmemset(pObj, 0, sizeof(" + classname + ")*nSize);\n\t\t}\n");
         writer.write("\t}\n\telse\n\t{\n");
-        writer.write("\t\tpObj = malloc(sizeof(" + classname + "));\n");
+        writer.write("\t\tpObj = (void *)  malloc(sizeof(" + classname + "));\n");
         writer.write("\t\tmemset(pObj, 0, sizeof(" + classname + "));\n\n");
-        writer.write("\t\tpTemp = pObj;\n");
-        for (int i = 0; i < attribs.length; i++)
-        {
-            if (attribs[i].isArray())
-            {
-                writer.write(
-                    "\t\tpTemp->"
-                        + attribs[i].getParamName()
-                        + ".m_Array = 0;\n");
-                writer.write(
-                    "\t\tpTemp->"
-                        + attribs[i].getParamName()
-                        + ".m_Size = 0;\n");
-            }
-            else
-                if (!attribs[i].isSimpleType())
-                {
-                    writer.write(
-                        "\t\tpTemp->" + attribs[i].getParamName() + "=0;\n");
-                }
-        }
         writer.write("\t}\n\treturn pObj;\n}\n");
     }
 
@@ -477,234 +714,326 @@
     private void writeDeleteGlobalMethod() throws IOException
     {
         writer.write("/**\n");
-        writer.write(
-            " * This static method to deallocate a "
-                + classname
-                + " type of object\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, bool bArray, int nSize)\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++)
-        {
-            if (!attribs[i].isSimpleType())
-            {
-                hasComplexTypeOrArray = true;
-                break;
-            }
-            else
-                if ("xsd__string".equals(attribs[i].getTypeName()))
-                {
-                    hasComplexTypeOrArray = true;
-                    break;
-                }
-                else
-                    if ("xsd__base64Binary".equals(attribs[i].getTypeName()))
-                    {
-                        hasComplexTypeOrArray = true;
-                        break;
-                    }
-                    else
-                        if ("xsd__hexBinary".equals(attribs[i].getTypeName()))
-                        {
-                            hasComplexTypeOrArray = true;
-                            break;
-                        }
-        }
-        if (hasComplexTypeOrArray)
-        {
-            writer.write("\tint x;\n");
-            writer.write("\t" + classname + "* pTemp;\n");
-        }
+        writer.write("\tif (!param) return;\n\n");
         writer.write("\tif (bArray)\n");
         writer.write("\t{\n");
-        if (hasComplexTypeOrArray)
-        {
-            writer.write(
-                "\t\t/*delete any pointer members or array members of this struct here*/\n");
-            writer.write("\t\tpTemp = param;\n");
-            writer.write("\t\tfor (x=0; x<nSize; x++)\n");
-            writer.write("\t\t{\n");
-            for (int i = 0; i < attribs.length; i++)
-            {
-                if (attribs[i].isArray())
-                {
-                    if (attribs[i].isSimpleType())
-                    {
-                        writer.write(
-                            "\t\t\tif (pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array) free(pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array);\n");
-                    }
-                    else
-                    {
-                        writer.write(
-                            "\t\t\tif (pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array) Axis_Delete_"
-                                + attribs[i].getTypeName()
-                                + "(pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array, true, pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Size);\n");
-                    }
-                }
-                else
-                    if (!attribs[i].isSimpleType())
-                    {
-                        writer.write(
-                            "\t\t\tif (pTemp->"
-                                + attribs[i].getParamName()
-                                + ") Axis_Delete_"
-                                + attribs[i].getTypeName()
-                                + "(pTemp->"
-                                + attribs[i].getParamName()
-                                + ", false, 0);\n");
-                    }
-                    else
-                        if ("xsd__string".equals(attribs[i].getTypeName()))
-                        {
-                            writer.write(
-                                "\t\t\tif(pTemp->"
-                                    + attribs[i].getParamName()
-                                    + ") free(pTemp->"
-                                    + attribs[i].getParamName()
-                                    + ");\n");
-                        }
-                        else
-                            if ("xsd__base64Binary"
-                                .equals(attribs[i].getTypeName()))
-                            {
-                                writer.write(
-                                    "\t\t\tif(pTemp->"
-                                        + attribs[i].getParamName()
-                                        + ".__ptr) free(pTemp->"
-                                        + attribs[i].getParamName()
-                                        + ".__ptr);\n");
-                            }
-                            else
-                                if ("xsd__hexBinary"
-                                    .equals(attribs[i].getTypeName()))
-                                {
-                                    writer.write(
-                                        "\t\t\tif(pTemp->"
-                                            + attribs[i].getParamName()
-                                            + ".__ptr) free(pTemp->"
-                                            + attribs[i].getParamName()
-                                            + ".__ptr);\n");
-                                }
-                                else
-                                    if (attribs[i].isOptional())
-                                    {
-                                        //TODO
-                                    }
-            }
-            writer.write("\t\t\tpTemp++;\n");
-            writer.write("\t\t}\n");
-        }
-        writer.write("\t\tfree(param);\n");
+        writer.write("\t\tif (nSize > 0)\n");
+        writer.write("\t\t{\n");
+        writer.write("\t\t\tint count;\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\t{\n");
+        writer.write("\t\t\t\t\tfree ((( " + classname + " ** ) param)[count]);\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}\n");
         writer.write("\t}\n");
         writer.write("\telse\n");
         writer.write("\t{\n");
-        writer.write(
-            "\t\t/*delete any pointer members or array members of this struct here*/\n");
-        for (int i = 0; i < attribs.length; i++)
-        {
-            if (attribs[i].isArray())
-            {
-                if (attribs[i].isSimpleType())
-                {
-                    writer.write(
-                        "\t\tif (param->"
-                            + attribs[i].getParamName()
-                            + ".m_Array) free(param->"
-                            + attribs[i].getParamName()
-                            + ".m_Array);\n");
-                }
-                else
-                {
-                    writer.write(
-                        "\t\tif (param->"
-                            + attribs[i].getParamName()
-                            + ".m_Array) Axis_Delete_"
-                            + attribs[i].getTypeName()
-                            + "(param->"
-                            + attribs[i].getParamName()
-                            + ".m_Array, true, param->"
-                            + attribs[i].getParamName()
-                            + ".m_Size);\n");
-                }
-            }
-            else
-                if (!attribs[i].isSimpleType())
-                {
-                    writer.write(
-                        "\t\tif (param->"
-                            + attribs[i].getParamName()
-                            + ") Axis_Delete_"
-                            + attribs[i].getTypeName()
-                            + "(param->"
-                            + attribs[i].getParamName()
-                            + ", false, 0);\n");
-                }
-                else
-                    if ("xsd__string".equals(attribs[i].getTypeName()))
-                    {
-                        writer.write(
-                            "\t\tif(param->"
-                                + attribs[i].getParamName()
-                                + ") free(param->"
-                                + attribs[i].getParamName()
-                                + ");\n");
-                    }
-                    else
-                        if ("xsd__base64Binary"
-                            .equals(attribs[i].getTypeName()))
-                        {
-                            writer.write(
-                                "\t\tif(param->"
-                                    + attribs[i].getParamName()
-                                    + ".__ptr) free(param->"
-                                    + attribs[i].getParamName()
-                                    + ".__ptr);\n");
-                        }
-                        else
-                            if ("xsd__hexBinary"
-                                .equals(attribs[i].getTypeName()))
-                            {
-                                writer.write(
-                                    "\t\tif(param->"
-                                        + attribs[i].getParamName()
-                                        + ".__ptr) free(param->"
-                                        + attribs[i].getParamName()
-                                        + ".__ptr);\n");
-                            }
-                            else
-                                if (attribs[i].isOptional())
-                                {
-                                    //TODO
-                                }
-        }
         writer.write("\t\tfree(param);\n");
         writer.write("\t}\n");
         writer.write("}\n");
     }
 
+// 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++)
+//        {
+//            if (!attribs[i].isSimpleType())
+//            {
+//                hasComplexTypeOrArray = true;
+//                break;
+//            }
+//            else
+//                if ("xsdc__string".equals(attribs[i].getTypeName()))
+//                {
+//                    hasComplexTypeOrArray = true;
+//                    break;
+//                }
+//                else
+//                    if ("xsdc__base64Binary".equals(attribs[i].getTypeName()))
+//                    {
+//                        hasComplexTypeOrArray = true;
+//                        break;
+//                    }
+//                    else
+//                        if ("xsdc__hexBinary".equals(attribs[i].getTypeName()))
+//                        {
+//                            hasComplexTypeOrArray = true;
+//                            break;
+//                        }
+//        }
+//        if (hasComplexTypeOrArray)
+//        {
+//            writer.write("\tint x, i;\n");
+//            writer.write("\t" + classname + "* pTemp;\n");
+//        }
+//        writer.write("\tif (bArray)\n");
+//        writer.write("\t{\n");
+//        if (hasComplexTypeOrArray)
+//        {
+//            writer.write(
+//                "\t\t/*delete any pointer members or array members of this struct here*/\n");
+//            writer.write("\t\tpTemp = param;\n");
+//            writer.write("\t\tfor (x=0; x<nSize; x++)\n");
+//            writer.write("\t\t{\n");
+//            for (int i = 0; i < attribs.length; i++)
+//            {
+//                if (attribs[i].isArray())
+//                {
+//                    if (attribs[i].isSimpleType())
+//                    {
+//                        writer.write(
+//                            "\t\t\tif (pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ".m_Array) free(pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ".m_Array);\n");
+//                    }
+//                    else
+//                    {
+//                        writer.write(
+//                            "\t\t\tif (pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ".m_Array) Axis_Delete_"
+//                                + attribs[i].getTypeName()
+//                                + "(pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ".m_Array, true, pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ".m_Size);\n");
+//                    }
+//                }
+//                else
+//                    if (attribs[i].isAnyType())
+//                    {
+//                        writer.write(
+//                            "\t\t\tif (pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ") \n\t\t\t{ \n");
+//                        writer.write(
+//                            "\t\t\t\tfor (i=0; i<pTemp->"
+//                                + attribs[i].getParamName()
+//                                + "->_size; i++)\n\t\t\t\t{\n");
+//                        writer.write(
+//                            "\t\t\t\t\tif (pTemp->"
+//                                + attribs[i].getParamName()
+//                                + "->_array[i]) free(pTemp->"
+//                                + attribs[i].getParamName()
+//                                + "->_array[i]);\n");
+//                        writer.write("\t\t\t\t}\n");
+//                        writer.write(
+//                            "\t\t\t\tfree(pTemp->"
+//                                + attribs[i].getParamName()
+//                                + ");\n");
+//                        writer.write("\t\t\t}\n");
+//                    }
+//                    else
+//                        if (!attribs[i].isSimpleType())
+//                        {
+//                            writer.write(
+//                                "\t\t\tif (pTemp->"
+//                                    + attribs[i].getParamName()
+//                                    + ") Axis_Delete_"
+//                                    + attribs[i].getTypeName()
+//                                    + "(pTemp->"
+//                                    + attribs[i].getParamName()
+//                                    + ", false, 0);\n");
+//                        }
+//                        else
+//                            if ("xsdc__string".equals(attribs[i].getTypeName()))
+//                            {
+//                                writer.write(
+//                                    "\t\t\tif(pTemp->"
+//                                        + attribs[i].getParamName()
+//                                        + ") free(pTemp->"
+//                                        + attribs[i].getParamName()
+//                                        + ");\n");
+//                            }
+//                            else
+//                                if ("xsdc__base64Binary"
+//                                    .equals(attribs[i].getTypeName()))
+//                                {
+//                                    writer.write(
+//                                        "\t\t\tif(pTemp->"
+//                                            + attribs[i].getParamName()
+//                                            + ".__ptr) free(pTemp->"
+//                                            + attribs[i].getParamName()
+//                                            + ".__ptr);\n");
+//                                }
+//                                else
+//                                    if ("xsdc__hexBinary"
+//                                        .equals(attribs[i].getTypeName()))
+//                                    {
+//                                        writer.write(
+//                                            "\t\t\tif(pTemp->"
+//                                                + attribs[i].getParamName()
+//                                                + ".__ptr) free(pTemp->"
+//                                                + attribs[i].getParamName()
+//                                                + ".__ptr);\n");
+//                                    }
+//                                    else
+//                                        if (attribs[i].isOptional())
+//                                        {
+//                                            //TODO
+//                                        }
+//            }
+//            writer.write("\t\t\tpTemp++;\n");
+//            writer.write("\t\t}\n");
+//        }
+//        writer.write("\t\tfree(param);\n");
+//        writer.write("\t}\n");
+//        writer.write("\telse\n");
+//        writer.write("\t{\n");
+//        writer.write(
+//            "\t\t/*delete any pointer members or array members of this struct here*/\n");
+//        for (int i = 0; i < attribs.length; i++)
+//        {
+//            if (attribs[i].isArray())
+//            {
+//                if (attribs[i].isSimpleType())
+//                {
+//                    writer.write(
+//                        "\t\tif (param->"
+//                            + attribs[i].getParamName()
+//                            + ".m_Array) free(param->"
+//                            + attribs[i].getParamName()
+//                            + ".m_Array);\n");
+//                }
+//                else
+//                {
+//                    writer.write(
+//                        "\t\tif (param->"
+//                            + attribs[i].getParamName()
+//                            + ".m_Array) Axis_Delete_"
+//                            + attribs[i].getTypeName()
+//                            + "(param->"
+//                            + attribs[i].getParamName()
+//                            + ".m_Array, true, param->"
+//                            + attribs[i].getParamName()
+//                            + ".m_Size);\n");
+//                }
+//            }
+//            else
+//                if (attribs[i].isAnyType())
+//                {
+//                    writer.write(
+//                        "\t\tif (param->"
+//                            + attribs[i].getParamName()
+//                            + ") \n\t\t{ \n");
+//                    writer.write(
+//                        "\t\t\tfor (i=0; i<param->"
+//                            + attribs[i].getParamName()
+//                            + "->_size; i++)\n\t\t\t{\n");
+//                    writer.write(
+//                        "\t\t\t\tif (param->"
+//                            + attribs[i].getParamName()
+//                            + "->_array[i]) free(param->"
+//                            + attribs[i].getParamName()
+//                            + "->_array[i]);\n");
+//                    writer.write("\t\t\t}\n");
+//                    writer.write(
+//                        "\t\t\tfree(param->"
+//                            + attribs[i].getParamName()
+//                            + ");\n");
+//                    writer.write("\t\t}\n");
+//                }
+//                else
+//                    if (!attribs[i].isSimpleType())
+//                    {
+//                        writer.write(
+//                            "\t\tif (param->"
+//                                + attribs[i].getParamName()
+//                                + ") Axis_Delete_"
+//                                + attribs[i].getTypeName()
+//                                + "(param->"
+//                                + attribs[i].getParamName()
+//                                + ", false, 0);\n");
+//                    }
+//                    else
+//                        if ("xsdc__string".equals(attribs[i].getTypeName()))
+//                        {
+//                            writer.write(
+//                                "\t\tif(param->"
+//                                    + attribs[i].getParamName()
+//                                    + ") free(param->"
+//                                    + attribs[i].getParamName()
+//                                    + ");\n");
+//                        }
+//                        else
+//                            if ("xsdc__base64Binary"
+//                                .equals(attribs[i].getTypeName()))
+//                            {
+//                                writer.write(
+//                                    "\t\tif(param->"
+//                                        + attribs[i].getParamName()
+//                                        + ".__ptr) free(param->"
+//                                        + attribs[i].getParamName()
+//                                        + ".__ptr);\n");
+//                            }
+//                            else
+//                                if ("xsdc__hexBinary"
+//                                    .equals(attribs[i].getTypeName()))
+//                                {
+//                                    writer.write(
+//                                        "\t\tif(param->"
+//                                            + attribs[i].getParamName()
+//                                            + ".__ptr) free(param->"
+//                                            + attribs[i].getParamName()
+//                                            + ".__ptr);\n");
+//                                }
+//                                else
+//                                    if (attribs[i].isOptional())
+//                                    {
+//                                        //TODO
+//                                    }
+//        }
+//        writer.write("\t\tfree(param);\n");
+//        writer.write("\t}\n");
+//        writer.write("}\n");
+//    }    
+    
+    /**
+     * @throws WrapperFault
+     */
+    protected void writeRestrictionCheckerFunction() throws WrapperFault
+    {
+        try
+        {
+            writer.write("int Check_Restrictions_" + classname + "(" + classname + " value)\n");
+            writer.write("{\n");
+            writer.write("\treturn 0;\n");
+            //TODO write code to check the restrictions
+            writer.write("}\n");
+        }
+        catch (IOException e)
+        {
+            throw new WrapperFault(e);
+        }
+    }
+    
     /* (non-Javadoc)
      * @see org.apache.axis.wsdl.wsdl2ws.BasicFileWriter#getFilePath(boolean)
      */
     protected File getFilePath(boolean useServiceName) throws WrapperFault
     {
-
         return null;
     }
 }

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=391679&r1=391678&r2=391679&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 Wed Apr  5 10:18:30 2006
@@ -42,12 +42,16 @@
      * @param type
      * @throws WrapperFault
      */
-    public ParamCFileWriter(WebServiceContext wscontext, Type type)
-        throws WrapperFault
+    public ParamCFileWriter(WebServiceContext wscontext, Type type) throws WrapperFault
     {
         super(wscontext, type);
     }
 
+    /**
+     * @throws WrapperFault
+     */
+    protected abstract void writeRestrictionCheckerFunction() throws WrapperFault;
+
     /* (non-Javadoc)
      * @see org.apache.axis.wsdl.wsdl2ws.SourceWriter#writeSource()
      */
@@ -55,19 +59,22 @@
     {
         try
         {
-            this.writer =
-                new BufferedWriter(new FileWriter(getFilePath(), false));
+            this.writer = new BufferedWriter(new FileWriter(getFilePath(), false));
             writeClassComment();
             writePreprocessorStatements();
-            writeGlobalCodes();
-            writeAttributes();
-            writeMethods();
+            if (type.isSimpleType())
+                writeRestrictionCheckerFunction();
+            else
+            {
+                writeGlobalCodes();
+                writeAttributes();
+                writeMethods();
+            }
             //cleanup
             writer.flush();
             writer.close();
             if (WSDL2Ws.verbose)
-                System.out.println(
-                    getFilePath().getAbsolutePath() + " created.....");
+                System.out.println(getFilePath().getAbsolutePath() + " created.....");
         }
         catch (IOException e)
         {
@@ -116,6 +123,7 @@
         try
         {
             writer.write("#include <stdlib.h>\n");
+            writer.write("#include <memory.h>\n");
             writer.write(
                 "#include \""
                     + this.classname