You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/08/23 15:17:31 UTC
[camel] branch main updated: Fixes (#11189)
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 e2b7a57df3f Fixes (#11189)
e2b7a57df3f is described below
commit e2b7a57df3f60c51b2ab5f74c6253f9aa08ebe8a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 23 17:17:08 2023 +0200
Fixes (#11189)
* CAMEL-19784: camel-core - PropertyBindingSupport - mandatory reference should fail if cannot resolve bean
* Regen
* CAMEL-19785: camel-yaml-dsl - Order of beans should not matter
---
.../camel/support/service/ServiceHelper.java | 2 -
.../file/FileConsumerBeginRenameStrategyTest.java | 6 +-
.../file/FileConsumerCommitRenameStrategyTest.java | 1 -
.../file/FileProducerAllowNullBodyTest.java | 2 +-
.../file/FileProducerMoveExistingTest.java | 1 -
.../camel/component/mock/MockEndpointTest.java | 2 -
.../camel/component/xslt/XsltFeatureRouteTest.java | 3 +-
.../camel/impl/DefaultClassResolverTest.java | 2 +-
.../apache/camel/impl/DefaultComponentTest.java | 10 +--
.../impl/DefaultComponentValidateURITest.java | 3 +-
.../impl/DefaultExecutorServiceManagerTest.java | 3 +-
.../impl/DefaultProducerTemplateAsyncTest.java | 10 +--
.../camel/impl/DefaultProducerTemplateTest.java | 10 +--
...ProducerTemplateWithCustomCacheMaxSizeTest.java | 3 +-
.../GracefulShutdownNoAutoStartOrderClashTest.java | 2 +-
.../issues/AdviceWithInvalidConfiguredTest.java | 2 +-
.../issues/ChoiceEndOrEndChoiceIssueTest.java | 2 +-
.../issues/ExceptionThrownFromOnExceptionTest.java | 14 ++---
.../camel/support/PropertyBindingSupport.java | 4 ++
.../dsl/yaml/deserializers/BeansDeserializer.java | 73 +++++++++++++++-------
20 files changed, 94 insertions(+), 61 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceHelper.java b/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceHelper.java
index db75d3faf42..e1424fb3b43 100644
--- a/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceHelper.java
+++ b/core/camel-api/src/main/java/org/apache/camel/support/service/ServiceHelper.java
@@ -188,7 +188,6 @@ public final class ServiceHelper {
}
}
-
/**
* Stops the given {@code value}, rethrowing the first exception caught.
* <p/>
@@ -203,7 +202,6 @@ public final class ServiceHelper {
}
}
-
/**
* Stops the given {@code value}, rethrowing the first exception caught.
* <p/>
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBeginRenameStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBeginRenameStrategyTest.java
index 059bc460c71..d7148f6761f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBeginRenameStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBeginRenameStrategyTest.java
@@ -26,7 +26,6 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -51,10 +50,11 @@ public class FileConsumerBeginRenameStrategyTest extends ContextTestSupport {
// create a file in inprogress to let there be a duplicate file
testDirectory("inprogress", true);
- try(FileWriter fw = new FileWriter(testFile("inprogress/london.txt").toFile())) {
+ try (FileWriter fw = new FileWriter(testFile("inprogress/london.txt").toFile())) {
fw.write("I was there once in London");
fw.flush();
- };
+ }
+ ;
MockEndpoint mock = getMockEndpoint("mock:report");
mock.expectedBodiesReceived("Hello London");
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameStrategyTest.java
index 203bfcac38c..9ee822d64a0 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCommitRenameStrategyTest.java
@@ -25,7 +25,6 @@ import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.converter.IOConverter;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerAllowNullBodyTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerAllowNullBodyTest.java
index 62723a6ca33..6448005268b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerAllowNullBodyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerAllowNullBodyTest.java
@@ -44,7 +44,7 @@ public class FileProducerAllowNullBodyTest extends ContextTestSupport {
CamelExecutionException e = assertThrows(CamelExecutionException.class,
() -> template.sendBody(fileUri("?fileName=allowNullBody.txt"), null),
- "Should have thrown a GenericFileOperationFailedException");
+ "Should have thrown a GenericFileOperationFailedException");
GenericFileOperationFailedException cause
= assertIsInstanceOf(GenericFileOperationFailedException.class, e.getCause());
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerMoveExistingTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerMoveExistingTest.java
index 2feb6cdf0b3..f48ae33ace8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerMoveExistingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerMoveExistingTest.java
@@ -28,7 +28,6 @@ import org.apache.camel.Exchange;
import org.junit.jupiter.api.Test;
import static java.io.File.separator;
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java b/core/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
index a1bdb9ff052..3dd0ad7b477 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/mock/MockEndpointTest.java
@@ -667,8 +667,6 @@ public class MockEndpointTest extends ContextTestSupport {
template.sendBodyAndHeader("direct:a", "Hello World", "foo", 123);
template.sendBodyAndHeader("direct:a", "Hello World", "bar", 234);
-
-
AssertionError e = assertThrows(AssertionError.class,
this::assertMockEndpointsSatisfied,
"Should have thrown exception");
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFeatureRouteTest.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFeatureRouteTest.java
index 3c98007a41d..0049ec9fe67 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFeatureRouteTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/xslt/XsltFeatureRouteTest.java
@@ -36,7 +36,8 @@ public class XsltFeatureRouteTest extends ContextTestSupport {
}
public void sendXmlMessage(String uri, String message) {
- Exception ex = assertThrows(Exception.class, () -> template.sendBody("direct:start1", message), "Expected an exception here");
+ Exception ex = assertThrows(Exception.class, () -> template.sendBody("direct:start1", message),
+ "Expected an exception here");
// expect an exception here
boolean b1 = ex instanceof CamelExecutionException;
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultClassResolverTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultClassResolverTest.java
index d3526b89a61..b4e019dc311 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultClassResolverTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultClassResolverTest.java
@@ -125,7 +125,7 @@ public class DefaultClassResolverTest {
DefaultClassResolver resolver = new DefaultClassResolver();
assertThrows(ClassNotFoundException.class,
- () -> resolver.resolveMandatoryClass("com.FooBar"),
+ () -> resolver.resolveMandatoryClass("com.FooBar"),
"Should thrown an exception");
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
index 11d13841df9..6e6a67dad5a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java
@@ -129,7 +129,7 @@ public class DefaultComponentTest extends ContextTestSupport {
assertEquals(
"Error during type conversion from type: java.lang.String " + "to the required type: java.lang.Integer "
- + "with value abc due to java.lang.NumberFormatException: For input string: \"abc\"",
+ + "with value abc due to java.lang.NumberFormatException: For input string: \"abc\"",
ex.getMessage());
}
@@ -139,8 +139,8 @@ public class DefaultComponentTest extends ContextTestSupport {
parameters.put("date", "#somewhen");
MyComponent my = new MyComponent(this.context);
- NoSuchBeanException e = assertThrows(NoSuchBeanException.class, () ->
- my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class),
+ NoSuchBeanException e = assertThrows(NoSuchBeanException.class,
+ () -> my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class),
"returned without finding object in registry");
assertEquals("No bean could be found in the registry for: somewhen of type: java.util.Date", e.getMessage());
@@ -231,8 +231,8 @@ public class DefaultComponentTest extends ContextTestSupport {
parameters.put("dates", "#bean1,#bean3");
MyComponent my = new MyComponent(this.context);
- NoSuchBeanException e = assertThrows(NoSuchBeanException.class, () ->
- my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class),
+ NoSuchBeanException e = assertThrows(NoSuchBeanException.class,
+ () -> my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class),
"returned without finding object in registry");
assertEquals("No bean could be found in the registry for: bean3 of type: java.util.Date", e.getMessage());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentValidateURITest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentValidateURITest.java
index 24b2c404a66..d2168d57d05 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentValidateURITest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentValidateURITest.java
@@ -37,7 +37,8 @@ public class DefaultComponentValidateURITest extends ContextTestSupport {
@Test
public void testUnknownParameter() {
- assertThrows(ResolveEndpointFailedException.class, () -> context.getEndpoint("timer://foo?delay=250&unknown=1&period=500"),
+ assertThrows(ResolveEndpointFailedException.class,
+ () -> context.getEndpoint("timer://foo?delay=250&unknown=1&period=500"),
"Should have thrown ResolveEndpointFailedException");
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java
index f66ebfc042d..3913414d050 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultExecutorServiceManagerTest.java
@@ -127,7 +127,8 @@ public class DefaultExecutorServiceManagerTest extends ContextTestSupport {
public void testGetThreadNameCustomPatternInvalid() {
context.getExecutorServiceManager().setThreadNamePattern("Cool #xxx#");
- IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> context.getExecutorServiceManager().resolveThreadName("foo"),
+ IllegalArgumentException e = assertThrows(IllegalArgumentException.class,
+ () -> context.getExecutorServiceManager().resolveThreadName("foo"),
"Should thrown an exception");
assertEquals("Pattern is invalid: [Cool #xxx#] in resolved thread name: [Cool #xxx#]", e.getMessage());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateAsyncTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateAsyncTest.java
index fe0559bc1af..7105766dd9c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateAsyncTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateAsyncTest.java
@@ -225,8 +225,9 @@ public class DefaultProducerTemplateAsyncTest extends ContextTestSupport {
String echo = template.requestBody("direct:echo", "Hi", String.class);
assertEquals("HiHi", echo);
- RuntimeCamelException e = assertThrows(RuntimeCamelException.class, () -> template.extractFutureBody(future, Exchange.class),
- "Should have thrown exception");
+ RuntimeCamelException e
+ = assertThrows(RuntimeCamelException.class, () -> template.extractFutureBody(future, Exchange.class),
+ "Should have thrown exception");
assertEquals("Damn forced by unit test", e.getCause().getMessage());
@@ -243,8 +244,9 @@ public class DefaultProducerTemplateAsyncTest extends ContextTestSupport {
String echo = template.requestBody("direct:echo", "Hi", String.class);
assertEquals("HiHi", echo);
- RuntimeCamelException e = assertThrows(RuntimeCamelException.class, () -> template.extractFutureBody(future, String.class),
- "Should have thrown exception");
+ RuntimeCamelException e
+ = assertThrows(RuntimeCamelException.class, () -> template.extractFutureBody(future, String.class),
+ "Should have thrown exception");
assertEquals("Damn forced by unit test", e.getCause().getMessage());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateTest.java
index f6552c38caa..baa2ee69e16 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateTest.java
@@ -90,9 +90,9 @@ public class DefaultProducerTemplateTest extends ContextTestSupport {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(0);
- RuntimeCamelException e = assertThrows(RuntimeCamelException.class, () ->
- template.sendBody("direct:exception", "Hello World"),
- "Should have thrown RuntimeCamelException");
+ RuntimeCamelException e
+ = assertThrows(RuntimeCamelException.class, () -> template.sendBody("direct:exception", "Hello World"),
+ "Should have thrown RuntimeCamelException");
assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
assertEquals("Forced exception by unit test", e.getCause().getMessage());
@@ -104,8 +104,8 @@ public class DefaultProducerTemplateTest extends ContextTestSupport {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(0);
- RuntimeCamelException e = assertThrows(RuntimeCamelException.class, () ->
- template.requestBody("direct:exception", "Hello World", Integer.class),
+ RuntimeCamelException e = assertThrows(RuntimeCamelException.class,
+ () -> template.requestBody("direct:exception", "Hello World", Integer.class),
"Should have thrown RuntimeCamelException");
assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateWithCustomCacheMaxSizeTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateWithCustomCacheMaxSizeTest.java
index f90cc39f6d8..6af4fe4f2b9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateWithCustomCacheMaxSizeTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultProducerTemplateWithCustomCacheMaxSizeTest.java
@@ -77,6 +77,7 @@ public class DefaultProducerTemplateWithCustomCacheMaxSizeTest extends ContextTe
Exception e = assertThrows(Exception.class, () -> context.createProducerTemplate(),
"Should have thrown an exception");
- assertEquals("Property CamelMaximumCachePoolSize must be a positive number, was: 0", e.getCause().getMessage());;
+ assertEquals("Property CamelMaximumCachePoolSize must be a positive number, was: 0", e.getCause().getMessage());
+ ;
}
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/GracefulShutdownNoAutoStartOrderClashTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/GracefulShutdownNoAutoStartOrderClashTest.java
index c6a27b949cb..c6361e60e20 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/GracefulShutdownNoAutoStartOrderClashTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/GracefulShutdownNoAutoStartOrderClashTest.java
@@ -44,7 +44,7 @@ public class GracefulShutdownNoAutoStartOrderClashTest extends ContextTestSuppor
assertEquals(
"Failed to start route bar because of startupOrder clash. Route foo already has startupOrder 5 configured"
- + " which this route have as well. Please correct startupOrder to be unique among all your routes.",
+ + " which this route have as well. Please correct startupOrder to be unique among all your routes.",
e.getMessage());
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInvalidConfiguredTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInvalidConfiguredTest.java
index 09e72e49f81..548d6297ef1 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInvalidConfiguredTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInvalidConfiguredTest.java
@@ -42,7 +42,7 @@ public class AdviceWithInvalidConfiguredTest extends ContextTestSupport {
.throwException(new IllegalArgumentException("Forced"));
}
});
- },"Should have thrown an exception");
+ }, "Should have thrown an exception");
assertEquals("You can not advice with error handlers. Remove the error handlers from the route builder.",
e.getMessage());
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
index 31d0d5016bf..9d9a95363ba 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/ChoiceEndOrEndChoiceIssueTest.java
@@ -47,7 +47,7 @@ public class ChoiceEndOrEndChoiceIssueTest extends ContextTestSupport {
}, "Should have thrown exception");
assertEquals("A new choice clause should start with a when() or otherwise()."
- + " If you intend to end the entire choice and are using endChoice() then use end() instead.",
+ + " If you intend to end the entire choice and are using endChoice() then use end() instead.",
e.getMessage());
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/ExceptionThrownFromOnExceptionTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/ExceptionThrownFromOnExceptionTest.java
index 5103ed2e679..3bbeac34e36 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/ExceptionThrownFromOnExceptionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/ExceptionThrownFromOnExceptionTest.java
@@ -80,9 +80,9 @@ public class ExceptionThrownFromOnExceptionTest extends ContextTestSupport {
getMockEndpoint("mock:result").expectedMessageCount(0);
getMockEndpoint("mock:end").expectedMessageCount(0);
- CamelExecutionException e = assertThrows(CamelExecutionException.class, () ->
- template.sendBody("direct:start", "Hello World"),
- "Should have thrown an exception");
+ CamelExecutionException e
+ = assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Hello World"),
+ "Should have thrown an exception");
IOException cause = assertIsInstanceOf(IOException.class, e.getCause());
assertEquals("Some other IOException", cause.getMessage());
@@ -132,9 +132,9 @@ public class ExceptionThrownFromOnExceptionTest extends ContextTestSupport {
getMockEndpoint("mock:result").expectedMessageCount(0);
getMockEndpoint("mock:end").expectedMessageCount(0);
- CamelExecutionException e = assertThrows(CamelExecutionException.class, () ->
- template.sendBody("direct:start", "Hello World"),
- "Should have thrown an exception");
+ CamelExecutionException e
+ = assertThrows(CamelExecutionException.class, () -> template.sendBody("direct:start", "Hello World"),
+ "Should have thrown an exception");
IOException cause = assertIsInstanceOf(IOException.class, e.getCause());
assertEquals("Some other IOException", cause.getMessage());
@@ -312,7 +312,7 @@ public class ExceptionThrownFromOnExceptionTest extends ContextTestSupport {
IOException cause = assertIsInstanceOf(IOException.class, e.getCause());
assertEquals("IO error", cause.getMessage());
-
+
assertMockEndpointsSatisfied();
assertEquals(4, RETRY.get(), "Should try 4 times (1 first, 3 retry)");
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 1b2f7ee6d84..67d0a8179f4 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -542,6 +542,10 @@ public final class PropertyBindingSupport {
// resolve property placeholders
str = camelContext.resolvePropertyPlaceholders(str.toString());
}
+ if (str == null && reference && mandatory && !optional) {
+ // we could not resolve the reference and this is mandatory
+ throw new PropertyBindingException(target, key, value);
+ }
value = str;
} catch (Exception e) {
// report the exception using the long key and parent target
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
index 4be1c650219..63f4e81fb37 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
@@ -23,7 +23,6 @@ import org.apache.camel.CamelContext;
import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
-import org.apache.camel.dsl.yaml.common.YamlSupport;
import org.apache.camel.model.Model;
import org.apache.camel.model.app.RegistryBeanDefinition;
import org.apache.camel.spi.CamelContextCustomizer;
@@ -47,6 +46,7 @@ import org.snakeyaml.engine.v2.nodes.SequenceNode;
public class BeansDeserializer extends YamlDeserializerSupport implements ConstructNode {
@Override
public Object construct(Node node) {
+ final BeansCustomizer answer = new BeansCustomizer();
final SequenceNode sn = asSequenceNode(node);
final List<CamelContextCustomizer> customizers = new ArrayList<>();
final YamlDeserializationContext dc = getDeserializationContext(node);
@@ -65,29 +65,10 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr
bean.setType("#class:" + bean.getType());
}
- customizers.add(new CamelContextCustomizer() {
- @Override
- public void configure(CamelContext camelContext) {
- try {
- // to support hot reloading of beans then we need to unbind old existing first
- String name = bean.getName();
- camelContext.getRegistry().unbind(name);
- camelContext.getRegistry().bind(
- name,
- newInstance(bean, camelContext));
-
- // register bean in model
- Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
- model.addRegistryBean(bean);
-
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- });
+ answer.addBean(bean);
}
- return YamlSupport.customizer(customizers);
+ return answer;
}
public Object newInstance(RegistryBeanDefinition bean, CamelContext context) throws Exception {
@@ -100,4 +81,52 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr
return target;
}
+ protected void registerBean(
+ CamelContext camelContext,
+ List<RegistryBeanDefinition> delayedRegistrations,
+ RegistryBeanDefinition def, boolean delayIfFailed) {
+ try {
+ // to support hot reloading of beans then we need to unbind old existing first
+ String name = def.getName();
+ Object bean = newInstance(def, camelContext);
+ camelContext.getRegistry().unbind(name);
+ camelContext.getRegistry().bind(name, bean);
+
+ // register bean in model
+ Model model = camelContext.getCamelContextExtension().getContextPlugin(Model.class);
+ model.addRegistryBean(def);
+
+ } catch (Exception e) {
+ if (delayIfFailed) {
+ delayedRegistrations.add(def);
+ } else {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ private class BeansCustomizer implements CamelContextCustomizer {
+
+ private final List<RegistryBeanDefinition> delayedRegistrations = new ArrayList<>();
+ private final List<RegistryBeanDefinition> beans = new ArrayList<>();
+
+ public void addBean(RegistryBeanDefinition bean) {
+ beans.add(bean);
+ }
+
+ @Override
+ public void configure(CamelContext camelContext) {
+ // first-pass of creating beans
+ for (RegistryBeanDefinition bean : beans) {
+ registerBean(camelContext, delayedRegistrations, bean, true);
+ }
+ beans.clear();
+ // second-pass of creating beans should fail if not possible
+ for (RegistryBeanDefinition bean : delayedRegistrations) {
+ registerBean(camelContext, delayedRegistrations, bean, false);
+ }
+ delayedRegistrations.clear();
+ }
+ }
+
}