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/12 14:54:00 UTC
[jira] [Closed] (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 closed CONFIGURATION-756.
--------------------------------------
Fix Version/s: 2.6
Resolution: Fixed
In git master.
> 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
> Fix For: 2.6
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> 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 consumer used in {{PropertiesConfiguration}} by introducing a functional interface to consume any type and throw {{ConfigurationException}}:
> {code:java}
> /**
> * A Configuration task that may throw a ConfigurationException.
> *
> * @param <T> the type of the input to the operation.
> * @since 2.6
> */
> @FunctionalInterface
> public interface ConfigurationConsumer<T>
> {
> /**
> * Performs this operation on the given argument.
> *
> * @param t the input argument
> * @throws ConfigurationException TODO
> */
> void accept(T t) throws ConfigurationException;
> }
> {code}
> The above is the common pattern when you need a consumer to throw a checked exception.
> The {{PropertiesConfiguration}} default behavior does not change and is implemented as:
> {code:java}
> /**
> * Defines default error handling for the special {@code "include"} key by throwing the given exception.
> *
> * @since 2.6
> */
> public static final ConfigurationConsumer<ConfigurationException> DEFAULT_INCLUDE_LISTENER = e ->
> {
> throw e;
> };
> {code}
> In addition, a noop implementation is provided for simple use cases and tests:
> {code:java}
> /**
> * Defines error handling as a noop for the special {@code "include"} key.
> *
> * @since 2.6
> */
> public static final ConfigurationConsumer<ConfigurationException> NOOP_INCLUDE_LISTENER = e ->
> {
> // 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)