docs: @Override
  	protected void loadProperties(final Properties props) throws IOException {
  		if (locations != null) {
  			for (int i = 0; i < locations.length; i++) {
  				final Resource location = locations[i];
  				if (logger.isInfoEnabled()) {
  					logger.info("Loading properties file from " + location);
  				}
  				File file = null;
  				InputStream is = null;
  				try {
  					try {
  						file = location.getFile();
  						is = new BufferedInputStream(new FileInputStream(file));
  					} catch (final IOException ie) {// ignore
  					} finally {
  						if (file == null) {
  							is = location.getInputStream();
  						}
  					}
  
  					if (location.getFilename().toLowerCase().endsWith(Constants.XML_FILE_EXTENSION)) {
  						persister.loadFromXml(props, is);
  					} else if (location.getFilename().toLowerCase().endsWith(Constants.JSON_FILE_EXTENSION)) {
  						if (fileEncoding != null) {
  							persister.loadFromJson(props, new InputStreamReader(is, Charset.forName(fileEncoding)));
  						} else {
  							persister.loadFromJson(props, is);
  						}
  					} else if (location.getFilename().toLowerCase().endsWith(Constants.YAML_FILE_EXTENSION)) {
  						if (fileEncoding != null) {
  							persister.loadFromYAML(props, new InputStreamReader(is, Charset.forName(fileEncoding)));
  						} else {
  							persister.loadFromYAML(props, is);
  						}
  					} else {
  						if (fileEncoding != null) {
  							persister.load(props, new InputStreamReader(is, Charset.forName(fileEncoding)));
  						} else {
  							persister.load(props, is);
  						}
  					}
  				} catch (final IOException ex) {
  					if (ignoreResourceNotFound) {
  						if (logger.isWarnEnabled()) {
  							logger.warn("Could not load properties from " + location + ": " + ex.getMessage());
  						}
  					} else {
  						throw ex;
  					}
  				} finally {
  					if (is != null) {
  						is.close();
  					}
  				}
  			}
  		}
  	}