Fix opentelemetry injection/extraction (#4077)
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
index 2ef3699..b57c061 100644
--- a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/OpenTelemetryTracer.java
@@ -20,6 +20,7 @@
import io.grpc.Context;
import io.opentelemetry.OpenTelemetry;
+import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.DefaultTracer;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanContext;
@@ -29,6 +30,7 @@
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.opentelemetry.propagators.OpenTelemetryGetter;
import org.apache.camel.opentelemetry.propagators.OpenTelemetrySetter;
+import org.apache.camel.tracing.ExtractAdapter;
import org.apache.camel.tracing.InjectAdapter;
import org.apache.camel.tracing.SpanAdapter;
import org.apache.camel.tracing.SpanDecorator;
@@ -91,7 +93,8 @@
OpenTelemetrySpanAdapter spanFromExchange = (OpenTelemetrySpanAdapter) parent;
builder = builder.setParent(spanFromExchange.getOpenTelemetrySpan());
} else {
- Context ctx = OpenTelemetry.getPropagators().getHttpTextFormat().extract(Context.current(), sd.getExtractAdapter(exchange.getIn().getHeaders(), encoding), new OpenTelemetryGetter());
+ ExtractAdapter adapter = sd.getExtractAdapter(exchange.getIn().getHeaders(), encoding);
+ Context ctx = OpenTelemetry.getPropagators().getHttpTextFormat().extract(Context.current(), adapter, new OpenTelemetryGetter(adapter));
Span span = TracingContextUtils.getSpan(ctx);
SpanContext parentFromHeaders = span.getContext();
@@ -113,7 +116,10 @@
@Override
protected void inject(SpanAdapter span, InjectAdapter adapter) {
- OpenTelemetry.getPropagators().getHttpTextFormat().inject(Context.current(), adapter, new OpenTelemetrySetter());
+ OpenTelemetrySpanAdapter spanFromExchange = (OpenTelemetrySpanAdapter) span;
+ try (Scope scope = tracer.withSpan(spanFromExchange.getOpenTelemetrySpan())) {
+ OpenTelemetry.getPropagators().getHttpTextFormat().inject(Context.current(), adapter, new OpenTelemetrySetter());
+ }
}
}
diff --git a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java
index 3cf8abe..8ad8d22 100644
--- a/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java
+++ b/components/camel-opentelemetry/src/main/java/org/apache/camel/opentelemetry/propagators/OpenTelemetryGetter.java
@@ -21,6 +21,12 @@
public class OpenTelemetryGetter implements HttpTextFormat.Getter<ExtractAdapter> {
+ ExtractAdapter adapter;
+
+ public OpenTelemetryGetter(ExtractAdapter adapter) {
+ this.adapter = adapter;
+ }
+
@Override public String get(ExtractAdapter adapter, String key) {
return (String) adapter.get(key);
}