in axis-codegen/src/main/java/org/apache/axis/wsdl/toJava/JavaBeanWriter.java [269:416]
protected void preprocess() {
// Add element names
if (elements != null) {
// Check the inheritance chain for xs:any and xs:mixed
TypeEntry parent = extendType;
while ((!parentIsAny || !parentIsMixed) && parent != null) {
if (SchemaUtils.isMixed(parent.getNode())) {
parentIsMixed = true;
}
Vector hisElements = parent.getContainedElements();
for (int i = 0; hisElements != null && i < hisElements.size(); i++) {
ElementDecl elem = (ElementDecl) hisElements.get(i);
if (elem.getAnyElement()) {
parentIsAny = true;
}
}
parent =
SchemaUtils.getComplexElementExtensionBase(parent.getNode(),
emitter.getSymbolTable());
}
for (int i = 0; i < elements.size(); i++) {
ElementDecl elem = (ElementDecl) elements.get(i);
String typeName = elem.getType().getName();
String variableName = null;
if (elem.getAnyElement()) {
if (!parentIsAny && !parentIsMixed) {
typeName = "org.apache.axis.message.MessageElement []";
variableName = Constants.ANYCONTENT;
}
isAny = true;
} else {
variableName = elem.getName();
typeName = processTypeName(elem, typeName);
}
if (variableName == null) {
continue;
}
// Make sure the property name is not reserved.
variableName = JavaUtils.getUniqueValue(
helper.reservedPropNames, variableName);
names.add(typeName);
names.add(variableName);
if (type.isSimpleType()
&& (variableName.endsWith("Value")
|| variableName.equals("_value"))) {
simpleValueTypes.add(typeName);
}
// bug 19069: need to generate code that access member variables that
// are enum types through the class interface, not the constructor
// this util method returns non-null if the type at node is an enum
if (null != Utils.getEnumerationBaseAndValues(
elem.getType().getNode(), emitter.getSymbolTable())) {
enumerationTypes.add(typeName);
}
}
}
if (enableMemberFields && SchemaUtils.isMixed(type.getNode())) {
isMixed = true;
if (!isAny && !parentIsAny && !parentIsMixed) {
names.add("org.apache.axis.message.MessageElement []");
names.add(Constants.ANYCONTENT);
}
}
// Add attribute names
if (attributes != null) {
for (int i = 0; i < attributes.size(); i++) {
ContainedAttribute attr = (ContainedAttribute) attributes.get(i);
String typeName = attr.getType().getName();
String variableName = getAttributeName(attr);
// TODO - What about MinOccurs and Nillable?
// Do they make sense here?
if (attr.getOptional()) {
typeName = Utils.getWrapperType(typeName);
}
// Make sure the property name is not reserved.
variableName = JavaUtils.getUniqueValue(
helper.reservedPropNames, variableName);
names.add(typeName);
names.add(variableName);
if (type.isSimpleType()
&& (variableName.endsWith("Value")
|| variableName.equals("_value"))) {
simpleValueTypes.add(typeName);
}
// bug 19069: need to generate code that access member variables that
// are enum types through the class interface, not the constructor
// this util method returns non-null if the type at node is an enum
if (null != Utils.getEnumerationBaseAndValues(attr.getType().getNode(),
emitter.getSymbolTable())) {
enumerationTypes.add(typeName);
}
}
}
if ((extendType != null) && extendType.getDimensions().equals("[]")) {
String typeName = extendType.getName();
String elemName = extendType.getQName().getLocalPart();
String variableName = JavaUtils.xmlNameToJava(elemName);
names.add(typeName);
names.add(variableName);
}
if((extendType != null) && (Utils.getEnumerationBaseAndValues(
extendType.getNode(), emitter.getSymbolTable()) != null)){
enableDefaultConstructor = false;
}
// Check for duplicate names and make them unique
// Start at index 2 and go by twos
for (int i = 1; i < names.size(); i +=2)
{
int suffix = 2; // the number we append to the name
String s = (String) names.elementAt(i);
if (i < names.size() - 2)
{
int dup = names.indexOf(s, i+1);
while (dup > 0)
{
// duplicate name, tack a number on the end
names.set(dup, names.get(dup) + Integer.toString(suffix));
suffix++;
// get out if we don't have more
if (i >= names.size() - 2)
break;
dup = names.indexOf(s, dup+1);
}
}
}
}