public static Map<String, ResourceModel> buildResourceModels( final Set<Class<?>> restliAnnotatedClasses) { Map<Class<?>, ResourceModel> resourceModels = new HashMap<Class<?>, ResourceModel>(); for (Class<?> annotatedClass : restliAnnotatedClasses) { ResourceModel resourceModel = RestLiAnnotationReader.processResource(annotatedClass); resourceModels.put(annotatedClass, resourceModel); } Map<String, ResourceModel> rootResourceModels = new HashMap<String, ResourceModel>(); for (Class<?> annotatedClass : restliAnnotatedClasses) { ResourceModel resourceModel = resourceModels.get(annotatedClass); if (resourceModel.isRoot()) { String path = "/" + resourceModel.getName(); final ResourceModel existingResource = rootResourceModels.get(path); if (existingResource != null) { _log.warn( String.format( "Resource classes \"%s\" and \"%s\" clash on the resource name \"%s\".", existingResource.getResourceClass().getCanonicalName(), resourceModel.getResourceClass().getCanonicalName(), existingResource.getName())); } rootResourceModels.put(path, resourceModel); } else { ResourceModel parentModel = resourceModels.get(resourceModel.getParentResourceClass()); if (parentModel == null) { throw new ResourceConfigException( "Could not find model for parent class'" + resourceModel.getParentResourceClass().getName() + "'for: " + resourceModel.getName()); } resourceModel.setParentResourceModel(parentModel); parentModel.addSubResource(resourceModel.getName(), resourceModel); } } return rootResourceModels; }