This is an automated email from the ASF dual-hosted git repository.

davsclaus 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 742646f730b CAMEL-20736: camel-jbang - Catalog downloaded should not 
start CamelContext
742646f730b is described below

commit 742646f730bfad654204972b99d869fab3ebe370
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat May 4 13:19:08 2024 +0200

    CAMEL-20736: camel-jbang - Catalog downloaded should not start CamelContext
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java |   2 +
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |   2 +
 .../camel/dsl/jbang/core/common/CatalogLoader.java | 105 ++++++++++-----------
 3 files changed, 53 insertions(+), 56 deletions(-)

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 e01a9fc7622..a582a9204fb 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
@@ -423,6 +423,8 @@ abstract class ExportBaseCommand extends CamelCommand {
         }
         answer.removeAll(toBeRemoved);
 
+        System.out.println(answer);
+
         return answer;
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index d5070320abf..e7d8165bd6f 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -104,9 +104,11 @@ class ExportSpringBoot extends Export {
         srcKameletsResourcesDir.mkdirs();
         // copy application properties files
         copyApplicationPropertiesFiles(srcResourcesDir);
+
         // copy source files
         copySourceFiles(settings, profile, srcJavaDirRoot, srcJavaDir, 
srcResourcesDir, srcCamelResourcesDir,
                 srcKameletsResourcesDir, srcPackageName);
+
         // copy from settings to profile
         copySettingsAndProfile(settings, profile, srcResourcesDir, prop -> {
             if (!hasModeline(settings)) {
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 d10bb13826d..d06539af851 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
@@ -31,10 +31,10 @@ import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.catalog.RuntimeProvider;
 import org.apache.camel.catalog.VersionManager;
-import org.apache.camel.main.KameletMain;
 import org.apache.camel.main.download.DependencyDownloaderClassLoader;
 import org.apache.camel.main.download.DownloadException;
 import org.apache.camel.main.download.MavenDependencyDownloader;
+import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.tooling.maven.MavenArtifact;
 
 public final class CatalogLoader {
@@ -49,27 +49,21 @@ public final class CatalogLoader {
     }
 
     public static CamelCatalog loadCatalog(String repos, String version) 
throws Exception {
+        CamelCatalog answer = new DefaultCamelCatalog();
         if (version == null) {
-            CamelCatalog answer = new DefaultCamelCatalog();
+            answer = new DefaultCamelCatalog();
             answer.enableCache();
             return answer;
         }
 
-        // use kamelet-main to dynamic download dependency via maven
-        KameletMain main = new KameletMain();
+        DependencyDownloaderClassLoader cl = new 
DependencyDownloaderClassLoader(null);
+        MavenDependencyDownloader downloader = new MavenDependencyDownloader();
+        downloader.setClassLoader(cl);
+        downloader.setRepos(repos);
         try {
-            main.setRepos(repos);
-            // enable stub in silent mode so we do not use real components
-            main.setSilent(true);
-            main.setStubPattern("*");
-            main.start();
-
-            // wrap downloaded catalog files in an isolated classloader
-            DependencyDownloaderClassLoader cl
-                    = new DependencyDownloaderClassLoader(null);
+            downloader.start();
 
             // download camel-catalog for that specific version
-            MavenDependencyDownloader downloader = 
main.getCamelContext().hasService(MavenDependencyDownloader.class);
             MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", 
"camel-catalog", version);
             if (ma != null) {
                 cl.addFile(ma.getFile());
@@ -78,16 +72,20 @@ public final class CatalogLoader {
             }
 
             // re-create answer with the classloader to be able to load 
resources in this catalog
-            Class<CamelCatalog> clazz2
-                    = 
main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
-                            CamelCatalog.class);
-            CamelCatalog answer = 
main.getCamelContext().getInjector().newInstance(clazz2);
-            answer.setVersionManager(new 
DownloadCatalogVersionManager(version, cl));
+            Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) 
cl.loadClass(DEFAULT_CAMEL_CATALOG);
+            if (clazz != null) {
+                answer.setVersionManager(new 
DownloadCatalogVersionManager(version, cl));
+                RuntimeProvider provider = ObjectHelper.newInstance(clazz);
+                if (provider != null) {
+                    answer.setRuntimeProvider(provider);
+                }
+            }
             answer.enableCache();
-            return answer;
         } finally {
-            main.stop();
+            downloader.stop();
         }
+
+        return answer;
     }
 
     public static CamelCatalog loadSpringBootCatalog(String repos, String 
version) throws Exception {
@@ -96,18 +94,13 @@ public final class CatalogLoader {
             version = answer.getCatalogVersion();
         }
 
-        // use kamelet-main to dynamic download dependency via maven
-        KameletMain main = new KameletMain();
+        DependencyDownloaderClassLoader cl = new 
DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader());
+        MavenDependencyDownloader downloader = new MavenDependencyDownloader();
+        downloader.setClassLoader(cl);
+        downloader.setRepos(repos);
         try {
-            main.setRepos(repos);
-            main.start();
-
-            // wrap downloaded catalog files in an isolated classloader
-            DependencyDownloaderClassLoader cl
-                    = new 
DependencyDownloaderClassLoader(main.getCamelContext().getApplicationContextClassLoader());
+            downloader.start();
 
-            // download camel-catalog for that specific version
-            MavenDependencyDownloader downloader = 
main.getCamelContext().hasService(MavenDependencyDownloader.class);
             MavenArtifact ma;
             String camelCatalogVersion = version;
             try {
@@ -131,26 +124,30 @@ public final class CatalogLoader {
                         "Cannot download 
org.apache.camel.springboot:camel-catalog-provider-springboot:" + version);
             }
 
-            answer.setVersionManager(new 
DownloadCatalogVersionManager(version, cl));
             Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) 
cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
             if (clazz != null) {
-                RuntimeProvider provider = 
main.getCamelContext().getInjector().newInstance(clazz);
+                Class<CamelCatalog> clazz2 = (Class<CamelCatalog>) 
cl.loadClass(DEFAULT_CAMEL_CATALOG);
+                if (clazz2 != null) {
+                    answer = ObjectHelper.newInstance(clazz2);
+                }
+                RuntimeProvider provider = ObjectHelper.newInstance(clazz);
                 if (provider != null) {
                     answer.setRuntimeProvider(provider);
                 }
+                // use classloader that loaded spring-boot provider to ensure 
we can load its resources
+                answer.getVersionManager().setClassLoader(cl);
             }
             answer.enableCache();
-
         } finally {
-            main.stop();
+            downloader.stop();
         }
 
         return answer;
     }
 
-    public static CamelCatalog loadQuarkusCatalog(String repos, String 
quarkusVersion) {
+    public static CamelCatalog loadQuarkusCatalog(String repos, String 
quarkusVersion) throws Exception {
         String camelQuarkusVersion = null;
-        CamelCatalog answer = new DefaultCamelCatalog(true);
+        CamelCatalog answer = new DefaultCamelCatalog();
 
         if (quarkusVersion == null) {
             return answer;
@@ -161,15 +158,15 @@ public final class CatalogLoader {
             quarkusVersion += ".Final";
         }
 
-        // use kamelet-main to dynamic download dependency via maven
-        KameletMain main = new KameletMain();
+        DependencyDownloaderClassLoader cl = new 
DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader());
+        MavenDependencyDownloader downloader = new MavenDependencyDownloader();
+        downloader.setRepos(repos);
+        downloader.setClassLoader(cl);
         try {
-            main.setRepos(repos);
-            main.start();
+            downloader.start();
 
             // shrinkwrap does not return POM file as result (they are 
hardcoded to be filtered out)
             // so after this we download a JAR and then use its File location 
to compute the file for the downloaded POM
-            MavenDependencyDownloader downloader = 
main.getCamelContext().hasService(MavenDependencyDownloader.class);
             MavenArtifact ma = 
downloader.downloadArtifact("io.quarkus.platform", "quarkus-camel-bom:pom", 
quarkusVersion);
             if (ma != null && ma.getFile() != null) {
                 String name = ma.getFile().getAbsolutePath();
@@ -196,27 +193,23 @@ public final class CatalogLoader {
                 // download camel-quarkus-catalog we use to know if we have an 
extension or not
                 downloader.downloadDependency("org.apache.camel.quarkus", 
"camel-quarkus-catalog", camelQuarkusVersion);
 
-                Class<RuntimeProvider> clazz = 
main.getCamelContext().getClassResolver().resolveClass(QUARKUS_CATALOG_PROVIDER,
-                        RuntimeProvider.class);
+                Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) 
cl.loadClass(QUARKUS_CATALOG_PROVIDER);
                 if (clazz != null) {
-                    RuntimeProvider provider = 
main.getCamelContext().getInjector().newInstance(clazz);
+                    Class<CamelCatalog> clazz2 = (Class<CamelCatalog>) 
cl.loadClass(DEFAULT_CAMEL_CATALOG);
+                    if (clazz2 != null) {
+                        answer = ObjectHelper.newInstance(clazz2);
+                    }
+                    RuntimeProvider provider = ObjectHelper.newInstance(clazz);
                     if (provider != null) {
-                        // re-create answer with the classloader that loaded 
quarkus to be able to load resources in this catalog
-                        Class<CamelCatalog> clazz2
-                                = 
main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
-                                        CamelCatalog.class);
-                        answer = 
main.getCamelContext().getInjector().newInstance(clazz2);
                         answer.setRuntimeProvider(provider);
-                        // use classloader that loaded quarkus provider to 
ensure we can load its resources
-                        
answer.getVersionManager().setClassLoader(main.getCamelContext().getApplicationContextClassLoader());
-                        answer.enableCache();
                     }
+                    // use classloader that loaded quarkus provider to ensure 
we can load its resources
+                    answer.getVersionManager().setClassLoader(cl);
                 }
             }
-        } catch (Exception e) {
-            // ignore
+            answer.enableCache();
         } finally {
-            main.stop();
+            downloader.stop();
         }
 
         return answer;

Reply via email to