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

davsclaus pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.18.x by this push:
     new 0f25c130787e CAMEL-23730: Fix export dry-run failing with 
NoSuchBeanException for bean references (#23921)
0f25c130787e is described below

commit 0f25c130787e3d9e746fa208ee0f23237174ab52
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jun 10 20:11:02 2026 +0200

    CAMEL-23730: Fix export dry-run failing with NoSuchBeanException for bean 
references (#23921)
    
    Align DependencyDownloaderTransformerResolver with language and dataformat
    resolvers by requiring the transformer: prefix to stub transformers. This
    allows reverting Run.java back to stubPattern("*") for export dry-run,
    so StubBeanRepository is properly registered and bean references
    (aggregationRepository, idempotentRepository, etc.) are stubbed correctly.
    
    Closes #23920
    
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  3 +-
 .../java/org/apache/camel/main/KameletMain.java    |  4 +-
 .../DependencyDownloaderTransformerResolver.java   |  7 +++-
 .../apache/camel/main/StubBeanRepositoryTest.java  | 44 ++++++++++++++++++++++
 ...ependencyDownloaderTransformerResolverTest.java | 17 ++++++++-
 5 files changed, 69 insertions(+), 6 deletions(-)

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 31bf98190f21..40596fcbf811 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
@@ -706,8 +706,7 @@ public class Run extends CamelCommand {
             }
             main.addInitialProperty(EXPORT, "true");
             // enable stub in silent mode so we do not use real components
-            //we need i.e. transformers to not be stubbed since 
https://github.com/apache/camel/pull/21931
-            main.setStubPattern("component:*");
+            main.setStubPattern("*");
             // do not run for very long in silent run
             main.addInitialProperty("camel.main.autoStartup", "false");
             main.addInitialProperty("camel.main.durationMaxSeconds", "-1");
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 20ac4c79f1fa..12d7b8cffc11 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -518,8 +518,8 @@ public class KameletMain extends MainCommandLineSupport {
         infos.forEach(LOG::info);
 
         answer.getCamelContextExtension().setRegistry(registry);
-        if (silent || "*".equals(stubPattern)) {
-            registry.addBeanRepository(new StubBeanRepository(stubPattern));
+        if (silent || "*".equals(stubPattern) || 
"component:*".equals(stubPattern)) {
+            registry.addBeanRepository(new StubBeanRepository("*"));
         }
 
         // load camel component and custom health-checks
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolver.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolver.java
index 23483adc8ad2..b289001805ea 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolver.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolver.java
@@ -85,7 +85,12 @@ public final class DependencyDownloaderTransformerResolver 
extends DefaultTransf
             return true;
         }
 
-        boolean stubbed = PatternHelper.matchPatterns(name, 
stubPattern.split(","));
+        boolean stubbed = false;
+        for (String n : stubPattern.split(",")) {
+            if (n.startsWith("transformer:")) {
+                stubbed |= PatternHelper.matchPattern(name, n.substring(12));
+            }
+        }
         return !stubbed;
     }
 
diff --git 
a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/StubBeanRepositoryTest.java
 
b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/StubBeanRepositoryTest.java
new file mode 100644
index 000000000000..207c007fd7ef
--- /dev/null
+++ 
b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/StubBeanRepositoryTest.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import org.apache.camel.main.download.StubBeanRepository;
+import org.apache.camel.spi.AggregationRepository;
+import org.apache.camel.spi.IdempotentRepository;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class StubBeanRepositoryTest {
+
+    @Test
+    public void testWildcardPatternStubsBeanReferences() {
+        StubBeanRepository repo = new StubBeanRepository("*");
+
+        assertNotNull(repo.lookupByNameAndType("myAggRepo", 
AggregationRepository.class));
+        assertNotNull(repo.lookupByNameAndType("myIdempotentRepo", 
IdempotentRepository.class));
+    }
+
+    @Test
+    public void testComponentPatternDoesNotStubBeanReferences() {
+        StubBeanRepository repo = new StubBeanRepository("component:*");
+
+        assertNull(repo.lookupByNameAndType("myAggRepo", 
AggregationRepository.class));
+        assertNull(repo.lookupByNameAndType("myIdempotentRepo", 
IdempotentRepository.class));
+    }
+}
diff --git 
a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolverTest.java
 
b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolverTest.java
index 97f08a3cd03d..34085afe28df 100644
--- 
a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolverTest.java
+++ 
b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/download/DependencyDownloaderTransformerResolverTest.java
@@ -25,14 +25,16 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class DependencyDownloaderTransformerResolverTest {
 
     @Test
     void stubTransformerShouldHaveNameSet() {
         SimpleCamelContext context = new SimpleCamelContext();
+        // transformers require "transformer:" prefix to be stubbed
         DependencyDownloaderTransformerResolver resolver
-                = new DependencyDownloaderTransformerResolver(context, "*", 
true);
+                = new DependencyDownloaderTransformerResolver(context, 
"transformer:*", true);
 
         // use a name not in the catalog to avoid triggering artifact download
         String transformerName = "test-stub:application-json";
@@ -47,6 +49,19 @@ public class DependencyDownloaderTransformerResolverTest {
         assertNotNull(resultKey);
     }
 
+    @Test
+    void wildcardPatternShouldNotStubTransformers() {
+        SimpleCamelContext context = new SimpleCamelContext();
+        // stub pattern "*" should NOT stub transformers (only components)
+        DependencyDownloaderTransformerResolver resolver
+                = new DependencyDownloaderTransformerResolver(context, "*", 
true);
+
+        // transformer is not stubbed so resolve will throw for unknown names
+        String transformerName = "test-stub:application-json";
+        TransformerKey key = new TransformerKey(transformerName);
+        assertThrows(IllegalArgumentException.class, () -> 
resolver.resolve(key, context));
+    }
+
     @Test
     void catalogLookupShouldNormalizeColonSeparatedNames() {
         DefaultCamelCatalog catalog = new DefaultCamelCatalog();

Reply via email to