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 17:23:59 UTC
[camel] branch main updated: CAMEL-17407: camel-core - Processor should support LineNumberAware
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 4a284c9 CAMEL-17407: camel-core - Processor should support LineNumberAware
4a284c9 is described below
commit 4a284c97c9b693d175ea9be1112585e5678cd62b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 3 18:23:14 2022 +0100
CAMEL-17407: camel-core - Processor should support LineNumberAware
---
.../camel/processor/DefaultProcessorFactory.java | 17 +++++-
.../org/apache/camel/reifier/ProcessReifier.java | 7 +++
.../camel/processor/LineNumberProcessorTest.java | 71 ++++++++++++++++++++++
.../camel/support/TypedProcessorFactory.java | 17 +++++-
4 files changed, 108 insertions(+), 4 deletions(-)
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
index 8ffab7a..bab084b 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Expression;
import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.LineNumberAware;
import org.apache.camel.NamedNode;
import org.apache.camel.NoFactoryAvailableException;
import org.apache.camel.Processor;
@@ -71,7 +72,13 @@ public class DefaultProcessorFactory implements ProcessorFactory, BootstrapClose
Object object = finder.newInstance(name).orElse(null);
if (object instanceof ProcessorFactory) {
ProcessorFactory pc = (ProcessorFactory) object;
- return pc.createChildProcessor(route, definition, mandatory);
+ Processor processor = pc.createChildProcessor(route, definition, mandatory);
+ if (processor instanceof LineNumberAware) {
+ LineNumberAware lna = (LineNumberAware) processor;
+ lna.setLineNumber(definition.getLineNumber());
+ lna.setLocation(definition.getLocation());
+ }
+ return processor;
}
} catch (NoFactoryAvailableException e) {
// ignore there is no custom factory
@@ -89,7 +96,13 @@ public class DefaultProcessorFactory implements ProcessorFactory, BootstrapClose
}
ProcessorFactory pc = finder.newInstance(name, ProcessorFactory.class).orElse(null);
if (pc != null) {
- return pc.createProcessor(route, definition);
+ Processor processor = pc.createProcessor(route, definition);
+ if (processor instanceof LineNumberAware) {
+ LineNumberAware lna = (LineNumberAware) processor;
+ lna.setLineNumber(definition.getLineNumber());
+ lna.setLocation(definition.getLocation());
+ }
+ return processor;
}
return null;
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessReifier.java
index b14a37f..94aa2bf 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessReifier.java
@@ -17,6 +17,7 @@
package org.apache.camel.reifier;
import org.apache.camel.AsyncProcessor;
+import org.apache.camel.LineNumberAware;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.Service;
@@ -40,6 +41,12 @@ public class ProcessReifier extends ProcessorReifier<ProcessDefinition> {
answer = mandatoryLookup(definition.getRef(), Processor.class);
}
+ if (answer instanceof LineNumberAware) {
+ LineNumberAware lna = (LineNumberAware) answer;
+ lna.setLineNumber(definition.getLineNumber());
+ lna.setLocation(definition.getLocation());
+ }
+
// ensure its wrapped in a Service so we can manage it from eg. JMX
// (a Processor must be a Service to be enlisted in JMX)
if (!(answer instanceof Service)) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/LineNumberProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/LineNumberProcessorTest.java
new file mode 100644
index 0000000..8ce3d19
--- /dev/null
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/LineNumberProcessorTest.java
@@ -0,0 +1,71 @@
+package org.apache.camel.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.LineNumberAware;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class LineNumberProcessorTest extends ContextTestSupport {
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ context.setTracing(true); // enables line numbering
+ return context;
+ }
+
+ @Test
+ public void testLineNumber() throws Exception {
+ getMockEndpoint("mock:result").expectedBodiesReceived("org.apache.camel.processor.LineNumberProcessorTest$1:35");
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .process(new MyProcessor())
+ .to("mock:result");
+ }
+ };
+ }
+
+ private static class MyProcessor implements Processor, LineNumberAware {
+
+ private int lineNumber;
+ private String location;
+
+ @Override
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ @Override
+ public void setLineNumber(int lineNumber) {
+ this.lineNumber = lineNumber;
+ }
+
+ @Override
+ public String getLocation() {
+ return location;
+ }
+
+ @Override
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getMessage().setBody(location + ":" + lineNumber);
+ }
+ }
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
index 8fe5bac..765940d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
@@ -17,6 +17,7 @@
package org.apache.camel.support;
import org.apache.camel.CamelContext;
+import org.apache.camel.LineNumberAware;
import org.apache.camel.NamedNode;
import org.apache.camel.Processor;
import org.apache.camel.Route;
@@ -32,7 +33,13 @@ public class TypedProcessorFactory<T extends NamedNode> implements ProcessorFact
@Override
public Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception {
if (type.isInstance(definition)) {
- return doCreateChildProcessor(route, type.cast(definition), mandatory);
+ Processor processor = doCreateChildProcessor(route, type.cast(definition), mandatory);
+ if (processor instanceof LineNumberAware) {
+ LineNumberAware lna = (LineNumberAware) processor;
+ lna.setLineNumber(definition.getLineNumber());
+ lna.setLocation(definition.getLocation());
+ }
+ return processor;
}
return null;
@@ -41,7 +48,13 @@ public class TypedProcessorFactory<T extends NamedNode> implements ProcessorFact
@Override
public Processor createProcessor(Route route, NamedNode definition) throws Exception {
if (type.isInstance(definition)) {
- return doCreateProcessor(route, type.cast(definition));
+ Processor processor = doCreateProcessor(route, type.cast(definition));
+ if (processor instanceof LineNumberAware) {
+ LineNumberAware lna = (LineNumberAware) processor;
+ lna.setLineNumber(definition.getLineNumber());
+ lna.setLocation(definition.getLocation());
+ }
+ return processor;
}
return null;