parentSimpleTypeQname = (QName) simpleType.getMetaInfoMap().
get(SchemaConstants.SchemaCompilerInfoHolder.FAKE_QNAME);
}
if (content != null) {
if (content instanceof XmlSchemaSimpleTypeRestriction) {
XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction) content;
QName baseTypeName = restriction.getBaseTypeName();
//check whether the base type is one of the base schema types
if (baseSchemaTypeMap.containsKey(baseTypeName)) {
//process restriction base type
processSimpleRestrictionBaseType(parentSimpleTypeQname,
restriction.getBaseTypeName(), metaInfHolder,
parentSchema);
//process facets
if (!SchemaConstants.XSD_BOOLEAN.equals(baseTypeName)) {
processFacets(restriction.getFacets(), restriction.getBaseTypeName(),
metaInfHolder, parentSchema);
}
} else {
//recurse
// this must be a xmlschema bug
// it should return the schematype for restriction.getBaseType():
XmlSchema resolvedSchema = getParentSchema(parentSchema, baseTypeName,
COMPONENT_TYPE);
if (resolvedSchema == null) {
throw new SchemaCompilationException("can not find the type " + baseTypeName +
" from the parent schema " +
parentSchema.getTargetNamespace());
} else {
XmlSchemaType restrictionBaseType = resolvedSchema.getTypeByName(baseTypeName);
if (restrictionBaseType instanceof XmlSchemaSimpleType) {
if ((restrictionBaseType != null) && (!isAlreadyProcessed(baseTypeName))) {
processSimpleSchemaType((XmlSchemaSimpleType) restrictionBaseType,
null, resolvedSchema, null);
}
// process restriction
processSimpleRestrictionBaseType(parentSimpleTypeQname,
restriction.getBaseTypeName(),
metaInfHolder, resolvedSchema);
}
}
}