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());