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/01/03 10:34:43 UTC

[camel] branch main updated (0139ad4 -> 757a7d4)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 0139ad4  Regen
     new 1513d95  CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
     new c63cbf8  CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
     new 5741277  CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
     new 49bd18d  CAMEL-17411: camel-yaml-dsl - May be parsed twice when using routes configuration
     new 99455d5  CAMEL-17411: camel-yaml-dsl - fix source location when loading multiple files.
     new 757a7d4  CAMEL-17413: camel-core - Route configurations may not have source loc:line

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/java/org/apache/camel/NamedRoute.java |  5 ++
 .../src/main/java/org/apache/camel/spi/Tracer.java | 14 ++++-
 .../camel/impl/engine/CamelInternalProcessor.java  |  9 ++-
 .../apache/camel/impl/engine/DefaultTracer.java    | 64 +++++++++++++++++++---
 .../apache/camel/model/ProcessorDefinition.java    | 46 +++++++++++-----
 .../camel/model/RouteConfigurationDefinition.java  |  7 +++
 .../camel/model/RouteConfigurationsDefinition.java |  2 +
 .../org/apache/camel/model/RouteDefinition.java    |  8 ++-
 .../camel/dsl/yaml/KameletRoutesBuilderLoader.java | 18 +++---
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    | 59 +++++++++++++++++---
 .../dsl/yaml/YamlRoutesBuilderLoaderSupport.java   |  2 -
 11 files changed, 188 insertions(+), 46 deletions(-)

[camel] 03/06: CAMEL-17338: Tracer - Use source loc:line in logger name. WIP

Posted by da...@apache.org.
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 5741277d9c41a17b36e151af69ef830d8e9e4014
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jan 2 17:25:40 2022 +0100

    CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
---
 .../src/main/java/org/apache/camel/model/ProcessorDefinition.java  | 6 +++---
 .../src/main/java/org/apache/camel/model/RouteDefinition.java      | 7 ++++---
 2 files changed, 7 insertions(+), 6 deletions(-)

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 1dd3fa8..b23e1b9 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
@@ -168,9 +168,9 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         RouteDefinition route = ProcessorDefinitionHelper.getRoute(this);
         if (route != null) {
             CamelContext context = route.getCamelContext();
-            if (context != null && context.isDebugging()) {
-                // we want to capture source location:line for every output when debugging is enabled
-                // this is an expensive operation and therefore only used if debugging is enabled
+            if (context != null && (context.isDebugging() || context.isTracing())) {
+                // we want to capture source location:line for every output
+                // (this is an expensive operation, so only do this if debugging or tracing is enabled)
                 ProcessorDefinitionHelper.prepareSourceLocation(output);
                 if (log.isDebugEnabled()) {
                     log.debug("{} located in {}:{}", output.getShortName(), output.getLocation(),
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 b19c0af..1fabdf4 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
@@ -733,9 +733,10 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
         // does not have a <from> as it is implied to be the rest endpoint
         this.input = input;
 
-        if (getCamelContext() != null && getCamelContext().isDebugging()) {
-            // we want to capture source location:line for every output when debugging is enabled
-            // this is an expensive operation and therefore only used if debugging is enabled
+        if (getCamelContext() != null
+                && (getCamelContext().isDebugging() || getCamelContext().isTracing())) {
+            // we want to capture source location:line for every output
+            // (this is an expensive operation, so only do this if debugging or tracing is enabled)
             ProcessorDefinitionHelper.prepareSourceLocation(input);
             if (log.isDebugEnabled()) {
                 log.debug("{} located in {}:{}", input.getShortName(), input.getLocation(),

[camel] 01/06: CAMEL-17338: Tracer - Use source loc:line in logger name. WIP

Posted by da...@apache.org.
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 1513d95469347450a03b7860afd895b42f431476
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jan 2 17:15:38 2022 +0100

    CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
---
 .../src/main/java/org/apache/camel/NamedRoute.java |  5 ++
 .../src/main/java/org/apache/camel/spi/Tracer.java | 14 ++++-
 .../camel/impl/engine/CamelInternalProcessor.java  |  9 ++-
 .../apache/camel/impl/engine/DefaultTracer.java    | 65 +++++++++++++++++++---
 .../org/apache/camel/model/RouteDefinition.java    |  1 +
 5 files changed, 80 insertions(+), 14 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java b/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
index e7f4529..4d59294 100644
--- a/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
+++ b/core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
@@ -31,4 +31,9 @@ public interface NamedRoute {
      */
     String getEndpointUrl();
 
+    /**
+     * Gets the route input
+     */
+    NamedNode getInput();
+
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java b/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
index 6c090bf..0aa3329 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
@@ -38,7 +38,7 @@ public interface Tracer extends StaticService {
     /**
      * Trace before the route (eg input to route)
      *
-     * @param route    the route
+     * @param route    the route EIP
      * @param exchange the exchange
      */
     void traceBeforeRoute(NamedRoute route, Exchange exchange);
@@ -62,9 +62,19 @@ public interface Tracer extends StaticService {
     /**
      * Trace after the route (eg output from route)
      *
-     * @param route    the route
+     * @param route    the route EIP
      * @param exchange the exchange
      */
+    void traceAfterRoute(NamedRoute route, Exchange exchange);
+
+    /**
+     * Trace after the route (eg output from route)
+     *
+     * @param      route    the route
+     * @param      exchange the exchange
+     * @deprecated          use {@link #traceAfterRoute(NamedRoute, Exchange)}
+     */
+    @Deprecated
     void traceAfterRoute(Route route, Exchange exchange);
 
     /**
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 97ba072..f84bea7 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -1010,7 +1010,8 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
             this.processorDefinition = processorDefinition;
             this.routeDefinition = routeDefinition;
             this.tracingAfterRoute
-                    = routeDefinition != null ? new TracingAfterRoute(tracer, routeDefinition.getRouteId()) : null;
+                    = routeDefinition != null
+                            ? new TracingAfterRoute(tracer, routeDefinition.getRouteId(), routeDefinition) : null;
         }
 
         @Override
@@ -1045,16 +1046,18 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
 
             private final Tracer tracer;
             private final String routeId;
+            private final NamedRoute node;
 
-            private TracingAfterRoute(Tracer tracer, String routeId) {
+            private TracingAfterRoute(Tracer tracer, String routeId, NamedRoute node) {
                 this.tracer = tracer;
                 this.routeId = routeId;
+                this.node = node;
             }
 
             @Override
             public void onAfterRoute(Route route, Exchange exchange) {
                 if (routeId.equals(route.getId())) {
-                    tracer.traceAfterRoute(route, exchange);
+                    tracer.traceAfterRoute(node, exchange);
                 }
             }
 
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 7cf8e6d..73c4bad 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
@@ -21,6 +21,7 @@ import java.util.Objects;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
+import org.apache.camel.LineNumberAware;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NamedRoute;
 import org.apache.camel.Route;
@@ -31,6 +32,7 @@ import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.builder.ExpressionBuilder;
 import org.apache.camel.support.processor.DefaultExchangeFormatter;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
@@ -77,7 +79,6 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
     }
 
     @Override
-    @SuppressWarnings("unchecked")
     public void traceBeforeNode(NamedNode node, Exchange exchange) {
         if (shouldTrace(node)) {
             traceCounter++;
@@ -95,7 +96,7 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
             String data = exchangeFormatter.format(exchange);
             sb.append(data);
             String out = sb.toString();
-            dumpTrace(out);
+            dumpTrace(out, node);
         }
     }
 
@@ -121,17 +122,28 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
         boolean original = route.getRouteId().equals(exchange.getFromRouteId());
         String arrow = original ? "*-->" : "--->";
 
+        // we need to capture original source:line-number
+        if (original && camelContext.isDebugging()) {
+            int line = route.getInput().getLineNumber();
+            String loc = route.getInput().getLocation();
+        }
+
         StringBuilder sb = new StringBuilder();
         sb.append(String.format(TRACING_OUTPUT, arrow, route.getRouteId(), label));
         sb.append(" ");
         String data = exchangeFormatter.format(exchange);
         sb.append(data);
         String out = sb.toString();
-        dumpTrace(out);
+        dumpTrace(out, route);
     }
 
     @Override
     public void traceAfterRoute(Route route, Exchange exchange) {
+        // noop
+    }
+
+    @Override
+    public void traceAfterRoute(NamedRoute route, Exchange exchange) {
         if (!traceBeforeAndAfterRoute) {
             return;
         }
@@ -140,20 +152,20 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
         // the sanitizeUri takes a very long time for very long string and the format cuts this to
         // 33 characters, anyway. Cut this to 50 characters. This will give enough space for removing
         // characters in the sanitizeUri method and will be reasonably fast
-        String uri = route.getConsumer().getEndpoint().getEndpointUri();
+        String uri = route.getEndpointUrl();
         String label = "from[" + URISupport.sanitizeUri(StringHelper.limitLength(uri, 50) + "]");
 
         // the arrow has a * if its an exchange that is done
-        boolean original = route.getId().equals(exchange.getFromRouteId());
+        boolean original = route.getRouteId().equals(exchange.getFromRouteId());
         String arrow = original ? "*<--" : "<---";
 
         StringBuilder sb = new StringBuilder();
-        sb.append(String.format(TRACING_OUTPUT, arrow, route.getId(), label));
+        sb.append(String.format(TRACING_OUTPUT, arrow, route.getRouteId(), label));
         sb.append(" ");
         String data = exchangeFormatter.format(exchange);
         sb.append(data);
         String out = sb.toString();
-        dumpTrace(out);
+        dumpTrace(out, route);
     }
 
     @Override
@@ -240,8 +252,43 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
         this.exchangeFormatter = exchangeFormatter;
     }
 
-    protected void dumpTrace(String out) {
-        LOG.info(out);
+    protected String getLoggerName(Object node) {
+        String name = null;
+        if (camelContext.isDebugging() && node instanceof LineNumberAware) {
+            if (node instanceof NamedRoute) {
+                // we want the input from a route as it has the source location / line number
+                node = ((NamedRoute) node).getInput();
+            }
+            String loc = ((LineNumberAware) node).getLocation();
+            int line = ((LineNumberAware) node).getLineNumber();
+            if (line != -1 && loc != null) {
+                // is it a class or file?
+                name = loc;
+                if (loc.contains(":")) {
+                    // file based such as xml and yaml
+                    name = FileUtil.onlyName(loc);
+                    name = FileUtil.stripExt(name);
+                } else {
+                    // classname so let us only grab the name
+                    int pos = name.lastIndexOf('.');
+                    if (pos > 0) {
+                        name = name.substring(pos + 1);
+                    }
+                }
+                name += ":" + line;
+            }
+        }
+        return name;
+    }
+
+    protected void dumpTrace(String out, Object node) {
+        String name = getLoggerName(node);
+        if (name != null) {
+            Logger log = LoggerFactory.getLogger(name);
+            log.info(out);
+        } else {
+            LOG.info(out);
+        }
     }
 
     protected boolean shouldTracePattern(NamedNode definition) {
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 f318336..b19c0af 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
@@ -716,6 +716,7 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
     // Properties
     // -----------------------------------------------------------------------
 
+    @Override
     public FromDefinition getInput() {
         return input;
     }

[camel] 06/06: CAMEL-17413: camel-core - Route configurations may not have source loc:line

Posted by da...@apache.org.
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 757a7d4539ac426e259828548b3036d837cea500
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 3 10:56:55 2022 +0100

    CAMEL-17413: camel-core - Route configurations may not have source loc:line
---
 .../apache/camel/model/ProcessorDefinition.java    | 46 ++++++++++++++++------
 .../camel/model/RouteConfigurationDefinition.java  |  7 ++++
 .../camel/model/RouteConfigurationsDefinition.java |  2 +
 3 files changed, 42 insertions(+), 13 deletions(-)

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 b23e1b9..cfcc6d7 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
@@ -87,6 +87,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     @XmlTransient
     private ProcessorDefinition<?> parent;
     @XmlTransient
+    private RouteConfigurationDefinition routeConfiguration;
+    @XmlTransient
     private final List<InterceptStrategy> interceptStrategies = new ArrayList<>();
     @XmlTransient
     private final int index;
@@ -162,22 +164,31 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
 
     @Override
     public void addOutput(ProcessorDefinition<?> output) {
-        // inject context
-        CamelContextAware.trySetCamelContext(output, getCamelContext());
-
-        RouteDefinition route = ProcessorDefinitionHelper.getRoute(this);
-        if (route != null) {
-            CamelContext context = route.getCamelContext();
-            if (context != null && (context.isDebugging() || context.isTracing())) {
-                // we want to capture source location:line for every output
-                // (this is an expensive operation, so only do this if debugging or tracing is enabled)
-                ProcessorDefinitionHelper.prepareSourceLocation(output);
-                if (log.isDebugEnabled()) {
-                    log.debug("{} located in {}:{}", output.getShortName(), output.getLocation(),
-                            output.getLineNumber());
+        // grab camel context depends on if this is a regular route or a route configuration
+        CamelContext context = this.getCamelContext();
+        if (context == null) {
+            RouteDefinition route = ProcessorDefinitionHelper.getRoute(this);
+            if (route != null) {
+                context = route.getCamelContext();
+            } else {
+                RouteConfigurationDefinition rc = this.getRouteConfiguration();
+                if (rc != null) {
+                    context = rc.getCamelContext();
                 }
             }
         }
+        if (context != null && (context.isDebugging() || context.isTracing())) {
+            // we want to capture source location:line for every output
+            // (this is an expensive operation, so only do this if debugging or tracing is enabled)
+            ProcessorDefinitionHelper.prepareSourceLocation(output);
+            if (log.isDebugEnabled()) {
+                log.debug("{} located in {}:{}", output.getShortName(), output.getLocation(),
+                        output.getLineNumber());
+            }
+        }
+
+        // inject context
+        CamelContextAware.trySetCamelContext(output, context);
 
         if (!(this instanceof OutputNode)) {
             getParent().addOutput(output);
@@ -3745,6 +3756,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
 
     // Properties
     // -------------------------------------------------------------------------
+
     @Override
     public ProcessorDefinition<?> getParent() {
         return parent;
@@ -3754,6 +3766,14 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         this.parent = parent;
     }
 
+    public RouteConfigurationDefinition getRouteConfiguration() {
+        return routeConfiguration;
+    }
+
+    public void setRouteConfiguration(RouteConfigurationDefinition routeConfiguration) {
+        this.routeConfiguration = routeConfiguration;
+    }
+
     public List<InterceptStrategy> getInterceptStrategies() {
         return interceptStrategies;
     }
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationDefinition.java
index 3a61534..56df20c 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationDefinition.java
@@ -118,6 +118,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public OnExceptionDefinition onException(Class<? extends Throwable> exceptionType) {
         OnExceptionDefinition answer = new OnExceptionDefinition(exceptionType);
+        answer.setRouteConfiguration(this);
         onExceptions.add(answer);
         return answer;
     }
@@ -131,6 +132,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public OnExceptionDefinition onException(Class<? extends Throwable>... exceptions) {
         OnExceptionDefinition answer = new OnExceptionDefinition(Arrays.asList(exceptions));
+        answer.setRouteConfiguration(this);
         onExceptions.add(answer);
         return answer;
     }
@@ -143,6 +145,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public OnCompletionDefinition onCompletion() {
         OnCompletionDefinition answer = new OnCompletionDefinition();
+        answer.setRouteConfiguration(this);
         // is global scoped by default
         answer.setRouteScoped(false);
         onCompletions.add(answer);
@@ -156,6 +159,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public InterceptDefinition intercept() {
         InterceptDefinition answer = new InterceptDefinition();
+        answer.setRouteConfiguration(this);
         intercepts.add(answer);
         return answer;
     }
@@ -167,6 +171,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public InterceptFromDefinition interceptFrom() {
         InterceptFromDefinition answer = new InterceptFromDefinition();
+        answer.setRouteConfiguration(this);
         interceptFroms.add(answer);
         return answer;
     }
@@ -179,6 +184,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public InterceptFromDefinition interceptFrom(String uri) {
         InterceptFromDefinition answer = new InterceptFromDefinition(uri);
+        answer.setRouteConfiguration(this);
         interceptFroms.add(answer);
         return answer;
     }
@@ -191,6 +197,7 @@ public class RouteConfigurationDefinition extends OptionalIdentifiedDefinition<R
      */
     public InterceptSendToEndpointDefinition interceptSendToEndpoint(String uri) {
         InterceptSendToEndpointDefinition answer = new InterceptSendToEndpointDefinition(uri);
+        answer.setRouteConfiguration(this);
         interceptSendTos.add(answer);
         return answer;
     }
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationsDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationsDefinition.java
index 92ec02c..95989b2 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationsDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteConfigurationsDefinition.java
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.spi.Metadata;
 
 /**
@@ -108,6 +109,7 @@ public class RouteConfigurationsDefinition implements RouteConfigurationContaine
         if (id != null) {
             config.setId(id);
         }
+        CamelContextAware.trySetCamelContext(config, camelContext);
         return config;
     }
 

[camel] 04/06: CAMEL-17411: camel-yaml-dsl - May be parsed twice when using routes configuration

Posted by da...@apache.org.
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 49bd18d967e4f7c911f21e093db0157147b69d23
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 3 10:02:14 2022 +0100

    CAMEL-17411: camel-yaml-dsl - May be parsed twice when using routes configuration
---
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    | 50 +++++++++++++++++++---
 1 file changed, 44 insertions(+), 6 deletions(-)

diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index bdacad0..1a15d0e 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.dsl.yaml;
 
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.api.management.ManagedResource;
@@ -71,6 +73,12 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
     }
 
     protected RouteBuilder builder(Node root, Resource resource) {
+
+        // we need to keep track of already configured items as the yaml-dsl returns a
+        // RouteConfigurationBuilder that is capable of both route and route configurations
+        // which can lead to the same items being processed twice
+        final Set<Integer> indexes = new HashSet<>();
+
         return new RouteConfigurationBuilder() {
             @Override
             public void configure() throws Exception {
@@ -82,15 +90,24 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
                 if (target instanceof Node) {
                     SequenceNode seq = asSequenceNode((Node) target);
                     for (Node node : seq.getValue()) {
-                        Object item = getDeserializationContext().mandatoryResolve(node).construct(node);
-                        doConfigure(item);
+                        int idx = -1;
+                        if (node.getStartMark().isPresent()) {
+                            idx = node.getStartMark().get().getIndex();
+                        }
+                        if (idx == -1 || !indexes.contains(idx)) {
+                            Object item = getDeserializationContext().mandatoryResolve(node).construct(node);
+                            boolean accepted = doConfigure(item);
+                            if (accepted && idx != -1) {
+                                indexes.add(idx);
+                            }
+                        }
                     }
                 } else {
                     doConfigure(target);
                 }
             }
 
-            private void doConfigure(Object item) throws Exception {
+            private boolean doConfigure(Object item) throws Exception {
                 if (item instanceof OutputAwareFromDefinition) {
                     RouteDefinition route = new RouteDefinition();
                     route.setInput(((OutputAwareFromDefinition) item).getDelegate());
@@ -98,11 +115,14 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
 
                     CamelContextAware.trySetCamelContext(getRouteCollection(), getCamelContext());
                     getRouteCollection().route(route);
+                    return true;
                 } else if (item instanceof RouteDefinition) {
                     CamelContextAware.trySetCamelContext(getRouteCollection(), getCamelContext());
                     getRouteCollection().route((RouteDefinition) item);
+                    return true;
                 } else if (item instanceof CamelContextCustomizer) {
                     ((CamelContextCustomizer) item).configure(getCamelContext());
+                    return true;
                 } else if (item instanceof OnExceptionDefinition) {
                     if (!getRouteCollection().getRoutes().isEmpty()) {
                         throw new IllegalArgumentException(
@@ -110,15 +130,18 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
                     }
                     CamelContextAware.trySetCamelContext(getRouteCollection(), getCamelContext());
                     getRouteCollection().getOnExceptions().add((OnExceptionDefinition) item);
+                    return true;
                 } else if (item instanceof ErrorHandlerBuilder) {
                     if (!getRouteCollection().getRoutes().isEmpty()) {
                         throw new IllegalArgumentException(
                                 "errorHandler must be defined before any routes in the RouteBuilder");
                     }
                     errorHandler((ErrorHandlerBuilder) item);
+                    return true;
                 } else if (item instanceof RouteTemplateDefinition) {
                     CamelContextAware.trySetCamelContext(getRouteTemplateCollection(), getCamelContext());
                     getRouteTemplateCollection().routeTemplate((RouteTemplateDefinition) item);
+                    return true;
                 } else if (item instanceof RestDefinition) {
                     RestDefinition definition = (RestDefinition) item;
                     for (VerbDefinition verb : definition.getVerbs()) {
@@ -126,11 +149,15 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
                     }
                     CamelContextAware.trySetCamelContext(getRestCollection(), getCamelContext());
                     getRestCollection().rest(definition);
+                    return true;
                 } else if (item instanceof RestConfigurationDefinition) {
                     ((RestConfigurationDefinition) item).asRestConfiguration(
                             getCamelContext(),
                             getCamelContext().getRestConfiguration());
+                    return true;
                 }
+
+                return false;
             }
 
             @Override
@@ -143,19 +170,30 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
                 if (target instanceof Node) {
                     SequenceNode seq = asSequenceNode((Node) target);
                     for (Node node : seq.getValue()) {
-                        Object item = getDeserializationContext().mandatoryResolve(node).construct(node);
-                        doConfiguration(item);
+                        int idx = -1;
+                        if (node.getStartMark().isPresent()) {
+                            idx = node.getStartMark().get().getIndex();
+                        }
+                        if (idx == -1 || !indexes.contains(idx)) {
+                            Object item = getDeserializationContext().mandatoryResolve(node).construct(node);
+                            boolean accepted = doConfiguration(item);
+                            if (accepted && idx != -1) {
+                                indexes.add(idx);
+                            }
+                        }
                     }
                 } else {
                     doConfiguration(target);
                 }
             }
 
-            private void doConfiguration(Object item) {
+            private boolean doConfiguration(Object item) {
                 if (item instanceof RouteConfigurationDefinition) {
                     CamelContextAware.trySetCamelContext(getRouteConfigurationCollection(), getCamelContext());
                     getRouteConfigurationCollection().routeConfiguration((RouteConfigurationDefinition) item);
+                    return true;
                 }
+                return false;
             }
         };
     }

[camel] 05/06: CAMEL-17411: camel-yaml-dsl - fix source location when loading multiple files.

Posted by da...@apache.org.
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 99455d545f0b8f62a2deb6e4eb65ca033458dc11
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 3 10:16:06 2022 +0100

    CAMEL-17411: camel-yaml-dsl - fix source location when loading multiple files.
---
 .../camel/dsl/yaml/KameletRoutesBuilderLoader.java     | 18 +++++++++++-------
 .../apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java |  9 ++++++++-
 .../camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java |  2 --
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
index fe7b9e5..1c53bd1 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
@@ -34,6 +34,7 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asMapping
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asStringSet;
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText;
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.nodeAt;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext;
 
 @ManagedResource(description = "Managed Kamelet RoutesBuilderLoader")
 @RoutesLoader(KameletRoutesBuilderLoader.EXTENSION)
@@ -45,21 +46,24 @@ public class KameletRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
     }
 
     @Override
-    protected RouteBuilder builder(Node node, Resource resource) {
-        Node template = nodeAt(node, "/spec/template");
+    protected RouteBuilder builder(final Node root, final Resource resource) {
+        getDeserializationContext().setResource(resource);
+        setDeserializationContext(root, getDeserializationContext());
+
+        Node template = nodeAt(root, "/spec/template");
         if (template == null) {
             // fallback till flows get removed
-            template = nodeAt(node, "/spec/flows");
+            template = nodeAt(root, "/spec/flows");
         }
         if (template == null) {
             // fallback till flow get removed
-            template = nodeAt(node, "/spec/flow");
+            template = nodeAt(root, "/spec/flow");
         }
         if (template == null) {
             throw new IllegalArgumentException("No template defined");
         }
 
-        Set<String> required = asStringSet(nodeAt(node, "/spec/definition/required"));
+        Set<String> required = asStringSet(nodeAt(root, "/spec/definition/required"));
         if (required == null) {
             required = Collections.emptySet();
         }
@@ -67,9 +71,9 @@ public class KameletRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
         final YamlDeserializationContext context = this.getDeserializationContext();
         final RouteTemplateDefinition rtd = context.construct(template, RouteTemplateDefinition.class);
 
-        rtd.id(asText(nodeAt(node, "/metadata/name")));
+        rtd.id(asText(nodeAt(root, "/metadata/name")));
 
-        Node properties = nodeAt(node, "/spec/definition/properties");
+        Node properties = nodeAt(root, "/spec/definition/properties");
         if (properties != null) {
 
             rtd.setTemplateParameters(new ArrayList<>());
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index 1a15d0e..60f6a30 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -55,6 +55,7 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asMapping
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asSequenceNode;
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText;
 import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.nodeAt;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext;
 
 @ManagedResource(description = "Managed YAML RoutesBuilderLoader")
 @RoutesLoader(YamlRoutesBuilderLoader.EXTENSION)
@@ -72,7 +73,7 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
         super(EXTENSION);
     }
 
-    protected RouteBuilder builder(Node root, Resource resource) {
+    protected RouteBuilder builder(final Node root, final Resource resource) {
 
         // we need to keep track of already configured items as the yaml-dsl returns a
         // RouteConfigurationBuilder that is capable of both route and route configurations
@@ -82,6 +83,9 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
         return new RouteConfigurationBuilder() {
             @Override
             public void configure() throws Exception {
+                getDeserializationContext().setResource(resource);
+                setDeserializationContext(root, getDeserializationContext());
+
                 Object target = preConfigureNode(root);
                 if (target == null) {
                     return;
@@ -162,6 +166,9 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
 
             @Override
             public void configuration() throws Exception {
+                getDeserializationContext().setResource(resource);
+                setDeserializationContext(root, getDeserializationContext());
+
                 Object target = preConfigureNode(root);
                 if (target == null) {
                     return;
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
index c0ba6e3..6102197 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
@@ -117,8 +117,6 @@ public abstract class YamlRoutesBuilderLoaderSupport extends RouteBuilderLoaderS
             throw new FileNotFoundException("Resource not found: " + resource.getLocation());
         }
 
-        deserializationContext.setResource(resource);
-
         try (InputStream is = resource.getInputStream()) {
             final StreamReader reader = new StreamReader(settings, new YamlUnicodeReader(is));
             final Parser parser = new ParserImpl(settings, reader);

[camel] 02/06: CAMEL-17338: Tracer - Use source loc:line in logger name. WIP

Posted by da...@apache.org.
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 c63cbf89feb909f49939b38961fff677b18990b5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jan 2 17:21:10 2022 +0100

    CAMEL-17338: Tracer - Use source loc:line in logger name. WIP
---
 .../src/main/java/org/apache/camel/impl/engine/DefaultTracer.java    | 5 ++---
 1 file changed, 2 insertions(+), 3 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 73c4bad..af7024f 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
@@ -254,7 +254,7 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
 
     protected String getLoggerName(Object node) {
         String name = null;
-        if (camelContext.isDebugging() && node instanceof LineNumberAware) {
+        if (node instanceof LineNumberAware) {
             if (node instanceof NamedRoute) {
                 // we want the input from a route as it has the source location / line number
                 node = ((NamedRoute) node).getInput();
@@ -266,8 +266,7 @@ public class DefaultTracer extends ServiceSupport implements CamelContextAware,
                 name = loc;
                 if (loc.contains(":")) {
                     // file based such as xml and yaml
-                    name = FileUtil.onlyName(loc);
-                    name = FileUtil.stripExt(name);
+                    name = FileUtil.stripPath(loc);
                 } else {
                     // classname so let us only grab the name
                     int pos = name.lastIndexOf('.');