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
commit 9d0d62f8785bf45e4771bcfa20c4ac54737f0fce Author: Claus Ibsen <[email protected]> AuthorDate: Fri Apr 15 11:24:20 2022 +0200 camel-core - Better loc:line for other DSLs --- .../apache/camel/impl/engine/DefaultTracer.java | 1 + .../org/apache/camel/builder/RouteBuilder.java | 42 ++++++++++++++++++++++ .../apache/camel/model/ProcessorDefinition.java | 5 ++- .../camel/model/ProcessorDefinitionHelper.java | 20 +++++++++-- .../org/apache/camel/model/RouteDefinition.java | 2 +- .../org/apache/camel/model/RoutesDefinition.java | 3 ++ .../org/apache/camel/support/LoggerHelper.java | 6 ++-- 7 files changed, 72 insertions(+), 7 deletions(-) diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java index 4bedbd93dbe..3401ddb1cab 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java @@ -126,6 +126,7 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware, // we need to capture original source:line-number if (original && camelContext.isDebugging()) { + // TODO: use in dumpTrace int line = route.getInput().getLineNumber(); String loc = route.getInput().getLocation(); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java index 6286ae5da78..622b581e835 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java @@ -313,6 +313,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild */ public RouteDefinition from(String uri) { getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } RouteDefinition answer = getRouteCollection().from(uri); configureRoute(answer); return answer; @@ -327,6 +330,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild */ public RouteDefinition fromF(String uri, Object... args) { getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } RouteDefinition answer = getRouteCollection().from(String.format(uri, args)); configureRoute(answer); return answer; @@ -340,6 +346,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild */ public RouteDefinition from(Endpoint endpoint) { getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } RouteDefinition answer = getRouteCollection().from(endpoint); configureRoute(answer); return answer; @@ -347,6 +356,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild public RouteDefinition from(EndpointConsumerBuilder endpointDefinition) { getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } RouteDefinition answer = getRouteCollection().from(endpointDefinition); configureRoute(answer); return answer; @@ -362,6 +374,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("errorHandler must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } setErrorHandlerFactory(errorHandlerFactory); } @@ -375,6 +390,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("errorHandler must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } setErrorHandlerFactory(new ErrorHandlerRefDefinition(ref)); } @@ -422,6 +440,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("intercept must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().intercept(); } @@ -435,6 +456,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("interceptFrom must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().interceptFrom(); } @@ -449,6 +473,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("interceptFrom must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().interceptFrom(uri); } @@ -463,6 +490,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("interceptSendToEndpoint must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().interceptSendToEndpoint(uri); } @@ -479,6 +509,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("onException must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().onException(exception); } @@ -509,6 +542,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild throw new IllegalArgumentException("onCompletion must be defined before any routes in the RouteBuilder"); } getRouteCollection().setCamelContext(getContext()); + if (resource != null) { + getRouteCollection().setResource(resource); + } return getRouteCollection().onCompletion(); } @@ -676,12 +712,18 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild protected void populateRoutes() throws Exception { CamelContext camelContext = notNullCamelContext(); getRouteCollection().setCamelContext(camelContext); + if (resource != null) { + getRouteCollection().setResource(resource); + } camelContext.getExtension(Model.class).addRouteDefinitions(getRouteCollection().getRoutes()); } protected void populateOrUpdateRoutes() throws Exception { CamelContext camelContext = notNullCamelContext(); getRouteCollection().setCamelContext(camelContext); + if (resource != null) { + getRouteCollection().setResource(resource); + } // must stop and remove existing running routes for (RouteDefinition route : getRouteCollection().getRoutes()) { camelContext.getRouteController().stopRoute(route.getRouteId()); diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java index b3802477243..af065fcbae0 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java @@ -66,6 +66,8 @@ import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.IdempotentRepository; import org.apache.camel.spi.InterceptStrategy; import org.apache.camel.spi.Policy; +import org.apache.camel.spi.Resource; +import org.apache.camel.spi.ResourceAware; import org.apache.camel.support.ExpressionAdapter; import org.slf4j.Logger; @@ -177,7 +179,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> } if (context != null && (context.isSourceLocationEnabled() || context.isDebugging() || context.isTracing())) { // we want to capture source location:line for every output - ProcessorDefinitionHelper.prepareSourceLocation(output); + Resource resource = this instanceof ResourceAware ? ((ResourceAware) this).getResource() : null; + ProcessorDefinitionHelper.prepareSourceLocation(resource, output); } // inject context 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 2551451a47f..41fb8234338 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 @@ -23,6 +23,8 @@ import java.util.List; import java.util.Set; import org.apache.camel.NamedNode; +import org.apache.camel.spi.Resource; +import org.apache.camel.util.FileUtil; /** * Helper class for ProcessorDefinition and the other model classes. @@ -376,7 +378,17 @@ public final class ProcessorDefinitionHelper { * * @param node the node */ - public static void prepareSourceLocation(NamedNode node) { + public static void prepareSourceLocation(Resource resource, NamedNode node) { + if (resource != null) { + node.setLocation(resource.getLocation()); + + String ext = FileUtil.onlyExt(resource.getLocation(), true); + if ("groovy".equals(ext)) { + // we cannot get line number for groovy scripts + return; + } + } + // line number may already be set if parsed via XML, YAML etc. int number = node.getLineNumber(); if (number < 0) { @@ -385,11 +397,13 @@ public final class ProcessorDefinitionHelper { for (int i = 1; i < st.length; i++) { 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.builder.RouteBuilder") && + !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()); if (node.getLocation() == null) { - node.setLocation(e.getClassName()); + String name = e.getClassName(); + node.setLocation(name); } return; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java index 3b1c3326e4c..9bf93e5ac9d 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java @@ -765,7 +765,7 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> if (getCamelContext() != null && (getCamelContext().isSourceLocationEnabled() || getCamelContext().isDebugging() || getCamelContext().isTracing())) { // we want to capture source location:line for every output - ProcessorDefinitionHelper.prepareSourceLocation(input); + ProcessorDefinitionHelper.prepareSourceLocation(getResource(), input); } } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java index 7c582c65bfb..d1dd9ec93eb 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java @@ -395,6 +395,9 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit if (handler != null) { route.setErrorHandlerFactoryIfNull(handler); } + if (resource != null) { + route.setResource(resource); + } return route; } } 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 7d378835691..f475e300f1f 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 @@ -44,7 +44,7 @@ public final class LoggerHelper { } String loc = ((LineNumberAware) node).getLocation(); int line = ((LineNumberAware) node).getLineNumber(); - if (line != -1 && loc != null) { + if (loc != null) { // is it a class or file? name = loc; if (loc.contains(":")) { @@ -59,7 +59,9 @@ public final class LoggerHelper { name = name.substring(pos + 1); } } - name += ":" + line; + if (line != -1) { + name += ":" + line; + } } } return name;
