This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new fba5ee47da Close the streams returned by Files.walk properly fba5ee47da is described below commit fba5ee47da5ceafd9efacab06e290793084d1000 Author: Peter Palaga <ppal...@redhat.com> AuthorDate: Wed Aug 3 12:29:57 2022 +0200 Close the streams returned by Files.walk properly --- .../core/deployment/CamelNativeImageProcessor.java | 19 +++++---- .../quarkus/core/deployment/util/CamelSupport.java | 37 ++++++++--------- .../quarkus/core/deployment/util/PathFilter.java | 10 ++++- .../component/xslt/deployment/XsltProcessor.java | 47 ++++++++++++---------- .../quarkus/component/ftp/it/FtpTestResource.java | 11 +++-- .../component/sftp/it/SftpTestResource.java | 11 +++-- ...dePatternWithAbsoluteFilePrefixDevModeTest.java | 11 +++-- 7 files changed, 83 insertions(+), 63 deletions(-) diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java index 633bbdea75..f098b261d3 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelNativeImageProcessor.java @@ -16,6 +16,7 @@ */ package org.apache.camel.quarkus.core.deployment; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -197,14 +198,18 @@ public class CamelNativeImageProcessor { continue; } - List<String> items = CamelSupport.safeWalk(resourcePath) - .filter(Files::isRegularFile) - .map(root::relativize) - .map(Path::toString) - .collect(Collectors.toList()); + try (Stream<Path> files = Files.walk(resourcePath)) { + List<String> items = files + .filter(Files::isRegularFile) + .map(root::relativize) + .map(Path::toString) + .collect(Collectors.toList()); + LOGGER.debug("Register catalog json: {}", items); + resources.add(new NativeImageResourceBuildItem(items)); + } catch (IOException e) { + throw new RuntimeException("Could not walk " + resourcePath, e); + } - LOGGER.debug("Register catalog json: {}", items); - resources.add(new NativeImageResourceBuildItem(items)); } } } diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java index c7ee46a0e9..f40f463a24 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java @@ -16,7 +16,6 @@ */ package org.apache.camel.quarkus.core.deployment.util; -import java.io.IOError; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Modifier; @@ -52,14 +51,6 @@ public final class CamelSupport { return (ci.flags() & Modifier.PUBLIC) != 0; } - public static Stream<Path> safeWalk(Path p) { - try { - return Files.walk(p); - } catch (IOException e) { - throw new IOError(e); - } - } - public static Stream<CamelServiceBuildItem> services(ApplicationArchivesBuildItem archives, PathFilter pathFilter) { final Set<CamelServiceBuildItem> answer = new HashSet<>(); final Predicate<Path> filter = pathFilter.asPathPredicate(); @@ -72,19 +63,23 @@ public final class CamelSupport { continue; } - safeWalk(resourcePath).filter(Files::isRegularFile).forEach(file -> { - // the root archive may point to a jar file or the absolute path of - // a project's build output so we need to relativize to make the - // FastFactoryFinder work as expected - Path key = root.relativize(file); - - if (filter.test(key)) { - String clazz = readProperties(file).getProperty("class"); - if (clazz != null) { - answer.add(new CamelServiceBuildItem(key, clazz)); + try (Stream<Path> files = Files.walk(resourcePath)) { + files.filter(Files::isRegularFile).forEach(file -> { + // the root archive may point to a jar file or the absolute path of + // a project's build output so we need to relativize to make the + // FastFactoryFinder work as expected + Path key = root.relativize(file); + + if (filter.test(key)) { + String clazz = readProperties(file).getProperty("class"); + if (clazz != null) { + answer.add(new CamelServiceBuildItem(key, clazz)); + } } - } - }); + }); + } catch (IOException e) { + throw new RuntimeException("Could not walk " + resourcePath, e); + } } } diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/PathFilter.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/PathFilter.java index 1333438cd5..1bca4028ac 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/PathFilter.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/PathFilter.java @@ -16,6 +16,7 @@ */ package org.apache.camel.quarkus.core.deployment.util; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -93,8 +94,13 @@ public class PathFilter { public String[] scanClassNames(Stream<Path> archiveRootDirs) { final Set<String> selectedPaths = new TreeSet<>(); - archiveRootDirs.forEach(rootDir -> scanClassNames(rootDir, CamelSupport.safeWalk(rootDir), - Files::isRegularFile, selectedPaths::add)); + archiveRootDirs.forEach(rootDir -> { + try (Stream<Path> files = Files.walk(rootDir)) { + scanClassNames(rootDir, files, Files::isRegularFile, selectedPaths::add); + } catch (IOException e) { + throw new RuntimeException("Could not walk " + rootDir, e); + } + }); /* Let's add the paths without wildcards even if they did not match any Jandex class * A workaround for https://github.com/apache/camel-quarkus/issues/2969 */ addNonPatternPaths(selectedPaths); diff --git a/extensions/xslt/deployment/src/main/java/org/apache/camel/quarkus/component/xslt/deployment/XsltProcessor.java b/extensions/xslt/deployment/src/main/java/org/apache/camel/quarkus/component/xslt/deployment/XsltProcessor.java index 11748c9355..b0ef7fe3b8 100644 --- a/extensions/xslt/deployment/src/main/java/org/apache/camel/quarkus/component/xslt/deployment/XsltProcessor.java +++ b/extensions/xslt/deployment/src/main/java/org/apache/camel/quarkus/component/xslt/deployment/XsltProcessor.java @@ -26,6 +26,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Stream; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -119,28 +120,32 @@ class XsltProcessor { } } - Files.walk(destination) - .sorted(Comparator.reverseOrder()) - .filter(Files::isRegularFile) - .filter(path -> path.toString().endsWith(".class")) - .forEach(path -> { - try { - final Path rel = destination.relativize(path); - final String fqcn = StringUtils.removeEnd(rel.toString(), ".class").replace(File.separatorChar, - '.'); - final byte[] data = Files.readAllBytes(path); - - generatedClasses.produce(new GeneratedClassBuildItem(false, fqcn, data)); - generatedNames.produce(new XsltGeneratedClassBuildItem(fqcn)); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + try (Stream<Path> files = Files.walk(destination)) { + files + .sorted(Comparator.reverseOrder()) + .filter(Files::isRegularFile) + .filter(path -> path.toString().endsWith(".class")) + .forEach(path -> { + try { + final Path rel = destination.relativize(path); + final String fqcn = StringUtils.removeEnd(rel.toString(), ".class").replace(File.separatorChar, + '.'); + final byte[] data = Files.readAllBytes(path); + + generatedClasses.produce(new GeneratedClassBuildItem(false, fqcn, data)); + generatedNames.produce(new XsltGeneratedClassBuildItem(fqcn)); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + } } finally { - Files.walk(destination) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); + try (Stream<Path> files = Files.walk(destination)) { + files + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } } } diff --git a/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/ftp/it/FtpTestResource.java b/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/ftp/it/FtpTestResource.java index 64ab8cf390..e2713b8a1a 100644 --- a/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/ftp/it/FtpTestResource.java +++ b/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/ftp/it/FtpTestResource.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.stream.Stream; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; import org.apache.camel.quarkus.test.AvailablePortFinder; @@ -120,10 +121,12 @@ public class FtpTestResource implements QuarkusTestResourceLifecycleManager { try { if (ftpRoot != null) { - Files.walk(ftpRoot) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); + try (Stream<Path> files = Files.walk(ftpRoot)) { + files + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } } } catch (Exception e) { LOGGER.warn("Failed delete ftp root: {}, {}", ftpRoot, e); diff --git a/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/sftp/it/SftpTestResource.java b/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/sftp/it/SftpTestResource.java index a27f151cd4..a98764d4db 100644 --- a/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/sftp/it/SftpTestResource.java +++ b/integration-tests/ftp/src/test/java/org/apache/camel/quarkus/component/sftp/it/SftpTestResource.java @@ -23,6 +23,7 @@ import java.nio.file.Path; import java.util.Collections; import java.util.Comparator; import java.util.Map; +import java.util.stream.Stream; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; import org.apache.camel.quarkus.test.AvailablePortFinder; @@ -89,10 +90,12 @@ public class SftpTestResource implements QuarkusTestResourceLifecycleManager { try { if (sftpHome != null) { - Files.walk(sftpHome) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(File::delete); + try (Stream<Path> files = Files.walk(sftpHome)) { + files + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } } } catch (Exception e) { LOGGER.warn("Failed delete sftp home: {}, {}", sftpHome, e); diff --git a/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelMainRoutesIncludePatternWithAbsoluteFilePrefixDevModeTest.java b/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelMainRoutesIncludePatternWithAbsoluteFilePrefixDevModeTest.java index 39ae1853ab..5905c01725 100644 --- a/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelMainRoutesIncludePatternWithAbsoluteFilePrefixDevModeTest.java +++ b/integration-tests/main-devmode/src/test/java/org/apache/camel/quarkus/main/CamelMainRoutesIncludePatternWithAbsoluteFilePrefixDevModeTest.java @@ -27,6 +27,7 @@ import java.util.Comparator; import java.util.Properties; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; +import java.util.stream.Stream; import io.quarkus.test.QuarkusDevModeTest; import io.restassured.RestAssured; @@ -75,10 +76,12 @@ public class CamelMainRoutesIncludePatternWithAbsoluteFilePrefixDevModeTest { deleteFile = File::deleteOnExit; } - Files.walk(BASE) - .sorted(Comparator.reverseOrder()) - .map(Path::toFile) - .forEach(deleteFile); + try (Stream<Path> files = Files.walk(BASE)) { + files + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(deleteFile); + } } public static Asset applicationProperties() {