[ 
https://issues.apache.org/jira/browse/CONFIGURATION-655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15942427#comment-15942427
 ] 

Oliver Heger commented on CONFIGURATION-655:
--------------------------------------------

Thanks for creating this ticket. There is for sure room for improvements in 
this area.

Currently, I don't have yet a bright idea how to integrate better support for 
streams into the existing API. It is certainly preferrable to use already 
existing concepts rather than inventig something completely new. So would it be 
possible to extend the {{FileLocator}} and {{FileHandler}} classes in a way 
that an input stream could be specified similar to a File or an URL? We could 
for instance introduce a {{StreamProvider}} interface which just has a 
_getInputStream()_ method. Such a provider would become a property of 
{{FileLocator}} and {{FileHandler}}, and it would also be supported by 
file-based builder parameters.

With such extensions one could create a configuration in the following way:
{code}
XMLConfiguration cfg = new 
FileBasedConfigurationBuilder<>(XMLConfiguration.class)
    .configure(new Parameters().xml().setStreamProvider(new MyStreamProvider()))
    .getConfiguration();
{code}

I am not yet sure how this approach would affect the current loading mechanism 
and the file location strategy (which operates on URLs rather than streams). 
Probably, a {{StreamProvider}} would take precedence over other properties. 
Some experiments would need to be done to verify that nothing gets broken.

But would you in general agree to such an approach or do you have other 
suggestions?

> Reading configuration from InputStream - improvement
> ----------------------------------------------------
>
>                 Key: CONFIGURATION-655
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-655
>             Project: Commons Configuration
>          Issue Type: Improvement
>            Reporter: RafaƂ Figas
>
> The point of this improvement is better handling of configurations loaded 
> from input streams.
> Currently to load configuration from input stream following code should be 
> used:
> {code}
> XMLConfiguration cfg = new 
> BasicConfigurationBuilder<>(XMLConfiguration.class).configure(new 
> Parameters().xml()).getConfiguration();
> FileHandler fh = new FileHandler(cfg);
> fh.load(stream);
> {code}
> In general this looks a little bit odd, because FileHandler is involved, what 
> suggests that configuration has something to do with file, while it is not 
> necessary true. Maybe it would be clearer if either builder, or configuration 
> would be responsible for loading data. I think builder would be even better, 
> because what I expect from builder is to get the configuration object that is 
> complete, contains data and I can work with it's content. From where I get 
> the data should be responsibility of builder. And if I want to save such 
> configuration I should be able to get it as string for example (or byte array 
> or stream) and it is my own responsibility of what will I do with it (save to 
> file, push to webservice etc.).
> AFAIR there is also some kind of configuratio autoupdate feature, but what 
> comes first to my mind is to add such feature to builder. Then builder could 
> create a configuration that is wrapped in appropriate handler responsible for 
> saving updates.
> Just a few humble suggestions that could improve working with this nice 
> library :-). I believe that minimum improvement would be a clear remark in 
> user guide how to load configuration from stream in current version as it is 
> not obvious.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to