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)