You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Gary Gregory (Jira)" <ji...@apache.org> on 2019/09/10 14:40:00 UTC
[jira] [Updated] (CONFIGURATION-756) Allow for custom behavior to
handle errors loading included properties files.
[ https://issues.apache.org/jira/browse/CONFIGURATION-756?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gary Gregory updated CONFIGURATION-756:
---------------------------------------
Description:
The properties file format in Commons Configuration allows for a properties file to load external properties files through a special key called {{"include"}}. This PR allows for a call site to customize what happens when an included file does not exist or is in error.
https://github.com/apache/commons-configuration/pull/34
The main change is to re-implement the current behavior for include error handing through a new interface defined in {{PropertiesConfiguration}}:
{code:java}
/**
* Defines error handling for the special {@code "include"} key.
*
* @since 2.6
*/
public interface IncludeListener
{
/**
* Defines what to do when an include file is missing.
*
* @param fileName the missing file name.
* @throws ConfigurationException Optionally thrown by the implementation to stop processing.
*/
void onFileNotFound(String fileName) throws ConfigurationException;
/**
* Defines what to do when an exception is caught loading a property file.
*
* @param e The exception.
* @throws ConfigurationException Optionally thrown by the implementation to stop processing.
*/
void onLoadException(ConfigurationException e) throws ConfigurationException;
}
{code}
Where the default behavior does not change and is implemented as:
{code:java}
/**
* Defines the default behavior.
*
* @since 2.6
*/
public static class DefaultIncludeListener implements IncludeListener
{
/**
* The singleton instance.
*/
public static final DefaultIncludeListener INSTANCE = new DefaultIncludeListener();
@Override
public void onFileNotFound(final String fileName) throws ConfigurationException
{
throw new ConfigurationException("Cannot resolve include file " + fileName);
}
@Override
public void onLoadException(ConfigurationException e) throws ConfigurationException
{
throw e;
}
}
{code}
In addition, a NOOP implementation is provided for simple use cases and tests:
{code:java}
/**
* Implements all methods as noops.
*
* @since 2.6
*/
public static class NoopIncludeListener implements IncludeListener
{
/**
* The singleton instance.
*/
public static final NoopIncludeListener INSTANCE = new NoopIncludeListener();
@Override
public void onFileNotFound(final String fileName) throws ConfigurationException
{
// noop
}
@Override
public void onLoadException(ConfigurationException e) throws ConfigurationException
{
// noop
}
}
{code}
You can set an include listener through new methods in {{PropertiesConfiguration}} and through the fluent API as well. See the PR for details.
Note that this PR does not address detecting cyclical include files but does include a new test method which is decorated with {{@Ignore}}.
was:The properties file format in Commons Configuration allows for a properties file to load external properties files through a special key called {{"include"}}. This PR allows for a call site to customize what happens when an included file does not exist or is in error.
> Allow for custom behavior to handle errors loading included properties files.
> -----------------------------------------------------------------------------
>
> Key: CONFIGURATION-756
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-756
> Project: Commons Configuration
> Issue Type: New Feature
> Reporter: Gary Gregory
> Assignee: Gary Gregory
> Priority: Major
>
> The properties file format in Commons Configuration allows for a properties file to load external properties files through a special key called {{"include"}}. This PR allows for a call site to customize what happens when an included file does not exist or is in error.
> https://github.com/apache/commons-configuration/pull/34
> The main change is to re-implement the current behavior for include error handing through a new interface defined in {{PropertiesConfiguration}}:
> {code:java}
> /**
> * Defines error handling for the special {@code "include"} key.
> *
> * @since 2.6
> */
> public interface IncludeListener
> {
> /**
> * Defines what to do when an include file is missing.
> *
> * @param fileName the missing file name.
> * @throws ConfigurationException Optionally thrown by the implementation to stop processing.
> */
> void onFileNotFound(String fileName) throws ConfigurationException;
> /**
> * Defines what to do when an exception is caught loading a property file.
> *
> * @param e The exception.
> * @throws ConfigurationException Optionally thrown by the implementation to stop processing.
> */
> void onLoadException(ConfigurationException e) throws ConfigurationException;
> }
> {code}
> Where the default behavior does not change and is implemented as:
> {code:java}
> /**
> * Defines the default behavior.
> *
> * @since 2.6
> */
> public static class DefaultIncludeListener implements IncludeListener
> {
> /**
> * The singleton instance.
> */
> public static final DefaultIncludeListener INSTANCE = new DefaultIncludeListener();
> @Override
> public void onFileNotFound(final String fileName) throws ConfigurationException
> {
> throw new ConfigurationException("Cannot resolve include file " + fileName);
> }
> @Override
> public void onLoadException(ConfigurationException e) throws ConfigurationException
> {
> throw e;
> }
> }
> {code}
> In addition, a NOOP implementation is provided for simple use cases and tests:
> {code:java}
> /**
> * Implements all methods as noops.
> *
> * @since 2.6
> */
> public static class NoopIncludeListener implements IncludeListener
> {
> /**
> * The singleton instance.
> */
> public static final NoopIncludeListener INSTANCE = new NoopIncludeListener();
> @Override
> public void onFileNotFound(final String fileName) throws ConfigurationException
> {
> // noop
> }
> @Override
> public void onLoadException(ConfigurationException e) throws ConfigurationException
> {
> // noop
> }
> }
> {code}
> You can set an include listener through new methods in {{PropertiesConfiguration}} and through the fluent API as well. See the PR for details.
> Note that this PR does not address detecting cyclical include files but does include a new test method which is decorated with {{@Ignore}}.
>
--
This message was sent by Atlassian Jira
(v8.3.2#803003)