in src/main/java/org/apache/commons/configuration2/PropertiesConfiguration.java [1380:1423]
private void loadIncludeFile(final String fileName, final boolean optional, final Deque<URL> seenStack) throws ConfigurationException {
if (locator == null) {
throw new ConfigurationException(
"Load operation not properly " + "initialized! Do not call read(InputStream) directly," + " but use a FileHandler to load a configuration.");
}
URL url = locateIncludeFile(locator.getBasePath(), fileName);
if (url == null) {
final URL baseURL = locator.getSourceURL();
if (baseURL != null) {
url = locateIncludeFile(baseURL.toString(), fileName);
}
}
if (optional && url == null) {
return;
}
if (url == null) {
getIncludeListener().accept(new ConfigurationException("Cannot resolve include file " + fileName, new FileNotFoundException(fileName)));
} else {
final FileHandler fh = new FileHandler(this);
fh.setFileLocator(locator);
final FileLocator orgLocator = locator;
try {
try {
// Check for cycles
if (seenStack.contains(url)) {
throw new ConfigurationException(String.format("Cycle detected loading %s, seen stack: %s", url, seenStack));
}
seenStack.add(url);
try {
fh.load(url);
} finally {
seenStack.pop();
}
} catch (final ConfigurationException e) {
getIncludeListener().accept(e);
}
} finally {
locator = orgLocator; // reset locator which is changed by load
}
}
}