code: @Override
  	public Reader getResource(JoinableResourceBundle bundle, String resourceName, boolean processingBundle,
  			List<Class<?>> excludedReader) throws ResourceNotFoundException {
  
  		if (ThreadLocalJawrContext.isInterruptingProcessingBundle()) {
  			throw new InterruptBundlingProcessException();
  		}
  		Reader rd = null;
  
  		String resourceExtension = FileNameUtils.getExtension(resourceName);
  		boolean generatedPath = generatorRegistry.isPathGenerated(resourceName);
  		if (generatedPath || allowedExtensions.contains(resourceExtension.toLowerCase())) {
  			List<TextResourceReader> list = new ArrayList<>();
  			list.addAll(resourceReaders);
  			for (TextResourceReader rsReader : list) {
  				if (!isInstanceOf(rsReader, excludedReader)) {
  					if (!(rsReader instanceof ResourceGenerator)
  							|| ((ResourceGenerator) rsReader).getResolver().matchPath(resourceName)) {
  						try {
  							rd = rsReader.getResource(bundle, resourceName, processingBundle);
  						} catch (Exception e) {
  							if (LOGGER.isDebugEnabled()) {
  								LOGGER.debug("An exception occured while trying to read resource '" + resourceName
  										+ "'. Continuing with other readers. Error : ", e);
  							} else if (LOGGER.isInfoEnabled()) {
  								LOGGER.info("An exception occured while trying to read resource '" + resourceName
  										+ "'. Continuing with other readers. Error : " + e.getMessage());
  							}
  						}
  						if (rd != null) {
  							break;
  						}
  					}
  				}
  			}
  		} else {
  			LOGGER.warn("The resource '" + resourceName + "' will not be read as its extension is not an allowed one.");
  		}
  
  		if (rd == null) {
  			throw new ResourceNotFoundException(resourceName);
  		}
  
  		return rd;
  	}
docs: /*
  (non-Javadoc)
  
  @see
  net.jawr.web.resource.handler.reader.ResourceReaderHandler#getResource(
  net.jawr.web.resource.bundle.JoinableResourceBundle, java.lang.String,
  boolean, java.util.List)