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;