private void resolveReferences(TypeDeclaration typeDeclaration) throws UnresolvableReferenceException { LOG.logDebug( "Resolving references in type declaration '" + typeDeclaration.getName().getLocalName() + "'."); if (typeDeclaration instanceof SimpleTypeDeclaration) { LOG.logDebug("SimpleType."); SimpleTypeDeclaration simpleType = (SimpleTypeDeclaration) typeDeclaration; TypeReference typeReference = simpleType.getRestrictionBaseType(); if (typeReference != null) { LOG.logDebug("restriction base='" + typeReference.getName() + "'"); try { resolveType(typeReference); } catch (XMLSchemaException e) { throw new UndefinedXSDTypeException( "Declaration of type '" + typeDeclaration.getName() + "' derives type '" + typeReference.getName() + "' which is not a defined simple type."); } } } else { LOG.logDebug("ComplexType."); ComplexTypeDeclaration complexType = (ComplexTypeDeclaration) typeDeclaration; TypeReference typeReference = complexType.getExtensionBaseType(); if (typeReference != null) { LOG.logDebug("extension base='" + typeReference.getName() + "'"); try { resolveType(typeReference); } catch (XMLSchemaException e) { throw new UndefinedXSDTypeException( "Declaration of type '" + typeDeclaration.getName() + "' derives type '" + typeReference.getName() + "' which is not a defined complex type."); } } ElementDeclaration[] elements = complexType.getExplicitElements(); for (int i = 0; i < elements.length; i++) { resolveReferences(elements[i]); } } }