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

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1cd28d70eabe0191ae9626f98e8d4d7513e0649b
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu May 7 10:32:59 2026 +0200

    chore(components):  opentelemetry2 core processors
    
    Ref CAMEL-23432
---
 .../OpenTelemetryTracerConfigurer.java             |   6 ++
 .../src/main/docs/opentelemetry2.adoc              |   4 +-
 .../apache/camel/opentelemetry2/AsyncCXFTest.java  |   1 +
 .../camel/opentelemetry2/AsyncDirectTest.java      |   1 +
 .../org/apache/camel/opentelemetry2/AsyncTest.java |   1 +
 .../camel/opentelemetry2/AsyncWiretapTest.java     |   1 +
 .../camel/opentelemetry2/MDCHeadersTraceTest.java  |   1 +
 .../opentelemetry2/OpenTelemetryTracerTest.java    |   1 +
 ...nTelemetryTracerTest.java => SpanBeanTest.java} | 101 ++++++++++++---------
 .../apache/camel/opentelemetry2/SpanKindTest.java  |   1 +
 .../SpanPropagationDownstreamTest.java             |   1 +
 .../SpanPropagationUpstreamTest.java               |   1 +
 12 files changed, 76 insertions(+), 44 deletions(-)

diff --git 
a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
 
b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
index cc561a6e9841..61762fd7d712 100644
--- 
a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
+++ 
b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
@@ -25,6 +25,8 @@ public class OpenTelemetryTracerConfigurer extends 
org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": target.setCamelContext(property(camelContext, 
org.apache.camel.CamelContext.class, value)); return true;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": 
target.setDisableCoreProcessors(property(camelContext, boolean.class, value)); 
return true;
         case "excludepatterns":
         case "excludePatterns": 
target.setExcludePatterns(property(camelContext, java.lang.String.class, 
value)); return true;
         case "spanlifecyclemanager":
@@ -42,6 +44,8 @@ public class OpenTelemetryTracerConfigurer extends 
org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return org.apache.camel.CamelContext.class;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return boolean.class;
         case "excludepatterns":
         case "excludePatterns": return java.lang.String.class;
         case "spanlifecyclemanager":
@@ -60,6 +64,8 @@ public class OpenTelemetryTracerConfigurer extends 
org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return target.getCamelContext();
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return target.isDisableCoreProcessors();
         case "excludepatterns":
         case "excludePatterns": return target.getExcludePatterns();
         case "spanlifecyclemanager":
diff --git a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc 
b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
index 5c06dd31bb50..e443cebd3e83 100644
--- a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
+++ b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
@@ -24,8 +24,10 @@ The configuration properties for the OpenTelemetry2 tracer 
are:
 [width="100%",cols="10%,10%,80%",options="header",]
 |=======================================================================
 | Option | Default | Description
+|`enabled`| false | Turn the tracing on/off.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` 
configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core 
DSL processor provided in the route, for example `bean`, `log`, ...).
 | `excludePatterns` | | A comma-separated list of patterns (e.g., 
`log*,direct*,setBody*`) to exclude from tracing. Spans matching these patterns 
will be disabled.
-| `traceProcessors` | `false` | If set to `true`, Camel creates OpenTelemetry 
Spans for each processor in your routes. You can use `excludePatterns` to 
filter which processors are traced.
 | `traceHeadersInclusion`| `false` | If set to `true`, adds the generated 
telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
 |=======================================================================
 
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
index 278fddd9076f..59a5e5168d03 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
@@ -50,6 +50,7 @@ public class AsyncCXFTest extends 
OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
index 4b010c617e1e..4d29fbb89ad1 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
@@ -42,6 +42,7 @@ public class AsyncDirectTest extends 
OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
index 546ef24c226e..e73af302fe8f 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
@@ -46,6 +46,7 @@ public class AsyncTest extends OpenTelemetryTracerTestSupport 
{
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
index 6b1ced29627e..81075b3b82d4 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
@@ -47,6 +47,7 @@ public class AsyncWiretapTest extends 
OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
index 0eab0a484a07..5d6cc8a46045 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
@@ -40,6 +40,7 @@ public class MDCHeadersTraceTest extends 
OpenTelemetryTracerTestSupport {
         tst.setTraceHeadersInclusion(true);
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
         return context;
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
index 3b4118656f63..471151678ca4 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
@@ -43,6 +43,7 @@ public class OpenTelemetryTracerTest extends 
OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
similarity index 52%
copy from 
components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
copy to 
components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
index 3b4118656f63..a785de244f28 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
@@ -21,10 +21,13 @@ import java.util.List;
 import java.util.Map;
 
 import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
 import io.opentelemetry.sdk.trace.data.SpanData;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.opentelemetry2.CamelOpenTelemetryExtension.OtelTrace;
@@ -33,15 +36,16 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
+public class SpanBeanTest extends OpenTelemetryTracerTestSupport {
+
+    Tracer tracer = 
otelExtension.getOpenTelemetry().getTracer("spanInjection");
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
-        tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
+        tst.setTracer(tracer);
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
@@ -51,68 +55,59 @@ public class OpenTelemetryTracerTest extends 
OpenTelemetryTracerTestSupport {
 
     @Test
     void testRouteSingleRequest() throws IOException {
-        Exchange result = template.request("direct:start", null);
-        // Make sure the trace is propagated downstream
-        assertNotNull(result.getIn().getHeader("traceparent"));
+        template.sendBody("direct:start", "my-body");
         Map<String, OtelTrace> traces = otelExtension.getTraces();
         assertEquals(1, traces.size());
-        checkTrace(traces.values().iterator().next(), null);
-    }
-
-    @Test
-    void testRouteMultipleRequests() throws IOException {
-        for (int i = 1; i <= 10; i++) {
-            context.createProducerTemplate().sendBody("direct:start", 
"Hello!");
-        }
-        Map<String, OtelTrace> traces = otelExtension.getTraces();
-        // Each trace should have a unique trace id. It is enough to assert 
that
-        // the number of elements in the map is the same of the requests to 
prove
-        // all traces have been generated uniquely.
-        assertEquals(10, traces.size());
-        // Each trace should have the same structure
-        for (OtelTrace trace : traces.values()) {
-            checkTrace(trace, "Hello!");
-        }
-
+        checkTrace(traces.values().iterator().next());
     }
 
-    private void checkTrace(OtelTrace trace, String expectedBody) {
+    private void checkTrace(OtelTrace trace) {
         List<SpanData> spans = trace.getSpans();
-        assertEquals(3, spans.size());
+        assertEquals(7, spans.size());
         SpanData testProducer = spans.get(0);
         SpanData direct = spans.get(1);
-        SpanData log = spans.get(2);
+        SpanData innerLog = spans.get(2);
+        SpanData beanProcessor = spans.get(3);
+        SpanData beanMethod = spans.get(4);
+        SpanData log = spans.get(5);
+        SpanData innerToLog = spans.get(6);
 
         // Validate span completion
         assertTrue(testProducer.hasEnded());
         assertTrue(direct.hasEnded());
+        assertTrue(innerLog.hasEnded());
+        assertTrue(beanProcessor.hasEnded());
+        assertTrue(beanMethod.hasEnded());
         assertTrue(log.hasEnded());
+        assertTrue(innerToLog.hasEnded());
 
         // Validate same trace
         assertEquals(testProducer.getSpanContext().getTraceId(), 
direct.getSpanContext().getTraceId());
-        assertEquals(direct.getSpanContext().getTraceId(), 
log.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), 
innerLog.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), 
beanProcessor.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), 
beanMethod.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), 
log.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), 
innerToLog.getSpanContext().getTraceId());
+
+        // Validate operations
+        assertEquals(Op.EVENT_RECEIVED.toString(), 
direct.getAttributes().get(AttributeKey.stringKey("op")));
+        assertEquals(Op.EVENT_PROCESS.toString(), 
beanProcessor.getAttributes().get(AttributeKey.stringKey("op")));
 
         // Validate hierarchy
         assertFalse(testProducer.getParentSpanContext().isValid());
+
         assertEquals(testProducer.getSpanContext().getSpanId(), 
direct.getParentSpanContext().getSpanId());
+        assertEquals(direct.getSpanContext().getSpanId(), 
innerLog.getParentSpanContext().getSpanId());
+        assertEquals(direct.getSpanContext().getSpanId(), 
beanProcessor.getParentSpanContext().getSpanId());
+        assertEquals(beanProcessor.getSpanContext().getSpanId(), 
beanMethod.getParentSpanContext().getSpanId());
         assertEquals(direct.getSpanContext().getSpanId(), 
log.getParentSpanContext().getSpanId());
-
-        // Validate operations
-        assertEquals(Op.EVENT_SENT.toString(), 
testProducer.getAttributes().get(AttributeKey.stringKey("op")));
-        assertEquals(Op.EVENT_RECEIVED.toString(), 
direct.getAttributes().get(AttributeKey.stringKey("op")));
+        assertEquals(log.getSpanContext().getSpanId(), 
innerToLog.getParentSpanContext().getSpanId());
 
         // Validate message logging
-        assertEquals("A message", 
direct.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        if (expectedBody == null) {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOut, BodyType: null, Body: 
[Body is null]]",
-                    
log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        } else {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOnly, BodyType: String, Body: 
" + expectedBody + "]",
-                    
log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        }
-
+        assertEquals("A message", 
innerLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
+        assertEquals(
+                "Exchange[ExchangePattern: InOnly, BodyType: String, Body: 
my-body]",
+                
innerToLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
     }
 
     @Override
@@ -120,12 +115,32 @@ public class OpenTelemetryTracerTest extends 
OpenTelemetryTracerTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
+                MyBean myBean = new MyBean();
+                this.getCamelContext().getRegistry().bind("myBean", myBean);
+
                 from("direct:start")
                         .routeId("start")
                         .log("A message")
+                        .bean(MyBean.class)
+                        .process(new Processor() {
+                            @Override
+                            public void process(Exchange exchange) throws 
Exception {
+                                // noop
+                            }
+                        })
                         .to("log:info");
             }
         };
     }
 
+    class MyBean {
+        // NOTE: the commented annotation below would work only when an agent 
or a runtime framework (quarkus or spring)
+        // is available. We simulate it creating the Span by hand instead.
+        //@WithSpan
+        public void helloWorld() {
+            Span mySpan = tracer.spanBuilder("helloworld").startSpan();
+            // Do the work here
+            mySpan.end();
+        }
+    }
 }
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
index 41e0d021d6d5..7746b7515bd3 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
@@ -45,6 +45,7 @@ public class SpanKindTest extends 
OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         
tst.setTracer(otelExtension.getOpenTelemetry().getTracer("spanKindTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
 
         // Register mock HTTP component for testing
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
index 0c28617a1ffc..1d99a67bf4d6 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
@@ -32,6 +32,7 @@ public class SpanPropagationDownstreamTest extends 
OpenTelemetryTracerTestSuppor
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
index 3938d39a3662..16d474d1da70 100644
--- 
a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
+++ 
b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
@@ -38,6 +38,7 @@ public class SpanPropagationUpstreamTest extends 
OpenTelemetryTracerTestSupport
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         
tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);

Reply via email to