in src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java [87:276]
private void writeGetSetMethods() throws WrapperFault
{
if (type.isArray())
return;
try
{
int anyCounter = 0;
for (int i = 0; i < attribs.length; i++)
{
// Set method name
String methodName = attribs[i].getMethodName();
// Set parameter name
String parameterName = attribs[i].getParamNameAsMember();
// Set the type to use
String properParamType = getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]);
String type = attribs[i].getTypeName();
// arrays require '*' in prototype for type if one not specified.
String asterisk = " ";
// Details
if (attribs[i].isArray())
{
// Ensure that type on prototype is a pointer to an array
if (!properParamType.endsWith("*"))
asterisk += "* ";
}
else if (attribs[i].getType().isAnyElement())
{
// We use a counter appended to parameter name.
anyCounter += 1;
parameterName = parameterName + Integer.toString(anyCounter);
methodName = methodName + Integer.toString(anyCounter);
}
properParamType = CUtils.sanitizeStringWithSplats(properParamType);
type = CUtils.sanitizeString(type);
//=============================================================================
// Write getter method
//=============================================================================
CUtils.printMethodComment(c_writer, "Getter method for class member field "
+ parameterName + ".");
c_writer.write(properParamType + asterisk + c_classname + "::\nget" + methodName + "()\n{\n");
c_writer.write("\t" + "return " + parameterName + "; \n}\n");
//=============================================================================
// Write setter method
//=============================================================================
CUtils.printMethodComment(c_writer, "Setter method for class member field "
+ parameterName + ".");
// TODO setter leaks memory if setting complex type!
if (attribs[i].isArray())
{
c_writer.write("void " + c_classname + "::\nset"
+ methodName + "(" + properParamType + asterisk + "pInValue)\n{\n");
if (attribs[i].getChoiceElement())
{
c_writer.write("\t// For 'choice' you need to ensure that any\n");
c_writer.write("\t// other objects belonging to this union of elements are empty.\n");
}
c_writer.write("\tif(" + parameterName + " == NULL)\n");
c_writer.write("\t\t" + parameterName + " = new " + properParamType + "();\n");
c_writer.write("\t" + parameterName + "->clone( *pInValue);\n");
c_writer.write("}\n");
}
else if (isElementNillable(i) || isElementOptional(i))
{
// Setter method
c_writer.write("void " + c_classname + "::\nset"
+ methodName + "(" + properParamType
+ " pInValue, bool deep, bool makeCopy)\n{\n");
if (attribs[i].getChoiceElement())
{
c_writer.write("\t// For 'choice' you need to ensure that any\n");
c_writer.write("\t// other objects belonging to this union of elements are NULL.\n");
}
c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
c_writer.write("\t\tdelete " + parameterName + ";\n");
c_writer.write("\t" + parameterName + " = NULL;\n");
c_writer.write("\tif (pInValue != NULL)\n");
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 " + type + "();\n");
c_writer.write("\t\t\t*" + parameterName + " = *pInValue;\n");
c_writer.write("\t\t}\n");
c_writer.write("\t\telse\n");
c_writer.write("\t\t\t" + parameterName + " = pInValue;\n");
c_writer.write("\t}\n");
c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");
c_writer.write("}\n");
}
else
{
c_writer.write("void " + c_classname + "::\nset"
+ methodName + "(" + properParamType + " InValue");
Type attributeType = attribs[i].getType();
boolean isPointerType = false;
if (attributeType.isSimpleType())
isPointerType = CUtils.isPointerType(CUtils.getSimpleType(attributeType.getBaseType()));
else
isPointerType = CUtils.isPointerType(getCorrectParmNameConsideringArraysAndComplexTypes(attribs[i]));
if((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
&& (isPointerType || attribs[i].getAllElement() || attribs[i].getChoiceElement()))
c_writer.write(", bool deep, bool makeCopy");
c_writer.write(")\n{\n");
if (attribs[i].getChoiceElement())
{
c_writer.write("\t// For 'choice' you need to ensure that any\n");
c_writer.write("\t// other objects belonging to this union of elements are NULL.\n");
}
if(isPointerType)
{
c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
c_writer.write("\t\tdelete [] " + parameterName + ";\n");
c_writer.write("\t" + parameterName + " = NULL;\n");
c_writer.write("\tif(InValue != NULL)\n");
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 char[strlen(InValue) + 1];\n");
c_writer.write("\t\t\tstrcpy(" + parameterName + ", InValue);\n");
c_writer.write("\t\t}\n");
c_writer.write("\t\telse\n");
c_writer.write("\t\t\t" + parameterName + " = InValue;\n");
c_writer.write("\t}\n");
c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");
}
else if ((attribs[i].isSimpleType() || attribs[i].getType().isSimpleType())
&& (attribs[i].getAllElement() || attribs[i].getChoiceElement()))
{
c_writer.write("\tif (__axis_deepcopy_" + parameterName + ")\n");
c_writer.write("\t\tdelete " + parameterName + ";\n");
c_writer.write("\t" + parameterName + " = NULL;\n");
c_writer.write("\tif (InValue != NULL)\n");
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 " + type + "();\n");
c_writer.write("\t\t\t*" + parameterName + " = *InValue;\n");
c_writer.write("\t\t}\n");
c_writer.write("\t\telse\n");
c_writer.write("\t\t\t" + parameterName + " = InValue;\n");
c_writer.write("\t}\n");
c_writer.write("\t__axis_deepcopy_" + parameterName + " = deep;\n");
}
else
c_writer.write("\t" + parameterName + " = InValue ; \n");
c_writer.write("}\n");
}
} // for loop
}
catch (IOException e)
{
throw new WrapperFault(e);
}
}