You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Ravi Teja (JIRA)" <ji...@apache.org> on 2016/06/21 20:38:58 UTC
[jira] [Comment Edited] (CONFIGURATION-634) BasePath is incorrectly
computed while init of CompositeConfiguration
[ https://issues.apache.org/jira/browse/CONFIGURATION-634?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15342616#comment-15342616 ]
Ravi Teja edited comment on CONFIGURATION-634 at 6/21/16 8:38 PM:
------------------------------------------------------------------
[~oliver.heger@t-online.de], I've attached a sample project reproducing the same [^CONF634.zip]
Prerequisite to run the code: Install gradle
Create a file called config.properties in your user home.
* In windows it would be: {noformat}%HOMEPATH%\app\config.properties{noformat}
* In linux it would be: {noformat}$HOME/app/config.properties{noformat}
Go into CONF634 folder and run {noformat}gradle run{noformat}
was (Author: bond_):
I've attached a sample project reproducing the same !CONF634.zip!
Prerequisite to run the code: Install gradle
Create a file called config.properties in your user home.
* In windows it would be: {noformat}%HOMEPATH%\app\config.properties{noformat}
* In linux it would be: {noformat}$HOME/app/config.properties{noformat}
Go into CONF634 folder and run {noformat}gradle run{noformat}
> BasePath is incorrectly computed while init of CompositeConfiguration
> ---------------------------------------------------------------------
>
> Key: CONFIGURATION-634
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-634
> Project: Commons Configuration
> Issue Type: Bug
> Affects Versions: 2.0
> Environment: Windows Server 2008 R2
> Oracle JDK 1.8.0_92
> Reporter: Ravi Teja
> Priority: Blocker
> Attachments: CONF634.zip
>
>
> The base path should be just "app" instead of {noformat}file:///C:/path/to/app{noformat} because of which the code is trying to locate config.properties in the following path: {noformat}C:\path\to\file:\C:\path\to\app\config.properties{noformat}
> In the below snippet basepath is good when handler.locate() runs but fails when running handler.load()
> {code:java|title=org.apache.commons.configuration2.builder.FileLocatorUtils}
> protected void initFileHandler(FileHandler handler)
> throws ConfigurationException
> {
> initEncoding(handler);
> if (handler.isLocationDefined())
> {
> handler.locate();
> handler.load();
> }
> }
> {code}
> If you would like to see the basepath being manipulated keep a debug point at file.isFile() in the below snippet
> {code:java|title=org.apache.commons.configuration2.io.HomeDirectoryLocationStrategy}
> public URL locate(FileSystem fileSystem, FileLocator locator)
> {
> if (StringUtils.isNotEmpty(locator.getFileName()))
> {
> String basePath = fetchBasePath(locator);
> File file =
> FileLocatorUtils.constructFile(basePath,
> locator.getFileName());
> if (file.isFile())
> {
> return FileLocatorUtils.convertFileToURL(file);
> }
> }
> return null;
> }
> {code}
> Snippet failing:
> {code:java}
> CompositeConfiguration config = new CompositeConfiguration();
> config.addConfiguration(new SystemConfiguration());
> final FileBasedConfigurationBuilder<FileBasedConfiguration> homeDirConfigurationBuilder
> = new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class);
> final PropertiesBuilderParameters homeDirProperties = new Parameters().properties();
> final FileBasedConfigurationBuilder<FileBasedConfiguration> configurationBuilder
> = new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class);
> final PropertiesBuilderParameters properties = new Parameters().properties();
> FileBasedConfigurationBuilder<FileBasedConfiguration> builder1 = homeDirConfigurationBuilder.configure(
> homeDirProperties.setLocationStrategy(new HomeDirectoryLocationStrategy(true))
> .setBasePath("app")
> .setListDelimiterHandler(new DefaultListDelimiterHandler(','))
> .setFileName("config.properties"));
> FileBasedConfigurationBuilder<FileBasedConfiguration> builder2 = configurationBuilder.configure(
> properties.setLocationStrategy(new ClasspathLocationStrategy())
> .setListDelimiterHandler(new DefaultListDelimiterHandler(','))
> .setFileName("default_config.properties"));
> try {
> // TODO Fails due to a bug in commons configuration FileLocatorUtils#createFullyInitializedLocatorFromURL
> config.addConfiguration(builder1.getConfiguration());
> config.addConfiguration(builder2.getConfiguration());
> } catch (ConfigurationException e) {
> log.warn(configMarker, "Failed to load the properties file, loading defaults", e);
> }
> {code}
> Stacktrace:
> {noformat}
> org.apache.commons.configuration2.ex.ConfigurationException: Could not locate: org.apache.commons.configuration2.io.FileLocator@353d0772[fileName=config.properties,basePath=file:///C:/path/to/app/,sourceURL=file:/C:/path/to/app/config.properties,encoding=ISO-8859-1,fileSystem=<null>,locationStrategy=org.apache.commons.configuration2.io.HomeDirectoryLocationStrategy@10e41621]
> at org.apache.commons.configuration2.io.FileLocatorUtils.locateOrThrow(FileLocatorUtils.java:346) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:972) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.io.FileHandler.load(FileHandler.java:702) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initFileHandler(FileBasedConfigurationBuilder.java:312) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:291) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder.initResultInstance(FileBasedConfigurationBuilder.java:60) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.createResult(BasicConfigurationBuilder.java:421) ~[commons-configuration2-2.0.jar:2.0]
> at org.apache.commons.configuration2.builder.BasicConfigurationBuilder.getConfiguration(BasicConfigurationBuilder.java:285) ~[commons-configuration2-2.0.jar:2.0]
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)