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);
     }