AXISCPP-505 WSDL2Ws doesn't cope with WSDL complex types matching c/c++ types (stage 1)
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
index 7a589ed..74af83b 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/CUtils.java
@@ -1122,6 +1122,32 @@
     }
     
     /**
+     * Sanitizes a string so that it can be used in generated code. 
+     * The '*' character is not touched.
+     * 
+     */
+    public static String sanitizeStringWithSplats( String name)
+    {
+        if (name == null)
+            return name;
+        
+        String sanitisedName=name.trim();
+        int i = -1;
+        if (sanitisedName.endsWith("*"))
+            i = sanitisedName.lastIndexOf('*');
+        String suffix = "";
+        String prefix = sanitisedName;
+        
+        if (i != -1)
+        {
+            suffix = sanitisedName.substring(i);
+            prefix = sanitisedName.substring(0, i).trim();
+        }
+        
+        sanitisedName = sanitizeString(prefix) + suffix;
+        return sanitisedName;
+    }
+    /**
      * NOT CURRENTLY USED.
      * This routine is used to basically handle anonymous type naming.  Anonymous types
      * have names such as '>type' and '>>type>type2', the latter being a nested type. 
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
index 4caa876..d6424b7 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/BeanParamWriter.java
@@ -645,14 +645,14 @@
                     c_writer.write("\n");
                  
                     c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember() 
-                            + " = (" + containedTypeArrayName + " *)" 
+                            + " = (" + CUtils.sanitizeString(containedTypeArrayName) + " *)" 
                             + "axiscSoapDeSerializerGetBasicArray(pDZ, " 
                             + CUtils.getXSDEnumeratorForType(baseTypeName) + ", \"" 
                             + attribs[i].getParamNameAsSOAPString() + "\",0);\n");
                 }
                 else
                 {
-                    arrayType = attribs[i].getTypeName();
+                    arrayType = CUtils.sanitizeString(attribs[i].getTypeName());
                     c_writer.write(tab1 + "axiscSoapDeSerializerGetCmplxArray(pDZ, (Axisc_Array *)param->" + attribs[i].getParamNameAsMember() 
                             + ", (void*)Axis_DeSerialize_"  + arrayType 
                             + ", (void*)Axis_Create_" + arrayType 
@@ -692,7 +692,7 @@
                     
                     c_writer.write(tab2 + "{\n"); // start local scope
                     
-                    c_writer.write(tab2 + "\t" + CUtils.resolveWSDL2LanguageNameClashes(attribs[i].getTypeName()) + " * "
+                    c_writer.write(tab2 + "\t" + CUtils.sanitizeString((attribs[i].getTypeName())) + " * "
                         + attribs[i].getParamNameAsMember() + " = " 
                         + "axiscSoapDeSerializer"
                         + CUtils.getDeserializerMethodName(attribs[i].getTypeName(), attribs[i].isAttribute()) 
@@ -851,7 +851,7 @@
                     containedTypeArrayName = CUtils.getArrayNameForType(baseTypeName);
                     
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() 
-                            + " = (" + containedTypeArrayName + " *)axiscAxisNew(XSDC_ARRAY, 0);\n");
+                            + " = (" + CUtils.sanitizeString(containedTypeArrayName) + " *)axiscAxisNew(XSDC_ARRAY, 0);\n");
                     
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() + "->m_Type = " 
                             + CUtils.getXSDEnumeratorForType(baseTypeName) + ";\n");
@@ -861,7 +861,7 @@
                     containedTypeArrayName = CUtils.getArrayNameForType(attribs[i].getTypeName());
 
                     c_writer.write("\t\tpTemp->" + attribs[i].getParamNameAsMember() + " = "
-                            + "Axis_Create_" + containedTypeArrayName + "(0);\n");
+                            + "Axis_Create_" + CUtils.sanitizeString(containedTypeArrayName) + "(0);\n");
                 }     
             }
         }
@@ -961,10 +961,10 @@
                 
                 if (attribs[i].isArray())
                     c_writer.write("\t\t\tAxis_Delete_" 
-                            + CUtils.getArrayNameForType(attribs[i].getTypeName())  
+                            + CUtils.sanitizeString(CUtils.getArrayNameForType(attribs[i].getTypeName()))  
                             + "(param->" + attribs[i].getParamNameAsMember() + ", 0);\n");  
                 else
-                    c_writer.write("\t\t\tAxis_Delete_" + attribs[i].getTypeName() 
+                    c_writer.write("\t\t\tAxis_Delete_" + CUtils.sanitizeString(attribs[i].getTypeName()) 
                             + "(param->" + attribs[i].getParamNameAsMember() + ", 0);\n");     
             }
         }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
index 0c67352..94967ac 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/c/ParmHeaderFileWriter.java
@@ -289,14 +289,14 @@
                 }
 
                 // Print out field.
-                c_writer.write("\t" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " " + paramName + ";\n");
+                c_writer.write("\t" + CUtils.sanitizeStringWithSplats(paramType) + " " + paramName + ";\n");
             }
             
             if (extensionBaseAttrib != null &&
                 getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
             {
                 c_writer.write("\t"
-                             + CUtils.sanitizeString(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
+                             + CUtils.sanitizeStringWithSplats(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
                              + "  "
                              + extensionBaseAttrib.getParamNameAsMember() + ";\n");
             }            
@@ -405,13 +405,13 @@
                 Type theType = attribs[i].getType();
 
                 if (theType.isRestriction() && !CUtils.isPrimitiveType(basicType))
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 else if (!attribs[i].isSimpleType() && !attribs[i].isAnyElement())
                 {
                     if ((attribs[i].isArray()) && !theType.isSimpleType())
-                        typeSet.add(CUtils.getArrayNameForType(basicType));
+                        typeSet.add(CUtils.sanitizeString(CUtils.getArrayNameForType(basicType)));
     
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 }
             }
             
@@ -438,7 +438,7 @@
                 // Do not want to include the header file we are generating!
                 String includeFile = itr.next().toString();
                 if (!includeFile.equals(c_classname))
-                   c_writer.write("#include \"" + CUtils.resolveWSDL2LanguageNameClashes(includeFile) + CUtils.getHeaderFileExtension() + "\"\n");
+                   c_writer.write("#include \"" + includeFile + CUtils.getHeaderFileExtension() + "\"\n");
             }
 
             c_writer.write("\n");
@@ -458,7 +458,7 @@
                         !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                         && !attribs[i].isAnyElement())
                 {
-                    typeSet.add(attribs[i].getTypeName());
+                    typeSet.add(CUtils.sanitizeString(attribs[i].getTypeName()));
                 } 
             }
             
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
index 0a5ece8..e943b5a 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
@@ -124,6 +124,9 @@
                     methodName = methodName + Integer.toString(anyCounter);
                 }
                 
+                properParamType = CUtils.sanitizeStringWithSplats(properParamType);
+                type            = CUtils.sanitizeString(type);
+                
                 //=============================================================================
                 // Write getter method
                 //=============================================================================      
@@ -131,8 +134,7 @@
                 CUtils.printMethodComment(c_writer, "Getter method for class member field " 
                         + parameterName + ".");
                 
-                c_writer.write(CUtils.resolveWSDL2LanguageNameClashes(properParamType) + asterisk + c_classname
-                        + "::\nget" + methodName + "()\n{\n");
+                c_writer.write(properParamType + asterisk + c_classname + "::\nget" + methodName + "()\n{\n");
 
                 c_writer.write("\t" + "return " + parameterName + "; \n}\n");
 
@@ -165,7 +167,7 @@
                 {
                     // Setter method
                     c_writer.write("void " + c_classname + "::\nset"
-                            + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(properParamType)  
+                            + methodName + "(" + properParamType  
                             + " pInValue, bool deep, bool makeCopy)\n{\n");
                     
                     if (attribs[i].getChoiceElement())
@@ -183,7 +185,7 @@
                     c_writer.write("\t\tif (deep && makeCopy)\n");
                     c_writer.write("\t\t{\n");
                     
-                    c_writer.write("\t\t\t" + parameterName + " = new " + CUtils.resolveWSDL2LanguageNameClashes(type) + "();\n");
+                    c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
 
                     c_writer.write("\t\t\t*" + parameterName + " = *pInValue;\n");
                     c_writer.write("\t\t}\n");
@@ -198,7 +200,7 @@
                 else
                 {
                     c_writer.write("void " + c_classname + "::\nset"
-                            + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(properParamType) + " InValue");
+                            + methodName + "(" + properParamType + " InValue");
                                         
                     Type attributeType = attribs[i].getType();
                     
@@ -250,7 +252,7 @@
                         c_writer.write("\t{\n");
                         c_writer.write("\t\tif (deep && makeCopy)\n");
                         c_writer.write("\t\t{\n");
-                        c_writer.write("\t\t\t" + parameterName + " = new " + CUtils.resolveWSDL2LanguageNameClashes(type) + "();\n");
+                        c_writer.write("\t\t\t" + parameterName + " = new " + type + "();\n");
                         c_writer.write("\t\t\t*" + parameterName + " = *InValue;\n");
                         c_writer.write("\t\t}\n");
                         c_writer.write("\t\telse\n");
@@ -869,17 +871,17 @@
                             + attribs[i].getParamNameAsSOAPString()
                             + "\",0);\n");
                     c_writer.write(tab2 + "if(param->" + attribs[i].getParamNameAsMember() + " == NULL)\n");
-                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + containedTypeArrayName + "();\n");
+                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + CUtils.sanitizeString(containedTypeArrayName) + "();\n");
                     c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember() + "->clone( *array" + arrayCount + ");\n");
                     c_writer.write(tab2 + "Axis::AxisDelete((void*) array" + arrayCount + ", XSD_ARRAY);\n\n");
                 }
                 else
                 {
-                    arrayType = attribs[i].getTypeName();
+                    arrayType = CUtils.sanitizeString(attribs[i].getTypeName());
                     containedTypeArrayName = CUtils.getArrayNameForType(arrayType);
                     
                     c_writer.write(tab2 + "if(param->" + attribs[i].getParamNameAsMember() + " == NULL)\n");
-                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + containedTypeArrayName + "();\n");
+                    c_writer.write(tab2 + "\tparam->" + attribs[i].getParamNameAsMember() + " = new " + CUtils.sanitizeString(containedTypeArrayName) + "();\n");
                     c_writer.write(tab2 + "pIWSDZ->getCmplxArray(param->" + attribs[i].getParamNameAsMember() 
                             + ", (void*)Axis_DeSerialize_" + arrayType
                             + ", (void*)Axis_Create_" + arrayType 
@@ -907,13 +909,13 @@
                 
                 if( isPointerType)
                 {
-                    c_writer.write(tab2 + CUtils.resolveWSDL2LanguageNameClashes(typeName) + " pValue" + i + " = pIWSDZ->" +
+                    c_writer.write(tab2 + CUtils.sanitizeString(typeName) + " pValue" + i + " = pIWSDZ->" +
                             CUtils.getDeserializerMethodName(baseTypeName, attribs[i].isAttribute()) +
                             "(\"" + soapTagName + "\", 0);\n");
                 }
                 else
                 {
-                    c_writer.write(tab2 + CUtils.resolveWSDL2LanguageNameClashes(typeName) + " * pValue" + i + " = pIWSDZ->" +
+                    c_writer.write(tab2 + CUtils.sanitizeString(typeName) + " * pValue" + i + " = pIWSDZ->" +
                             CUtils.getDeserializerMethodName(baseTypeName, attribs[i].isAttribute()) +
                             "(\"" + soapTagName + "\", 0);\n");
                 }
@@ -947,11 +949,11 @@
                 String soapTagName = attribs[i].getParamNameAsSOAPString();
 
                 c_writer.write(tab2 + "param->" + attribs[i].getParamNameAsMember()
-                        + " = (" + attribs[i].getTypeName()
-                        + "*)pIWSDZ->getCmplxObject((void*)Axis_DeSerialize_" + attribs[i].getTypeName()
-                        + ", (void*)Axis_Create_" + attribs[i].getTypeName() 
-                        + ", (void*)Axis_Delete_" + attribs[i].getTypeName() 
-                        + ", \"" + soapTagName + "\", Axis_URI_" + attribs[i].getTypeName() + ");\n");
+                        + " = (" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + "*)pIWSDZ->getCmplxObject((void*)Axis_DeSerialize_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", (void*)Axis_Create_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", (void*)Axis_Delete_" + CUtils.sanitizeString(attribs[i].getTypeName())
+                        + ", \"" + soapTagName + "\", Axis_URI_" + CUtils.sanitizeString(attribs[i].getTypeName()) + ");\n");
             }
 
             if (attribs[i].getChoiceElement() || attribs[i].getAllElement())
@@ -1145,13 +1147,13 @@
                     String fieldName  = "any" + Integer.toString(anyCounter);
                     
                     c_writer.write("\tif (original." + fieldName + " != NULL)\n");
-                    c_writer.write("\t\t" + fieldName + " = new " + attribs[i].getTypeName() + "(*(original." + fieldName + "));\n");
+                    c_writer.write("\t\t" + fieldName + " = new " + CUtils.sanitizeString(attribs[i].getTypeName()) + "(*(original." + fieldName + "));\n");
                 }
                 else if (attribs[i].isArray())
                 {    
                     c_writer.write("\tif (original." + attribs[i].getParamNameAsMember() + " != NULL)\n");
                     c_writer.write("\t\t" + attribs[i].getParamNameAsMember() + " = new " 
-                            + CUtils.getArrayNameForType(attribs[i].getTypeName()) + "(*original." 
+                            + CUtils.sanitizeString(CUtils.getArrayNameForType(attribs[i].getTypeName())) + "(*original." 
                             + attribs[i].getParamNameAsMember() + ");\n");
                 }
                 else
@@ -1174,7 +1176,7 @@
                     {
                         c_writer.write("\tif (original." + attribs[i].getParamNameAsMember() + " != NULL)\n");
                         c_writer.write("\t\t" + attribs[i].getParamNameAsMember() + " = new " 
-                                + attribs[i].getTypeName() + "(*(original." 
+                                + CUtils.sanitizeString(attribs[i].getTypeName()) + "(*(original." 
                                 + attribs[i].getParamNameAsMember() + "));\n");
                     }
                 }
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
index 8edcf89..602408c 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ParmHeaderFileWriter.java
@@ -338,7 +338,7 @@
                     c_writer.write("\t");
 
                 // Print out field.
-                c_writer.write(CUtils.resolveWSDL2LanguageNameClashes(paramType) + " " + paramName + ";\n");
+                c_writer.write(CUtils.sanitizeStringWithSplats(paramType) + " " + paramName + ";\n");
             }
             
             // Handle extension 
@@ -346,7 +346,7 @@
                 getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib) != null)
             {
                 c_writer.write("\t"
-                             + CUtils.sanitizeString(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
+                             + CUtils.sanitizeStringWithSplats(getCorrectParmNameConsideringArraysAndComplexTypes(extensionBaseAttrib))
                              + " "
                              + extensionBaseAttrib.getParamNameAsMember() + ";\n");
             }
@@ -391,10 +391,10 @@
                 c_writer.write("\n");
                 
                 // Generate getter prototype
-                c_writer.write("\t" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " get" + methodName + "();\n");
+                c_writer.write("\t" + CUtils.sanitizeStringWithSplats(paramType) + " get" + methodName + "();\n");
                 
                 // Generate setter prototype - need to consider deep copies
-                c_writer.write("\t" + "void set" + methodName + "(" + CUtils.resolveWSDL2LanguageNameClashes(paramType) + " InValue");
+                c_writer.write("\t" + "void set" + methodName + "(" + CUtils.sanitizeStringWithSplats(paramType) + " InValue");
                 
                 Type type = attribs[i].getType();
                 boolean isPointerType;                
@@ -526,13 +526,13 @@
                 Type theType = attribs[i].getType();
                 
                 if (theType.isRestriction() && !CUtils.isPrimitiveType(basicType))
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 else if (!attribs[i].isSimpleType() && !attribs[i].isAnyElement())
                 {
                     if ((attribs[i].isArray()) && !theType.isSimpleType())
-                        typeSet.add(CUtils.getArrayNameForType(basicType));
+                        typeSet.add(CUtils.sanitizeString(CUtils.getArrayNameForType(basicType)));
     
-                    typeSet.add(basicType);
+                    typeSet.add(CUtils.sanitizeString(basicType));
                 }
             }
             
@@ -559,7 +559,7 @@
                 // Do not want to include the header file we are generating!
                 String includeFile = itr.next().toString();
                 if (!includeFile.equals(c_classname))                
-                    c_writer.write("#include \"" + CUtils.resolveWSDL2LanguageNameClashes(includeFile) + CUtils.getHeaderFileExtension() + "\"\n");
+                    c_writer.write("#include \"" + includeFile + CUtils.getHeaderFileExtension() + "\"\n");
             }
 
             c_writer.write("\n");
@@ -579,7 +579,7 @@
                         !(attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
                         && !attribs[i].isAnyElement())
 				{
-                    typeSet.add(attribs[i].getTypeName());
+                    typeSet.add(CUtils.sanitizeString(attribs[i].getTypeName()));
                 } 
             }
             
diff --git a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
index b5768be..2240673 100644
--- a/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
+++ b/src/wsdl/org/apache/axis/wsdl/wsdl2ws/info/WSDLInfo.java
@@ -647,10 +647,10 @@
             {

                 newqn = CUtils.getArrayQNameForType(qn);

                 if (newqn == null)

-                    newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart()) + "_Array" + typeCounter++);      

+                    newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart()) + "_Array" + typeCounter++);      

             }

             else

-                newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart()) + "_Array");

+                newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart()) + "_Array");

             

             // type is a inbuilt type or an already created type?

             typedata = c_typeMap.getType(newqn);

@@ -672,7 +672,7 @@
                     {

                         do 

                         {

-                            newqn = new QName(type.getQName().getNamespaceURI(), CUtils.resolveWSDL2LanguageNameClashes(qn.getLocalPart())  + "_Array" + typeCounter++);

+                            newqn = new QName(type.getQName().getNamespaceURI(), CUtils.sanitizeString(qn.getLocalPart())  + "_Array" + typeCounter++);

                             typedata = c_typeMap.getType(newqn);

                         }

                         while (typedata != null && !typedata.isArray());