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

gnodet 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 555c74b8787d CAMEL-23213: Handle Spring Boot catalog provider 
requiring JDK 21+ (#22087)
555c74b8787d is described below

commit 555c74b8787d29c6d73dbe6804b75bc79967c79b
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Mar 19 06:24:48 2026 +0100

    CAMEL-23213: Handle Spring Boot catalog provider requiring JDK 21+ (#22087)
    
    CatalogLoader now catches UnsupportedClassVersionError when loading
    SpringBootRuntimeProvider and provides a clear error message suggesting
    to use --camel-spring-boot-version=4.18.x for JDK 17 compatibility.
    
    Tests skip Spring Boot runtime type on JDK < 21 since
    camel-spring-boot 4.19+ requires Spring Boot 4 (JDK 21).
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .../apache/camel/dsl/jbang/core/common/CatalogLoader.java   | 13 ++++++++++++-
 .../camel/dsl/jbang/core/commands/DependencyListTest.java   | 12 ++++++++----
 .../camel/dsl/jbang/core/commands/DependencyUpdateTest.java | 12 ++++++++----
 .../core/commands/ExportMainApplicationProperties.java      | 12 ++++++++----
 .../apache/camel/dsl/jbang/core/commands/ExportTest.java    | 12 ++++++++----
 5 files changed, 44 insertions(+), 17 deletions(-)

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 9c1606de885c..f1c24f3c2d87 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
@@ -150,7 +150,18 @@ public final class CatalogLoader {
                         "Cannot download " + springBootGroupId + 
":camel-catalog-provider-springboot:" + version);
             }
 
-            Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) 
cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
+            Class<RuntimeProvider> clazz;
+            try {
+                clazz = (Class<RuntimeProvider>) 
cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
+            } catch (UnsupportedClassVersionError e) {
+                String sbVersion = PropertyResolver.fromSystemProperty(
+                        CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION, () -> 
camelVersion);
+                throw new IOException(
+                        "Cannot load camel-catalog-provider-springboot:" + 
sbVersion
+                                      + " on Java " + Runtime.version()
+                                      + ". Spring Boot runtime requires JDK 
21+ starting from camel-spring-boot 4.19.0."
+                                      + " Use 
--camel-spring-boot-version=4.18.x for JDK 17 compatibility, or run on JDK 
21+.");
+            }
             if (clazz != null) {
                 Class<CamelCatalog> clazz2 = (Class<CamelCatalog>) 
cl.loadClass(DEFAULT_CAMEL_CATALOG);
                 if (clazz2 != null) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
index 80d3c53098a4..cea01631c330 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyListTest.java
@@ -83,10 +83,14 @@ class DependencyListTest extends 
CamelCommandBaseTestSupport {
     }
 
     private static Stream<Arguments> runtimeProvider() {
-        return Stream.of(
-                Arguments.of(RuntimeType.quarkus),
-                Arguments.of(RuntimeType.springBoot),
-                Arguments.of(RuntimeType.main));
+        Stream.Builder<Arguments> builder = Stream.builder();
+        builder.add(Arguments.of(RuntimeType.quarkus));
+        // camel-spring-boot 4.19+ requires JDK 21 (Spring Boot 4)
+        if (Runtime.version().feature() >= 21) {
+            builder.add(Arguments.of(RuntimeType.springBoot));
+        }
+        builder.add(Arguments.of(RuntimeType.main));
+        return builder.build();
     }
 
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
index 24e89747fcd8..4475d190267b 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
@@ -138,10 +138,14 @@ class DependencyUpdateTest extends 
CamelCommandBaseTestSupport {
     }
 
     private static Stream<Arguments> runtimeProvider() {
-        return Stream.of(
-                Arguments.of(RuntimeType.quarkus),
-                Arguments.of(RuntimeType.springBoot),
-                Arguments.of(RuntimeType.main));
+        Stream.Builder<Arguments> builder = Stream.builder();
+        builder.add(Arguments.of(RuntimeType.quarkus));
+        // camel-spring-boot 4.19+ requires JDK 21 (Spring Boot 4)
+        if (Runtime.version().feature() >= 21) {
+            builder.add(Arguments.of(RuntimeType.springBoot));
+        }
+        builder.add(Arguments.of(RuntimeType.main));
+        return builder.build();
     }
 
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainApplicationProperties.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainApplicationProperties.java
index 829e7980778d..f479f77dd9aa 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainApplicationProperties.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportMainApplicationProperties.java
@@ -55,10 +55,14 @@ class ExportMainApplicationProperties {
     }
 
     private static Stream<Arguments> runtimeProvider() {
-        return Stream.of(
-                Arguments.of(RuntimeType.quarkus),
-                Arguments.of(RuntimeType.springBoot),
-                Arguments.of(RuntimeType.main));
+        Stream.Builder<Arguments> builder = Stream.builder();
+        builder.add(Arguments.of(RuntimeType.quarkus));
+        // camel-spring-boot 4.19+ requires JDK 21 (Spring Boot 4)
+        if (Runtime.version().feature() >= 21) {
+            builder.add(Arguments.of(RuntimeType.springBoot));
+        }
+        builder.add(Arguments.of(RuntimeType.main));
+        return builder.build();
     }
 
     @ParameterizedTest
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index d3e1f13a7ec5..9689bbd50d5a 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -67,10 +67,14 @@ class ExportTest {
     }
 
     private static Stream<Arguments> runtimeProvider() {
-        return Stream.of(
-                Arguments.of(RuntimeType.quarkus),
-                Arguments.of(RuntimeType.springBoot),
-                Arguments.of(RuntimeType.main));
+        Stream.Builder<Arguments> builder = Stream.builder();
+        builder.add(Arguments.of(RuntimeType.quarkus));
+        // camel-spring-boot 4.19+ requires JDK 21 (Spring Boot 4)
+        if (Runtime.version().feature() >= 21) {
+            builder.add(Arguments.of(RuntimeType.springBoot));
+        }
+        builder.add(Arguments.of(RuntimeType.main));
+        return builder.build();
     }
 
     @ParameterizedTest

Reply via email to