You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Luca Burgazzoli (Jira)" <ji...@apache.org> on 2021/02/01 17:14:02 UTC

[jira] [Comment Edited] (CAMEL-16127) Revisit PackageScanResourceResolver

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

Luca Burgazzoli edited comment on CAMEL-16127 at 2/1/21, 5:13 PM:
------------------------------------------------------------------

[~davsclaus], [~acosentino] what do you think ?


was (Author: lb):
[~davsclaus] [~acosentino] what do you think ?

> Revisit PackageScanResourceResolver
> -----------------------------------
>
>                 Key: CAMEL-16127
>                 URL: https://issues.apache.org/jira/browse/CAMEL-16127
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core, camel-core-api
>            Reporter: Luca Burgazzoli
>            Priority: Minor
>             Fix For: 3.9.0
>
>
> The PackageScanResourceResolver has two methods to resolve resources:
> {code:java}
> Set<InputStream> findResources(String location) throws Exception;
> Set<String> findResourceNames(String location) throws Exception;
> {code}
> The default implementation provided by DefaultPackageScanResourceResolver is:
> {code:java}
> @Override
> public Set<String> findResourceNames(String location) throws Exception {
>     Set<KeyValueHolder<String, InputStream>> answer = new LinkedHashSet<>();
>     doFindResources(location, answer);
>     return answer.stream().map(KeyValueHolder::getKey).collect(Collectors.toSet());
> }
> @Override
> public Set<InputStream> findResources(String location) throws Exception {
>     Set<KeyValueHolder<String, InputStream>> answer = new LinkedHashSet<>();
>     doFindResources(location, answer);
>     return answer.stream().map(KeyValueHolder::getValue).collect(Collectors.toSet());
> }
> {code}
> There are two issues here:
> 1. findResourceNames leaks resources as the InpuStreams found by doFindResources are never closed.  
> 2. is is not possible to correlate an InputStream with the related resource name which would be useful for CAMEL-15560
> I'd propose to refactor this interface to something like:
> {code:java}
> Map<String, ThrowingSupplier<InputStream>> findResources();
> default Collection<String> findResourceNames()  throws Exception {
>     return findResources().keySet():
> }
> default Collection<InputStream> findResourceStreams() throws Exception {
>     Collection<ThrowingSupplier<InputStream>> values = findResources().values();
>     List<InputStream> answer = new ArrayList(values.size());
>     for (ThrowingSupplier<InputStream> supplier : values) {
>         streams.add(supplier.get());
>     }
>     return answer;
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)