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 2022/04/15 09:27:36 UTC

[camel] 01/02: camel-core - Better loc:line for other DSLs

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 <cl...@gmail.com>
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;