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();