You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by na...@apache.org on 2006/03/28 17:43:11 UTC

svn commit: r389524 - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal: BeanParamWriter.java ClientStubHeaderWriter.java ParmHeaderFileWriter.java

Author: nadiramra
Date: Tue Mar 28 07:43:10 2006
New Revision: 389524

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

Modified:
    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/ClientStubHeaderWriter.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/literal/BeanParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/BeanParamWriter.java?rev=389524&r1=389523&r2=389524&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/BeanParamWriter.java Tue Mar 28 07:43:10 2006
@@ -234,108 +234,261 @@
      * @throws IOException
      * @throws WrapperFault
      */
-    private void writeDeSerializeGlobalMethod()
-        throws IOException, WrapperFault
+    private void writeDeSerializeGlobalMethod() throws IOException, WrapperFault
     {
         writer.write("/**\n");
         writer.write(" * This static method deserializes a " + classname + " type of object\n");
         writer.write(" */\n");
-
         writer.write("int Axis_DeSerialize_" + classname
                 + "(" + classname + "* param, AXISCHANDLE pDZ)\n{\n");
+
+        for (int i = 0; i < attribs.length; i++)
+        {
+            if (attribs[i].isArray())
+                writer.write("\tAxisc_Array array" + i + ";\n");
+            else if (attribs[i].isOptional())
+                writer.write("\tconst char* elementName" + i + ";\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....................");
-            // compilation issue;
+            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 aretherearrayparams = false;
-        for (int i = 0; i < attribs.length; i++)
-            if (attribs[i].isArray())
-            {
-                aretherearrayparams = true;
-                break;
-            }
-        
-        if (aretherearrayparams)
-            writer.write("\tAxisc_Array array;\n");
+        }  
+
+        String arrayType = null;
+        boolean peekCalled = false;
+        boolean firstIfWritten = false;
+        boolean foundAll = false;
+        int anyCounter = 0; //counter for any types.
+        int arrayCount = 0;
         
-        writer.write("\t/* first deserialize attributes if any*/\n");
         for (int i = 0; i < attribs.length; i++)
-        {
-            if (i == attributeParamCount)
-                writer.write("\t/* then deserialize elements if any*/\n");
+        {       
+            //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())
-                writer.write("\tparam->any = axiscGetAnyObject(pDZ);\n");
+            {
+                anyCounter +=1;
+                writer.write("\tparam->any" + anyCounter + " = axiscGetAnyObject(pDZ);\n");
+            }
             else if (attribs[i].isArray())
             {
+                arrayCount++;
                 String containedType = attribs[i].getTypeName();
                 
-                if (attribs[i].isSimpleType())
+                if (attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                 {
-                    writer.write("\tarray = axiscGetBasicArray(pDZ, "
-                            + CUtils.getXSDTypeForBasicType(containedType)
-                            + ", \"" + attribs[i].getElementName().getLocalPart()
+                    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("\tarray" + arrayCount + "= axiscGetBasicArray(pDZ, " 
+                            + CUtils.getXSDTypeForBasicType(baseTypeName) + ", \"" 
+                            + attribs[i].getParamNameAsSOAPElement()
                             + "\",0);\n");
+                    
+                    // TODO MEMORY MANAGEMENT
                 }
                 else
                 {
-                    writer.write("\tarray = axiscGetCmplxArray(pDZ, (void*)Axis_DeSerialize_"
-                            + containedType
-                            + "\n\t\t, (void*)Axis_Create_" + containedType
-                            + ", (void*)Axis_Delete_" + containedType
-                            + "\n\t\t, (void*)Axis_GetSize_" + containedType
-                            + ", \""
-                            + attribs[i].getElementName().getLocalPart()
-                            + "\", Axis_URI_" + containedType
-                            + ");\n");
+                    arrayType = attribs[i].getTypeName();
+                    writer.write("\tarray" + arrayCount + " = axiscGetCmplxArray(pDZ, (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, sizeof(Axisc_Array));\n");
+                        + "), &array" + arrayCount + ", sizeof(Axisc_Array));\n");
             }
-            else if (attribs[i].isSimpleType())
+            else if ((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType()))
             {
-                if (attribs[i].isAttribute())
+                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("\telementName" + 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].isOptional())
+                    if (attribs[i].getChoiceElement() && isElementNillable(i) && !isPointerType)
                     {
-                        //TODO
+                        // 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
                     {
-                        writer.write("\tparam->" + attribs[i].getParamName() + " = "
-                                + CUtils.getParameterGetValueMethodName(attribs[i].getTypeName(),true)
-                                + "(pDZ, \"" + attribs[i].getParamName() + "\", 0);\n");
+                        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)
+                        {
+                            writer.write("\t" + typeName + "    pValue" + i + " = " +
+                                    CUtils.getParameterGetValueMethodName(baseTypeName, attribs[i].isAttribute()) +
+                                    "(pDZ,\"" + soapTagName + "\", 0);\n\n");
+                        }
+                        else
+                        {
+                            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");
                     }
+                } 
+                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
                 {
-                    writer.write("\tparam->" + attribs[i].getParamName() + " = "
-                            + CUtils.getParameterGetValueMethodName(attribs[i].getTypeName(), false)
-                            + "(pDZ, \"" + attribs[i].getElementName().getLocalPart() + "\", 0);\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");
+                }              
             }
             else
             {
                 //if complex type
-                writer.write("\tparam->" + attribs[i].getParamName() + " = ("
+                //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()
-                        + "*)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, \""
-                        + attribs[i].getElementName().getLocalPart()
-                        + "\", Axis_URI_" + attribs[i].getTypeName()
-                        + ");\n");
+                        + "\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");
+                }                
             }
+
+            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 axiscGetStatusIWrapperSoapDeSerializer(pDZ);\n");
@@ -426,23 +579,16 @@
                     if (attribs[i].isSimpleType())
                     {
                         writer.write(
-                            "\t\t\tif (pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array) free(pTemp->"
-                                + attribs[i].getParamName()
-                                + ".m_Array);\n");
+                            "\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()
+                            "\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");
                     }
                 }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java?rev=389524&r1=389523&r2=389524&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ClientStubHeaderWriter.java Tue Mar 28 07:43:10 2006
@@ -76,8 +76,7 @@
             Iterator itr = typeSet.iterator();
             while (itr.hasNext())
             {
-                writer.write(
-                    "#include \"" + itr.next().toString() + CUtils.C_HEADER_SUFFIX + "\"\n");
+                writer.write("#include \"" + itr.next().toString() + CUtils.C_HEADER_SUFFIX + "\"\n");
             }
             writer.write("\n");
         }

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java?rev=389524&r1=389523&r2=389524&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/literal/ParmHeaderFileWriter.java Tue Mar 28 07:43:10 2006
@@ -254,20 +254,14 @@
             Iterator itr = typeSet.iterator();
             while (itr.hasNext())
             {
-                writer.write(
-                    "#include \"" + itr.next().toString() + CUtils.C_HEADER_SUFFIX + "\"\n");
+                writer.write("#include \"" + itr.next().toString() + CUtils.C_HEADER_SUFFIX + "\"\n");
             }
             
             writer.write("/*Local name and the URI for the type*/\n");
-            writer.write(
-                "static const char* Axis_URI_"
-                    + classname + " = \""
+            writer.write("static const char* Axis_URI_" + classname + " = \""
                     + type.getName().getNamespaceURI() + "\";\n");
-            writer.write(
-                "static const char* Axis_TypeName_"
-                    + classname + " = \""
+            writer.write("static const char* Axis_TypeName_" + classname + " = \""
                     + type.getName().getLocalPart() + "\";\n\n");
-
         }
         catch (IOException e)
         {