name = WSDLUtils.getJustClassName(javaType);
}
List<XSParticle> particles = new ArrayList<XSParticle>(0);
List<Class> types = new ArrayList<Class>(0);
JBossXSComplexTypeDefinition complexType = new JBossXSComplexTypeDefinition();
complexType.setName(name);
complexType.setNamespace(namespace);
xsModel.addXSComplexTypeDefinition(complexType);
xsModel.addXSElementDeclaration(sutils.createGlobalXSElementDeclaration(name, complexType, namespace));
typeMapping.register(javaType, new QName(namespace, name), null, null);
generateExceptionParticles(namespace, javaType, types, particles);
registerJavaTypeMapping(new QName(namespace, name), javaType, "complexType", particles, null);
Class superClass = javaType.getSuperclass();
if (!Exception.class.equals(superClass) || Throwable.class.equals(superClass))
{
JBossXSTypeDefinition baseType = generateType(null, superClass);
complexType.setBaseType(baseType);
}
boolean found = hasConstructor(javaType, types);
boolean noarg = found && types.size() == 0;
if (!found || noarg)
{
// Look for a message constructor if a matching constructor could not be found.
// We also prefer message constructors over a noarg constructor
ArrayList<Class> newTypes = new ArrayList<Class>(types);
newTypes.add(0, String.class);
found = hasConstructor(javaType, newTypes);
if (found)
{
insertBaseParticle(particles, "message", String.class, namespace);
}
else
{
// If we have a default (0 argument) constructor, fall back to it
if (!noarg)
throw new IllegalArgumentException("Could not locate a constructor with the following types: " + javaType + ' ' + types);
}
}
complexType.setParticle(createGroupParticle(namespace, particles));
return complexType;
}