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 6fbdcacde4d CAMEL-22145: camel-core: Include source location when
throwing failed to create or start route exception so end user can better known
which file has the problem.
6fbdcacde4d is described below
commit 6fbdcacde4df467bb27e77a621aceafdecb55775
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jun 13 13:28:38 2025 +0200
CAMEL-22145: camel-core: Include source location when throwing failed to
create or start route exception so end user can better known which file has the
problem.
---
.../apache/camel/FailedToCreateRouteException.java | 28 +++++++++++++++-------
.../apache/camel/FailedToStartRouteException.java | 19 +++++++++++++--
.../impl/engine/InternalRouteStartupManager.java | 8 ++++---
.../org/apache/camel/impl/engine/RouteService.java | 17 +++++++------
.../org/apache/camel/impl/DefaultCamelContext.java | 2 +-
.../java/org/apache/camel/impl/DefaultModel.java | 2 +-
.../camel/model/ProcessorDefinitionHelper.java | 3 +++
.../org/apache/camel/reifier/RouteReifier.java | 21 ++++++++++++----
.../direct/DirectEndpointRouteInlinedTest.java | 2 +-
.../seda/SedaConcurrentConsumersNPEIssueTest.java | 4 ++--
.../GracefulShutdownNoAutoStartOrderClashTest.java | 2 +-
.../org/apache/camel/issues/RouteIdClashTest.java | 2 +-
.../model/StartingRoutesErrorReportedTest.java | 12 ++++++----
.../org/apache/camel/main/RoutesConfigurer.java | 2 +-
.../java/org/apache/camel/main/MainScan3Test.java | 2 +-
.../camel/management/ManagedDuplicateIdTest.java | 2 +-
.../org/apache/camel/support/LoggerHelper.java | 18 ++++++++++++++
.../camel/dsl/jbang/core/common/RuntimeType.java | 4 ++--
.../camel/dsl/jbang/it/CustomJarsITCase.java | 2 +-
19 files changed, 107 insertions(+), 45 deletions(-)
diff --git
a/core/camel-api/src/main/java/org/apache/camel/FailedToCreateRouteException.java
b/core/camel-api/src/main/java/org/apache/camel/FailedToCreateRouteException.java
index 4f217beb9e6..8c02ef9dcc0 100644
---
a/core/camel-api/src/main/java/org/apache/camel/FailedToCreateRouteException.java
+++
b/core/camel-api/src/main/java/org/apache/camel/FailedToCreateRouteException.java
@@ -24,33 +24,45 @@ import org.apache.camel.util.URISupport;
public class FailedToCreateRouteException extends RuntimeCamelException {
private final String routeId;
+ private final String location;
public FailedToCreateRouteException(String cause) {
- super("Failed to create route because of " + cause);
+ super("Failed to create route because: " + cause);
this.routeId = null;
+ this.location = null;
}
- public FailedToCreateRouteException(String routeId, String route, String
cause) {
- super("Failed to create route " + routeId + ": " +
getRouteMessage(route) + " because of " + cause);
+ public FailedToCreateRouteException(String routeId, String location,
String route, String cause) {
+ super("Failed to create route: " + routeId + (location != null ? "
(source: " + location + ")" : "") + ": "
+ + getRouteMessage(route) + " because: " + cause);
this.routeId = routeId;
+ this.location = location;
}
- public FailedToCreateRouteException(String routeId, String route,
Throwable cause) {
- super("Failed to create route " + routeId + ": " +
getRouteMessage(route) + " because of " + getExceptionMessage(cause),
+ public FailedToCreateRouteException(String routeId, String location,
String route, Throwable cause) {
+ super("Failed to create route: " + routeId + (location != null ? "
(source: " + location + ")" : "") + ": "
+ + getRouteMessage(route) + " because: " +
getExceptionMessage(cause),
cause);
this.routeId = routeId;
+ this.location = location;
}
- public FailedToCreateRouteException(String routeId, String route, String
at, Throwable cause) {
- super("Failed to create route " + routeId + " at: >>> " + at + " <<<
in route: " + getRouteMessage(route)
- + " because of " + getExceptionMessage(cause), cause);
+ public FailedToCreateRouteException(String routeId, String location,
String route, String at, Throwable cause) {
+ super("Failed to create route: " + routeId + (location != null ? "
(source: " + location + ")" : "") + " at: >>> " + at
+ + " <<< in route: " + getRouteMessage(route)
+ + " because: " + getExceptionMessage(cause), cause);
this.routeId = routeId;
+ this.location = location;
}
public String getRouteId() {
return routeId;
}
+ public String getLocation() {
+ return location;
+ }
+
protected static String getExceptionMessage(Throwable cause) {
return cause.getMessage() != null ? cause.getMessage() :
cause.getClass().getSimpleName();
}
diff --git
a/core/camel-api/src/main/java/org/apache/camel/FailedToStartRouteException.java
b/core/camel-api/src/main/java/org/apache/camel/FailedToStartRouteException.java
index 850161ca687..cf6a1976ded 100644
---
a/core/camel-api/src/main/java/org/apache/camel/FailedToStartRouteException.java
+++
b/core/camel-api/src/main/java/org/apache/camel/FailedToStartRouteException.java
@@ -22,18 +22,33 @@ package org.apache.camel;
public class FailedToStartRouteException extends RuntimeCamelException {
private final String routeId;
+ private final String location;
public FailedToStartRouteException(String routeId, String message) {
- super("Failed to start route " + routeId + " because of " + message);
+ super("Failed to start route: " + routeId + " because: " + message);
this.routeId = routeId;
+ this.location = null;
}
public FailedToStartRouteException(String routeId, String message,
Throwable cause) {
- super("Failed to start route " + routeId + " because of " + message,
cause);
+ super("Failed to start route: " + routeId + " because: " + message,
cause);
this.routeId = routeId;
+ this.location = null;
+ }
+
+ public FailedToStartRouteException(String routeId, String location, String
message, Throwable cause) {
+ super("Failed to start route: " + routeId + (location != null ? "
(source: " + location + ")" : "") + " because: "
+ + message,
+ cause);
+ this.routeId = routeId;
+ this.location = location;
}
public String getRouteId() {
return routeId;
}
+
+ public String getLocation() {
+ return location;
+ }
}
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteStartupManager.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteStartupManager.java
index 2c3e8de613c..c3535283c0e 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteStartupManager.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteStartupManager.java
@@ -283,8 +283,10 @@ final class InternalRouteStartupManager {
if (other != null && answer != other) {
String otherId = other.getRoute().getId();
throw new FailedToStartRouteException(
- answer.getRoute().getId(), "startupOrder clash. Route " +
otherId + " already has startupOrder " + answer
- .getStartupOrder() + " configured which this route
have as well. Please correct startupOrder to be unique among all your routes.");
+ answer.getRoute().getId(), "Route startup order clash.
Route " + otherId + " already has startupOrder "
+ + answer
+ .getStartupOrder()
+ + " configured which this route
have as well. Please correct startupOrder to be unique among all your routes.");
}
// check in existing already started as well
for (RouteStartupOrder order :
camelContext.getCamelContextExtension().getRouteStartupOrder()) {
@@ -294,7 +296,7 @@ final class InternalRouteStartupManager {
if (!answer.getRoute().getId().equals(otherId)
&& answer.getStartupOrder() == order.getStartupOrder()) {
throw new FailedToStartRouteException(
- answer.getRoute().getId(), "startupOrder clash. Route
" + otherId + " already has startupOrder "
+ answer.getRoute().getId(), "Route startup order clash.
Route " + otherId + " already has startupOrder "
+ answer.getStartupOrder()
+ " configured which this
route have as well. Please correct startupOrder to be unique among all your
routes.");
}
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/RouteService.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/RouteService.java
index db4429af08d..8b5abd3eb48 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/RouteService.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/RouteService.java
@@ -36,7 +36,6 @@ import org.apache.camel.FailedToStartRouteException;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.RouteAware;
-import org.apache.camel.RuntimeCamelException;
import org.apache.camel.Service;
import org.apache.camel.StartupStep;
import org.apache.camel.spi.IdAware;
@@ -79,6 +78,10 @@ public class RouteService extends ChildServiceSupport {
return route.getId();
}
+ public String getLocation() {
+ return route.getSourceLocationShort();
+ }
+
public CamelContext getCamelContext() {
return camelContext;
}
@@ -123,7 +126,7 @@ public class RouteService extends ChildServiceSupport {
try {
doWarmUp();
} catch (Exception e) {
- throw new FailedToStartRouteException(getId(),
e.getLocalizedMessage(), e);
+ throw new FailedToStartRouteException(getId(), getLocation(),
e.getLocalizedMessage(), e);
}
}
@@ -132,7 +135,7 @@ public class RouteService extends ChildServiceSupport {
try {
doSetup();
} catch (Exception e) {
- throw new FailedToStartRouteException(getId(),
e.getLocalizedMessage(), e);
+ throw new FailedToStartRouteException(getId(), getLocation(),
e.getLocalizedMessage(), e);
}
}
}
@@ -240,12 +243,8 @@ public class RouteService extends ChildServiceSupport {
EventHelper.notifyRouteStarting(camelContext, route);
}
- try {
- // ensure we are warmed up
- warmUp();
- } catch (FailedToStartRouteException e) {
- throw RuntimeCamelException.wrapRuntimeException(e);
- }
+ // ensure we are warmed up
+ warmUp();
try (MDCHelper mdcHelper = new MDCHelper(route.getId())) {
// start the route itself
diff --git
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 3549773d6cb..d83560182af 100644
---
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -641,7 +641,7 @@ public class DefaultCamelContext extends SimpleCamelContext
implements ModelCame
if (duplicate != null) {
throw new FailedToStartRouteException(
routeDefinition.getId(),
- "duplicate id detected: " + duplicate
+ "Duplicate id detected: " + duplicate
+ ". Please correct
ids to be unique among all your routes.");
}
diff --git
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index f767c9ea08e..ec4e85e8f5c 100644
---
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -576,7 +576,7 @@ public class DefaultModel implements Model {
if (duplicate != null) {
throw new FailedToCreateRouteFromTemplateException(
routeId, routeTemplateId,
- "duplicate id detected: " + duplicate + ". Please correct
ids to be unique among all your routes.");
+ "Duplicate id detected: " + duplicate + ". Please correct
ids to be unique among all your routes.");
}
// must use route collection to prepare the created route to
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index 5172592716d..1dd53f99079 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -403,6 +403,9 @@ public final class ProcessorDefinitionHelper {
StackTraceElement e = st[i];
if (!e.getClassName().startsWith("org.apache.camel.model") &&
!e.getClassName().startsWith("org.apache.camel.builder.RouteBuilder") &&
+
!e.getClassName().startsWith("org.apache.camel.reifier.RouteReifier") &&
+ !e.getClassName().startsWith("org.apache.camel.impl")
&&
+
!e.getClassName().startsWith("org.apache.camel.support") &&
!e.getClassName().startsWith("org.apache.camel.dsl")) {
// when we are no longer in model/RouteBuilder, we have
found the location:line-number
node.setLineNumber(e.getLineNumber());
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
index cd71e075ec1..eced54acf90 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -41,6 +41,7 @@ import org.apache.camel.ShutdownRunningTask;
import org.apache.camel.StartupStep;
import org.apache.camel.model.ModelCamelContext;
import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.PropertyDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.processor.ContractAdvice;
@@ -57,6 +58,7 @@ import org.apache.camel.spi.NodeIdFactory;
import org.apache.camel.spi.RoutePolicy;
import org.apache.camel.spi.RoutePolicyFactory;
import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.util.IOHelper;
@@ -87,9 +89,10 @@ public class RouteReifier extends
ProcessorReifier<RouteDefinition> {
} catch (FailedToCreateRouteException e) {
throw e;
} catch (Exception e) {
- // wrap in exception which provide more details about which route
- // was failing
- throw new FailedToCreateRouteException(definition.getId(),
definition.toString(), e);
+ // location on route is stored on input
+
ProcessorDefinitionHelper.prepareSourceLocation(definition.getResource(),
definition.getInput());
+ String source =
LoggerHelper.getSourceLocationOnly(definition.getInput());
+ throw new FailedToCreateRouteException(definition.getRouteId(),
source, definition.toString(), e);
}
}
@@ -213,7 +216,11 @@ public class RouteReifier extends
ProcessorReifier<RouteDefinition> {
Exception cause = new IllegalArgumentException(
"Route " + definition.getId() + " has no output
processors."
+ " You need to add
outputs to the route such as to(\"log:foo\").");
- throw new FailedToCreateRouteException(definition.getId(),
definition.toString(), at, cause);
+ // location on route is stored on input
+
ProcessorDefinitionHelper.prepareSourceLocation(definition.getResource(),
definition.getInput());
+ String source =
LoggerHelper.getSourceLocationOnly(definition.getInput());
+ throw new FailedToCreateRouteException(
+ definition.getRouteId(), source, definition.toString(),
at, cause);
}
List<ProcessorDefinition<?>> list = new
ArrayList<>(definition.getOutputs());
@@ -232,7 +239,11 @@ public class RouteReifier extends
ProcessorReifier<RouteDefinition> {
camelContext.getCamelContextExtension().getStartupStepRecorder().endStep(step);
} catch (Exception e) {
- throw new FailedToCreateRouteException(definition.getId(),
definition.toString(), output.toString(), e);
+ // location on route is stored on input
+ String source = LoggerHelper
+ .getLineNumberLoggerName(definition.getInput() != null
? definition.getInput().getLocation() : null);
+ throw new FailedToCreateRouteException(
+ definition.getRouteId(), source,
definition.toString(), output.toString(), e);
}
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/direct/DirectEndpointRouteInlinedTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/direct/DirectEndpointRouteInlinedTest.java
index e85f7bd9518..69ed88dd62c 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/direct/DirectEndpointRouteInlinedTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/direct/DirectEndpointRouteInlinedTest.java
@@ -62,7 +62,7 @@ public class DirectEndpointRouteInlinedTest extends
ContextTestSupport {
}, "Should have thrown exception");
assertTrue(e.getMessage().matches(
- "Failed to start route route[0-9]+ because of Multiple
consumers for the same endpoint is not allowed: direct://start"));
+ "Failed to start route: route[0-9]+ because: Multiple
consumers for the same endpoint is not allowed: direct://start"));
}
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaConcurrentConsumersNPEIssueTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaConcurrentConsumersNPEIssueTest.java
index 68938880167..ee0a9ca3baa 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaConcurrentConsumersNPEIssueTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaConcurrentConsumersNPEIssueTest.java
@@ -40,7 +40,7 @@ public class SedaConcurrentConsumersNPEIssueTest extends
ContextTestSupport {
= assertThrows(FailedToStartRouteException.class, () ->
context.getRouteController().startRoute("first"),
"Should have thrown exception");
- assertEquals("Failed to start route first because of Multiple
consumers for the same endpoint is not allowed:"
+ assertEquals("Failed to start route: first because: Multiple consumers
for the same endpoint is not allowed:"
+ " seda://foo?concurrentConsumers=5",
e.getMessage());
}
@@ -61,7 +61,7 @@ public class SedaConcurrentConsumersNPEIssueTest extends
ContextTestSupport {
= assertThrows(FailedToStartRouteException.class, () ->
context.getRouteController().startRoute("first"),
"Should have thrown exception");
- assertEquals("Failed to start route first because of Multiple
consumers for the same endpoint is not allowed:"
+ assertEquals("Failed to start route: first because: Multiple consumers
for the same endpoint is not allowed:"
+ " seda://foo?concurrentConsumers=5",
e.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 8b9f9665d02..8907801112d 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
@@ -43,7 +43,7 @@ public class GracefulShutdownNoAutoStartOrderClashTest
extends ContextTestSuppor
Exception e = assertThrows(Exception.class, () -> context.start(),
"Should have thrown an exception");
assertEquals(
- "Failed to start route bar because of startupOrder clash.
Route foo already has startupOrder 5 configured"
+ "Failed to start route: bar because: Route startup order
clash. Route foo already has startupOrder 5 configured"
+ " 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/RouteIdClashTest.java
b/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdClashTest.java
index 5f1d9445c46..6382c8d0a86 100644
---
a/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdClashTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/issues/RouteIdClashTest.java
@@ -47,7 +47,7 @@ public class RouteIdClashTest extends ContextTestSupport {
} catch (FailedToStartRouteException e) {
Assertions.assertEquals("myroute", e.getRouteId());
Assertions.assertEquals(
- "Failed to start route myroute because of duplicate id
detected: myroute. Please correct ids to be unique among all your routes.",
+ "Failed to start route: myroute because: Duplicate id
detected: myroute. Please correct ids to be unique among all your routes.",
e.getMessage());
}
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/model/StartingRoutesErrorReportedTest.java
b/core/camel-core/src/test/java/org/apache/camel/model/StartingRoutesErrorReportedTest.java
index a08563b33b8..f68a24d01fb 100644
---
a/core/camel-core/src/test/java/org/apache/camel/model/StartingRoutesErrorReportedTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/model/StartingRoutesErrorReportedTest.java
@@ -17,9 +17,11 @@
package org.apache.camel.model;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.FailedToCreateRouteException;
import org.apache.camel.builder.RouteBuilder;
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -37,8 +39,8 @@ public class StartingRoutesErrorReportedTest extends
ContextTestSupport {
context.start();
});
- assertTrue(e.getMessage().startsWith(
- "Failed to create route route1:
Route(route1)[From[direct:start?foo=bar] -> [To[mock:result]... because of"));
+ FailedToCreateRouteException fe =
assertIsInstanceOf(FailedToCreateRouteException.class, e);
+ assertEquals("route1", fe.getRouteId());
}
@Test
@@ -54,7 +56,7 @@ public class StartingRoutesErrorReportedTest extends
ContextTestSupport {
});
assertTrue(
- e.getMessage().startsWith("Failed to create route route2 at:
>>> To[direct:result?foo=bar] <<< in route:"));
+ e.getMessage().startsWith("Failed to create route: route2 at:
>>> To[direct:result?foo=bar] <<< in route:"));
}
@Test
@@ -70,7 +72,7 @@ public class StartingRoutesErrorReportedTest extends
ContextTestSupport {
});
assertTrue(
- e.getMessage().startsWith("Failed to create route route2 at:
>>> To[direct:result?foo=bar] <<< in route:"));
+ e.getMessage().startsWith("Failed to create route: route2 at:
>>> To[direct:result?foo=bar] <<< in route:"));
}
@Test
@@ -85,7 +87,7 @@ public class StartingRoutesErrorReportedTest extends
ContextTestSupport {
context.start();
}, "Should have thrown exception");
- assertTrue(e.getMessage().startsWith("Failed to create route route3
at: >>> Bean[ref:] <<< in route:"));
+ assertTrue(e.getMessage().startsWith("Failed to create route: route3
at: >>> Bean[ref:] <<< in route:"));
}
@Test
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
b/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
index 71119f09802..1931ddbce0b 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/RoutesConfigurer.java
@@ -383,7 +383,7 @@ public class RoutesConfigurer extends ServiceSupport
implements NonManagedServic
if (!dups.isEmpty()) {
String id = String.join(",", dups);
throw new FailedToCreateRouteException(
- "duplicate route ids detected: " + id + ". Please correct
ids to be unique among all your routes.");
+ "Duplicate route ids detected: " + id + ". Please correct
ids to be unique among all your routes.");
}
}
diff --git
a/core/camel-main/src/test/java/org/apache/camel/main/MainScan3Test.java
b/core/camel-main/src/test/java/org/apache/camel/main/MainScan3Test.java
index 36bf3da9adb..527da89a614 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/MainScan3Test.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MainScan3Test.java
@@ -33,7 +33,7 @@ public class MainScan3Test {
fail();
} catch (FailedToCreateRouteException e) {
assertEquals(
- "Failed to create route because of duplicate route ids
detected: foo2. Please correct ids to be unique among all your routes.",
+ "Failed to create route because: Duplicate route ids
detected: foo2. Please correct ids to be unique among all your routes.",
e.getMessage());
}
diff --git
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedDuplicateIdTest.java
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedDuplicateIdTest.java
index 73526f4ba03..22dc06931eb 100644
---
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedDuplicateIdTest.java
+++
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedDuplicateIdTest.java
@@ -52,7 +52,7 @@ public class ManagedDuplicateIdTest extends
ManagementTestSupport {
fail("Should fail");
} catch (Exception e) {
assertEquals(
- "Failed to start route foo because of duplicate id
detected: clash. Please correct ids to be unique among all your routes.",
+ "Failed to start route: foo because: Duplicate id
detected: clash. Please correct ids to be unique among all your routes.",
e.getMessage());
}
}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/LoggerHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/LoggerHelper.java
index 35c419c3e54..a2258b4b884 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/LoggerHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/LoggerHelper.java
@@ -93,6 +93,24 @@ public final class LoggerHelper {
return name;
}
+ public static String getSourceLocationOnly(Object node) {
+ String name = null;
+ if (node instanceof LineNumberAware) {
+ if (node instanceof NamedRoute namedRoute) {
+ // we want the input from a route as it has the source
location / line number
+ node = namedRoute.getInput();
+ }
+
+ final LineNumberAware lineNumberAware = (LineNumberAware) node;
+ String loc = lineNumberAware.getLocation();
+ if (loc != null) {
+ // is it a class or file?
+ name = loc;
+ }
+ }
+ return name;
+ }
+
public static String stripSourceLocationLineNumber(String location) {
int cnt = StringHelper.countChar(location, ':');
if (cnt > 1) {
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
index 6f336cdbd5b..50eb5d33e00 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
@@ -32,9 +32,9 @@ public enum RuntimeType {
public static RuntimeType fromValue(String value) {
value = value.toLowerCase(Locale.ROOT);
return switch (value) {
- case "spring-boot", "camel-spring-boot" -> RuntimeType.springBoot;
+ case "spring", "spring-boot", "camel-spring-boot" ->
RuntimeType.springBoot;
case "quarkus", "camel-quarkus" -> RuntimeType.quarkus;
- case "main", "camel-main" -> RuntimeType.main;
+ case "main", "camel-main", "camel" -> RuntimeType.main;
default -> throw new IllegalArgumentException("Unsupported runtime
" + value);
};
}
diff --git
a/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/CustomJarsITCase.java
b/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/CustomJarsITCase.java
index 7840f4ecc8a..b78ccb0c4d4 100644
---
a/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/CustomJarsITCase.java
+++
b/dsl/camel-jbang/camel-jbang-it/src/test/java/org/apache/camel/dsl/jbang/it/CustomJarsITCase.java
@@ -30,7 +30,7 @@ public class CustomJarsITCase extends JBangTestSupport {
Assertions
.assertThatCode(() -> execute(String.format("run
%s/CircuitBreakerRoute.java --dep=camel-timer", mountPoint())))
.as("the application without dependency will cause error")
- .hasStackTraceContaining("Failed to create route
circuitBreaker")
+ .hasStackTraceContaining("Failed to create route:
circuitBreaker")
.hasStackTraceContaining(
"Cannot find camel-resilience4j or
camel-microprofile-fault-tolerance on the classpath.");
executeBackground(String.format("run %s/CircuitBreakerRoute.java
--dep=camel-timer,camel-resilience4j", mountPoint()));