/** * Scan WEB-INF/lib and WEB-INF/classes for Controller classes and puts all in controllerClasses * map. * * @throws IOException */ @SuppressWarnings("unchecked") private void collectControllers() throws IOException { AnnotationDB adb = new AnnotationDB(); adb.setScanClassAnnotations(true); adb.setScanFieldAnnotations(false); adb.setScanMethodAnnotations(false); adb.setScanParameterAnnotations(false); adb.scanArchives(WarUrlFinder.findWebInfClassesPath(applicationContext)); adb.scanArchives(WarUrlFinder.findWebInfLibClasspaths(applicationContext)); Set<String> ctrls = adb.getAnnotationIndex().get(Controller.class.getName()); for (String fqcn : ctrls) { Class<? extends BaseController> clazz = null; try { clazz = (Class<? extends BaseController>) Class.forName(fqcn); } catch (Exception e) { log.warn("Class " + fqcn + " not found or not derived from Controller class. Ignoring it."); continue; } Controller controllerAnnotation = clazz.getAnnotation(Controller.class); ControllerInfo controllerInfo = new ControllerInfo(); controllerInfo.controllerClass = clazz; controllerInfo.defaultActionName = controllerAnnotation.defaultAction(); controllers.put(fqcn, controllerInfo); boolean isDefaultController = clazz.getAnnotation(Controller.class).isDefaultController(); if (isDefaultController) { controllers.put(DEFAULT_CONTROLLER_KEY, controllerInfo); } String alias = controllerAnnotation.alias(); if (StringUtils.isNotEmpty(alias)) { alias = alias.trim(); if (alias.contains("/")) { log.warn("Controller alias '" + alias + "' contains illegal characters. Ignoring alias."); alias = null; } else if (controllers.containsKey(alias)) { log.warn( "Duplicate Controller alias '" + alias + "' detected. Used by " + fqcn + " and " + controllers.get(alias).controllerClass.getName() + ". Using alias only for the latter."); alias = null; } else { controllers.put(alias, controllerInfo); } } log.debug( (StringUtils.isNotEmpty(alias) ? alias + ", " : "") + fqcn + " -> " + fqcn + (isDefaultController ? " (default controller)" : "")); collectActions(controllerInfo); } }