This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 3c7adb48d53c fix(dsl): camel jbang resource leaks
3c7adb48d53c is described below
commit 3c7adb48d53c90c14d324eff20f0f344fabc29e6
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Nov 27 09:06:35 2025 +0100
fix(dsl): camel jbang resource leaks
Closing various streams left opened. Additionally some other dead code
removal and logging where missing.
---
.../camel/jbang/console/SourceDirDevConsole.java | 9 ++-
.../dsl/jbang/core/commands/ExportBaseCommand.java | 8 +-
.../apache/camel/dsl/jbang/core/commands/Init.java | 50 +++++++------
.../apache/camel/dsl/jbang/core/commands/Run.java | 39 ++--------
.../camel/dsl/jbang/core/commands/RunHelper.java | 17 ++---
.../core/commands/infra/InfraBaseCommand.java | 26 ++++---
.../dsl/jbang/core/commands/infra/InfraLog.java | 26 +++----
.../dsl/jbang/core/commands/infra/InfraRun.java | 32 ++++----
.../dsl/jbang/core/commands/update/UpdateRun.java | 14 ++--
.../camel/dsl/jbang/core/common/CatalogLoader.java | 6 ++
.../camel/dsl/jbang/core/common/PathUtils.java | 5 +-
.../camel/dsl/jbang/core/common/PluginHelper.java | 5 ++
.../commands/generate/CodeSchemaGenerator.java | 68 ++++++++---------
.../core/commands/test/TestPluginExporter.java | 86 +++++++++++-----------
14 files changed, 196 insertions(+), 195 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
b/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
index d91a2acfc366..0210e576f26e 100644
---
a/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
+++
b/dsl/camel-jbang/camel-jbang-console/src/main/java/org/apache/camel/jbang/console/SourceDirDevConsole.java
@@ -25,6 +25,7 @@ import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.camel.Exchange;
import org.apache.camel.impl.console.ConsoleHelper;
@@ -64,8 +65,8 @@ public class SourceDirDevConsole extends AbstractDevConsole {
// list files in this directory
Path dir = Paths.get(reload.getFolder());
if (Files.exists(dir) && Files.isDirectory(dir)) {
- try {
- List<Path> files =
Files.list(dir).collect(Collectors.toList());
+ try (Stream<Path> streams = Files.list(dir)) {
+ List<Path> files = streams.collect(Collectors.toList());
if (!files.isEmpty()) {
sb.append("Files:\n");
// sort files by name (ignore case)
@@ -131,8 +132,8 @@ public class SourceDirDevConsole extends AbstractDevConsole
{
// list files in this directory
Path dir = Paths.get(reload.getFolder());
if (Files.exists(dir) && Files.isDirectory(dir)) {
- try {
- List<Path> files =
Files.list(dir).collect(Collectors.toList());
+ try (Stream<Path> streams = Files.list(dir)) {
+ List<Path> files = streams.collect(Collectors.toList());
if (!files.isEmpty()) {
// sort files by name (ignore case)
files.sort((o1, o2) ->
o1.getFileName().toString().compareToIgnoreCase(o2.getFileName().toString()));
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 0f84ef2cd492..c0e8ae052d5e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -45,6 +45,7 @@ import java.util.jar.JarFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.dsl.jbang.core.commands.catalog.KameletCatalogHelper;
@@ -1216,9 +1217,8 @@ public abstract class ExportBaseCommand extends
CamelCommand {
}
protected void copyApplicationPropertiesFiles(Path srcResourcesDir) throws
Exception {
- try {
- Files.list(exportBaseDir)
- .filter(p -> Files.isRegularFile(p))
+ try (Stream<Path> files = Files.list(exportBaseDir)) {
+ files.filter(p -> Files.isRegularFile(p))
.filter(p -> {
String fileName = p.getFileName().toString();
String ext = FileUtil.onlyExt(fileName);
@@ -1246,7 +1246,7 @@ public abstract class ExportBaseCommand extends
CamelCommand {
}
});
} catch (IOException e) {
- // Ignore
+ printer().printErr("Error copying application properties due to: "
+ e.getMessage());
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index d12c9224ef9c..30e4f1174211 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -248,18 +248,19 @@ public class Init extends CamelCommand {
}
CamelContext tiny = new DefaultCamelContext();
- GitHubResourceResolver resolver = new GitHubResourceResolver();
- resolver.setCamelContext(tiny);
- for (String u : all.toString().split(",")) {
- Resource resource = resolver.resolve(u);
- if (!resource.exists()) {
- throw new ResourceDoesNotExist(resource);
- }
- String loc = resource.getLocation();
- String name = FileUtil.stripPath(loc);
- Path targetPath = Paths.get(directory, name);
- try (OutputStream os = Files.newOutputStream(targetPath)) {
- IOUtils.copy(resource.getInputStream(), os);
+ try (GitHubResourceResolver resolver = new
GitHubResourceResolver()) {
+ resolver.setCamelContext(tiny);
+ for (String u : all.toString().split(",")) {
+ Resource resource = resolver.resolve(u);
+ if (!resource.exists()) {
+ throw new ResourceDoesNotExist(resource);
+ }
+ String loc = resource.getLocation();
+ String name = FileUtil.stripPath(loc);
+ Path targetPath = Paths.get(directory, name);
+ try (OutputStream os = Files.newOutputStream(targetPath)) {
+ IOUtils.copy(resource.getInputStream(), os);
+ }
}
}
}
@@ -284,18 +285,19 @@ public class Init extends CamelCommand {
}
CamelContext tiny = new DefaultCamelContext();
- GistResourceResolver resolver = new GistResourceResolver();
- resolver.setCamelContext(tiny);
- for (String u : all.toString().split(",")) {
- Resource resource = resolver.resolve(u);
- if (!resource.exists()) {
- throw new ResourceDoesNotExist(resource);
- }
- String loc = resource.getLocation();
- String name = FileUtil.stripPath(loc);
- Path targetPath = Paths.get(directory, name);
- try (OutputStream os = Files.newOutputStream(targetPath)) {
- IOUtils.copy(resource.getInputStream(), os);
+ try (GistResourceResolver resolver = new GistResourceResolver()) {
+ resolver.setCamelContext(tiny);
+ for (String u : all.toString().split(",")) {
+ Resource resource = resolver.resolve(u);
+ if (!resource.exists()) {
+ throw new ResourceDoesNotExist(resource);
+ }
+ String loc = resource.getLocation();
+ String name = FileUtil.stripPath(loc);
+ Path targetPath = Paths.get(directory, name);
+ try (OutputStream os = Files.newOutputStream(targetPath)) {
+ IOUtils.copy(resource.getInputStream(), os);
+ }
}
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index dcde4ffc5ae8..1f1248dbed3a 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -38,6 +38,7 @@ import java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
@@ -536,10 +537,9 @@ public class Run extends CamelCommand {
if (!empty && autoDetectFiles) {
if (sourceDir != null) {
// silent-run then auto-detect all initial files for source-dir
- try {
- Path sourceDirPath = Paths.get(sourceDir);
- Files.list(sourceDirPath)
- .forEach(p ->
files.add(sourceDirPath.resolve(p.getFileName()).toString()));
+ Path sourceDirPath = Paths.get(sourceDir);
+ try (Stream<Path> paths = Files.list(sourceDirPath)) {
+ paths.forEach(p ->
files.add(sourceDirPath.resolve(p.getFileName()).toString()));
} catch (IOException e) {
// Ignore
}
@@ -2066,10 +2066,9 @@ public class Run extends CamelCommand {
}
protected static void removeDir(Path directory) {
- try {
- if (Files.exists(directory)) {
- Files.walk(directory)
- .sorted(java.util.Comparator.reverseOrder())
+ if (Files.exists(directory)) {
+ try (Stream<Path> files = Files.walk(directory)) {
+ files.sorted(java.util.Comparator.reverseOrder())
.forEach(path -> {
try {
Files.deleteIfExists(path);
@@ -2082,29 +2081,7 @@ public class Run extends CamelCommand {
}
}
});
- }
- } catch (IOException e) {
- // Ignore
- }
- }
-
- private static void delete(Path path) {
- try {
- if (!Files.deleteIfExists(path)) {
- try {
- Thread.sleep(10);
- } catch (InterruptedException ex) {
- Thread.currentThread().interrupt();
- }
- if (!Files.deleteIfExists(path)) {
- path.toFile().deleteOnExit();
- }
- }
- } catch (IOException e) {
- // Fallback to deleteOnExit
- try {
- path.toFile().deleteOnExit();
- } catch (Exception ex) {
+ } catch (IOException e) {
// Ignore
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
index 0cdc018b4831..4cdf6dcd3c85 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
@@ -287,15 +287,14 @@ public final class RunHelper {
*/
public static void dirToFiles(String dir, List<String> files) {
files.clear();
- try {
- Files.list(Paths.get(dir))
- .filter(p -> {
- try {
- return Files.isRegularFile(p) &&
!Files.isHidden(p);
- } catch (IOException e) {
- return false;
- }
- })
+ try (Stream<Path> paths = Files.list(Paths.get(dir))) {
+ paths.filter(p -> {
+ try {
+ return Files.isRegularFile(p) && !Files.isHidden(p);
+ } catch (IOException e) {
+ return false;
+ }
+ })
.forEach(f -> files.add(dir + "/" + f.getFileName()));
} catch (IOException e) {
// Ignore
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
index cc22ac3d7b7f..ee92d66eb8c3 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
@@ -33,6 +33,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.MapperFeature;
@@ -86,18 +87,19 @@ public abstract class InfraBaseCommand extends CamelCommand
{
final String pattern = name;
- List<Path> pidFiles = Files.list(CommandLineHelper.getCamelDir())
- .filter(p -> {
- var n = p.getFileName().toString();
- return n.startsWith("infra-") && n.endsWith(".json");
- })
- .toList();
- for (Path pidFile : pidFiles) {
- String fn = pidFile.getFileName().toString();
- String sn = fn.substring(fn.indexOf("-") + 1, fn.lastIndexOf('-'));
- String pid = fn.substring(fn.lastIndexOf("-") + 1,
fn.lastIndexOf('.'));
- if (pid.equals(pattern) || PatternHelper.matchPattern(sn,
pattern)) {
- pids.put(Long.valueOf(pid), pidFile);
+ try (Stream<Path> files = Files.list(CommandLineHelper.getCamelDir()))
{
+ List<Path> pidFiles = files.filter(p -> {
+ var n = p.getFileName().toString();
+ return n.startsWith("infra-") && n.endsWith(".json");
+ })
+ .toList();
+ for (Path pidFile : pidFiles) {
+ String fn = pidFile.getFileName().toString();
+ String sn = fn.substring(fn.indexOf("-") + 1,
fn.lastIndexOf('-'));
+ String pid = fn.substring(fn.lastIndexOf("-") + 1,
fn.lastIndexOf('.'));
+ if (pid.equals(pattern) || PatternHelper.matchPattern(sn,
pattern)) {
+ pids.put(Long.valueOf(pid), pidFile);
+ }
}
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
index 8b83dc2de913..050566dba05e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import java.util.stream.Stream;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
@@ -53,12 +54,11 @@ public class InfraLog extends InfraBaseCommand {
List<Future<?>> futures = new ArrayList<>();
if (serviceName == null || serviceName.isEmpty()) {
// Log everything
- try {
- List<Path> logFiles =
Files.list(CommandLineHelper.getCamelDir())
- .filter(p -> {
- String name = p.getFileName().toString();
- return name.startsWith("infra-") &&
name.endsWith(".log");
- })
+ try (Stream<Path> files =
Files.list(CommandLineHelper.getCamelDir())) {
+ List<Path> logFiles = files.filter(p -> {
+ String name = p.getFileName().toString();
+ return name.startsWith("infra-") && name.endsWith(".log");
+ })
.toList();
for (Path logFile : logFiles) {
@@ -77,12 +77,11 @@ public class InfraLog extends InfraBaseCommand {
String alias = serviceName.get(0);
Path logFile = null;
- try {
- logFile = Files.list(CommandLineHelper.getCamelDir())
- .filter(p -> {
- String name = p.getFileName().toString();
- return name.startsWith("infra-" + alias + "-") &&
name.endsWith(".log");
- })
+ try (Stream<Path> files =
Files.list(CommandLineHelper.getCamelDir())) {
+ logFile = files.filter(p -> {
+ String name = p.getFileName().toString();
+ return name.startsWith("infra-" + alias + "-") &&
name.endsWith(".log");
+ })
.findFirst()
.orElse(null);
} catch (IOException e) {
@@ -150,10 +149,9 @@ public class InfraLog extends InfraBaseCommand {
@Override
public void init(Tailer tailer) {
this.self = tailer;
- try {
+ try (ReversedLinesFileReader fileReader = new
ReversedLinesFileReader(tailer.getFile())) {
StringBuilder sb = new StringBuilder();
int linesToRead = 50;
- ReversedLinesFileReader fileReader = new
ReversedLinesFileReader(tailer.getFile());
for (int i = 0; i < linesToRead; i++) {
String line = fileReader.readLine();
if (line == null) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
index ae343a0df154..41fab4f40af5 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraRun.java
@@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.common.Printer;
import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
import org.apache.camel.main.download.DependencyDownloaderClassLoader;
import org.apache.camel.main.download.MavenDependencyDownloader;
@@ -134,7 +135,7 @@ public class InfraRun extends InfraBaseCommand {
protected Integer doRun(String testService, String
testServiceImplementation, TestInfraService testInfraService)
throws Exception {
- DependencyDownloaderClassLoader cl =
getDependencyDownloaderClassLoader(testInfraService);
+ DependencyDownloaderClassLoader cl =
getDependencyDownloaderClassLoader(testInfraService, printer());
// Update the class loader
Thread.currentThread().setContextClassLoader(cl);
@@ -288,21 +289,24 @@ public class InfraRun extends InfraBaseCommand {
}
private static DependencyDownloaderClassLoader
getDependencyDownloaderClassLoader(
- TestInfraService testInfraService) {
+ TestInfraService testInfraService, Printer printer) {
DependencyDownloaderClassLoader cl = new
DependencyDownloaderClassLoader(InfraRun.class.getClassLoader());
- MavenDependencyDownloader downloader = new MavenDependencyDownloader();
- downloader.setClassLoader(cl);
- downloader.start();
- // download required camel-test-infra-* dependency
- downloader.downloadDependency(testInfraService.groupId(),
- testInfraService.artifactId(),
- testInfraService.version(), true);
-
- MavenArtifact ma =
downloader.downloadArtifact(testInfraService.groupId(),
- testInfraService.artifactId(),
- testInfraService.version());
- cl.addFile(ma.getFile());
+ try (MavenDependencyDownloader downloader = new
MavenDependencyDownloader()) {
+ downloader.setClassLoader(cl);
+ downloader.start();
+ // download required camel-test-infra-* dependency
+ downloader.downloadDependency(testInfraService.groupId(),
+ testInfraService.artifactId(),
+ testInfraService.version(), true);
+
+ MavenArtifact ma =
downloader.downloadArtifact(testInfraService.groupId(),
+ testInfraService.artifactId(),
+ testInfraService.version());
+ cl.addFile(ma.getFile());
+ } catch (Exception e) {
+ printer.printErr(e);
+ }
return cl;
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
index a31d302f8257..c2b16665cdba 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateRun.java
@@ -24,6 +24,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
@@ -57,13 +58,14 @@ public class UpdateRun extends CamelCommand {
*/
@Override
public Integer doCall() throws Exception {
- // Check if the current directory contains a Maven project (i.e., a
pom.xml file)
- if (Files.list(Path.of("."))
- .noneMatch(f -> f.getFileName().toString().equals("pom.xml")))
{
- printer().println("No Maven Project found in the current
directory, " +
- "please execute camel upgrade run command in the
directory containing the Maven project to update");
+ try (Stream<Path> files = Files.list(Path.of("."))) {
+ // Check if the current directory contains a Maven project (i.e.,
a pom.xml file)
+ if (files.noneMatch(f ->
f.getFileName().toString().equals("pom.xml"))) {
+ printer().println("No Maven Project found in the current
directory, " +
+ "please execute camel upgrade run command in
the directory containing the Maven project to update");
- return -1;
+ return -1;
+ }
}
List<String> command = new ArrayList<>();
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
index 56432636f791..d7c91fb88563 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
@@ -85,6 +85,7 @@ public final class CatalogLoader {
answer.enableCache();
} finally {
downloader.stop();
+ downloader.close();
}
return answer;
@@ -145,6 +146,7 @@ public final class CatalogLoader {
answer.enableCache();
} finally {
downloader.stop();
+ downloader.close();
}
return answer;
@@ -225,6 +227,7 @@ public final class CatalogLoader {
answer.enableCache();
} finally {
downloader.stop();
+ downloader.close();
}
return answer;
@@ -252,6 +255,7 @@ public final class CatalogLoader {
}
} finally {
downloader.stop();
+ downloader.close();
}
return null;
@@ -280,6 +284,7 @@ public final class CatalogLoader {
}
} finally {
downloader.stop();
+ downloader.close();
}
return null;
@@ -306,6 +311,7 @@ public final class CatalogLoader {
}
} finally {
downloader.stop();
+ downloader.close();
}
return null;
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
index 59780c8218ce..1840bd20712c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PathUtils.java
@@ -98,9 +98,8 @@ public final class PathUtils {
return false;
}
- try {
- Files.walk(directory)
- .sorted(java.util.Comparator.reverseOrder())
+ try (Stream<Path> paths = Files.walk(directory)) {
+ paths.sorted(java.util.Comparator.reverseOrder())
.forEach(path -> {
try {
Files.deleteIfExists(path);
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
index f590afd90401..76281564eb1c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
@@ -215,6 +215,11 @@ public final class PluginHelper {
throw new RuntimeCamelException(String.format("Failed to read the
file %s.", path), e);
} finally {
downloader.stop();
+ try {
+ downloader.close();
+ } catch (Exception e) {
+ printer.printErr(e);
+ }
IOHelper.close(in);
}
return instance;
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
index 2a2c944a857a..2d7f6d26ef23 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeSchemaGenerator.java
@@ -114,15 +114,14 @@ public class CodeSchemaGenerator extends CamelCommand {
SchemaGeneratorConfig config =
createSchemaGeneratorConfig(jacksonModule);
SchemaGenerator generator = new SchemaGenerator(config);
- // Download dependencies and create class loader
- DependencyDownloaderClassLoader cl =
getDependencyDownloaderClassLoader(camelComponent, camelVersion, verbose);
- if (cl == null) {
- return 1; // Error already reported
- }
-
// Set context class loader
ClassLoader originalClassLoader =
Thread.currentThread().getContextClassLoader();
- try {
+ // Download dependencies and create class loader
+ try (DependencyDownloaderClassLoader cl
+ = getDependencyDownloaderClassLoader(camelComponent,
camelVersion, verbose)) {
+ if (cl == null) {
+ return 1; // Error already reported
+ }
Thread.currentThread().setContextClassLoader(cl);
// Load the target class
@@ -177,7 +176,8 @@ public class CodeSchemaGenerator extends CamelCommand {
}
/**
- * Downloads dependencies and creates a class loader for the specified
Camel component.
+ * Downloads dependencies and creates a class loader for the specified
Camel component. NOTE: Make sure to close the
+ * stream after using it!
*
* @param camelComponent The name of the Camel component
* @param version The Camel version to use
@@ -195,36 +195,38 @@ public class CodeSchemaGenerator extends CamelCommand {
DependencyDownloaderClassLoader cl = new
DependencyDownloaderClassLoader(
CodeSchemaGenerator.class.getClassLoader());
- MavenDependencyDownloader downloader = new
MavenDependencyDownloader();
- downloader.setClassLoader(cl);
- downloader.setDownload(download);
- downloader.setRepositories(repositories);
- downloader.start();
+ try (MavenDependencyDownloader downloader = new
MavenDependencyDownloader()) {
+ downloader.setClassLoader(cl);
+ downloader.setDownload(download);
+ downloader.setRepositories(repositories);
+ downloader.start();
- if (verbose) {
- printer().println("Downloading artifacts for camel-" +
camelComponent + ":" + version);
- }
+ if (verbose) {
+ printer().println("Downloading artifacts for camel-" +
camelComponent + ":" + version);
+ }
- List<MavenArtifact> artifacts = downloader.downloadArtifacts(
- "org.apache.camel",
- "camel-" + camelComponent,
- version,
- true);
-
- if (artifacts == null || artifacts.isEmpty()) {
- printer().printErr(
- "Error: No artifacts found for component 'camel-" +
camelComponent + "' version '" + version + "'");
- printer().printErr("Please verify that the component name is
correct and the version exists.");
- printer().printErr("Available components can be found at:
https://camel.apache.org/components/");
- return null;
- }
+ List<MavenArtifact> artifacts = downloader.downloadArtifacts(
+ "org.apache.camel",
+ "camel-" + camelComponent,
+ version,
+ true);
+
+ if (artifacts == null || artifacts.isEmpty()) {
+ printer().printErr(
+ "Error: No artifacts found for component 'camel-"
+ camelComponent + "' version '" + version + "'");
+ printer().printErr("Please verify that the component name
is correct and the version exists.");
+ printer().printErr("Available components can be found at:
https://camel.apache.org/components/");
+ return null;
+ }
- if (verbose) {
- printer().println("Downloaded " + artifacts.size() + "
artifact(s)");
- artifacts.forEach(artifact -> printer().println(" - " +
artifact.getFile().getName()));
+ if (verbose) {
+ printer().println("Downloaded " + artifacts.size() + "
artifact(s)");
+ artifacts.forEach(artifact -> printer().println(" - " +
artifact.getFile().getName()));
+ }
+
+ artifacts.forEach(artifact -> cl.addFile(artifact.getFile()));
}
- artifacts.forEach(artifact -> cl.addFile(artifact.getFile()));
return cl;
} catch (Exception e) {
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
b/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
index a10a8d0ea6a9..2bf527e832d5 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-test/src/main/java/org/apache/camel/dsl/jbang/core/commands/test/TestPluginExporter.java
@@ -30,6 +30,7 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.camel.dsl.jbang.core.commands.ExportHelper;
import org.apache.camel.dsl.jbang.core.common.PluginExporter;
@@ -134,55 +135,58 @@ public class TestPluginExporter implements PluginExporter
{
ExportHelper.safeCopy(testProfile,
srcTestResourcesDir.resolve("application.test.properties"), true);
}
- // Add all supported test sources
- Set<Path> testSources = Files.list(testDir)
- .filter(path -> !path.getFileName().toString().startsWith("."))
- .filter(path -> {
- String ext =
FileUtils.getFileExtension(path.getFileName().toString());
- return CitrusSettings.getTestFileNamePattern(ext)
- .stream()
- .map(Pattern::compile)
- .anyMatch(pattern ->
pattern.matcher(path.getFileName().toString()).matches());
- }).collect(Collectors.toSet());
-
- for (Path testSource : testSources) {
- String ext =
FileUtils.getFileExtension(testSource.getFileName().toString());
- if (ext.equals("java")) {
- Path javaSource;
- if (packageName != null) {
- javaSource =
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" +
testSource.getFileName());
- } else {
- javaSource =
srcTestSrcDir.resolve(testSource.getFileName());
- }
+ try (Stream<Path> paths = Files.list(testDir)) {
+ // Add all supported test sources
+ Set<Path> testSources = paths
+ .filter(path ->
!path.getFileName().toString().startsWith("."))
+ .filter(path -> {
+ String ext =
FileUtils.getFileExtension(path.getFileName().toString());
+ return CitrusSettings.getTestFileNamePattern(ext)
+ .stream()
+ .map(Pattern::compile)
+ .anyMatch(pattern ->
pattern.matcher(path.getFileName().toString()).matches());
+ }).collect(Collectors.toSet());
+
+ for (Path testSource : testSources) {
+ String ext =
FileUtils.getFileExtension(testSource.getFileName().toString());
+ if (ext.equals("java")) {
+ Path javaSource;
+ if (packageName != null) {
+ javaSource =
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" +
testSource.getFileName());
+ } else {
+ javaSource =
srcTestSrcDir.resolve(testSource.getFileName());
+ }
- ExportHelper.safeCopy(new ByteArrayInputStream(
-
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), javaSource);
- } else {
- Path resource =
srcTestResourcesDir.resolve(testSource.getFileName());
- ExportHelper.safeCopy(new ByteArrayInputStream(
-
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), resource);
-
- String javaClassName =
getJavaClassName(FileUtils.getBaseName(testSource.getFileName().toString()));
- Path javaSource;
- if (packageName != null) {
- javaSource =
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + javaClassName
+ ".java");
+ ExportHelper.safeCopy(new ByteArrayInputStream(
+
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), javaSource);
} else {
- javaSource = srcTestSrcDir.resolve(javaClassName +
".java");
- }
+ Path resource =
srcTestResourcesDir.resolve(testSource.getFileName());
+ ExportHelper.safeCopy(new ByteArrayInputStream(
+
readTestSource(testSource).getBytes(StandardCharsets.UTF_8)), resource);
+
+ String javaClassName =
getJavaClassName(FileUtils.getBaseName(testSource.getFileName().toString()));
+ Path javaSource;
+ if (packageName != null) {
+ javaSource =
srcTestSrcDir.resolve(packageName.replaceAll("\\.", "/") + "/" + javaClassName
+ ".java");
+ } else {
+ javaSource = srcTestSrcDir.resolve(javaClassName +
".java");
+ }
- try (InputStream is =
TestPlugin.class.getClassLoader().getResourceAsStream("templates/junit-test.tmpl"))
{
- String context = IOHelper.loadText(is);
+ try (InputStream is =
TestPlugin.class.getClassLoader().getResourceAsStream("templates/junit-test.tmpl"))
{
+ String context = IOHelper.loadText(is);
- context = context.replaceAll("\\{\\{ \\.PackageDeclaration
}}", getPackageDeclaration(packageName));
- context = context.replaceAll("\\{\\{ \\.Type }}", ext);
- context = context.replaceAll("\\{\\{ \\.Name }}",
javaClassName);
- context = context.replaceAll("\\{\\{ \\.MethodName }}",
StringHelper.decapitalize(javaClassName));
- context = context.replaceAll("\\{\\{ \\.ResourcePath }}",
testSource.getFileName().toString());
+ context = context.replaceAll("\\{\\{
\\.PackageDeclaration }}", getPackageDeclaration(packageName));
+ context = context.replaceAll("\\{\\{ \\.Type }}", ext);
+ context = context.replaceAll("\\{\\{ \\.Name }}",
javaClassName);
+ context = context.replaceAll("\\{\\{ \\.MethodName
}}", StringHelper.decapitalize(javaClassName));
+ context = context.replaceAll("\\{\\{ \\.ResourcePath
}}", testSource.getFileName().toString());
- ExportHelper.safeCopy(new
ByteArrayInputStream(context.getBytes(StandardCharsets.UTF_8)), javaSource);
+ ExportHelper.safeCopy(new
ByteArrayInputStream(context.getBytes(StandardCharsets.UTF_8)), javaSource);
+ }
}
}
}
+
}
/**