1010import io .sentry .PropagationContext ;
1111import io .sentry .SentryOptions ;
1212import io .sentry .SentryTraceHeader ;
13+ import io .sentry .SpanContext ;
1314import io .sentry .TracesSamplingDecision ;
15+ import io .sentry .W3CTraceparentHeader ;
1416import java .util .List ;
1517import org .jetbrains .annotations .ApiStatus ;
1618import org .jetbrains .annotations .NotNull ;
@@ -59,8 +61,18 @@ public static void setTrace(
5961 final @ NotNull SentryOptions sentryOptions = scopes .getOptions ();
6062
6163 if (span != null && !span .isNoOp ()) {
62- return new TracingHeaders (
63- span .toSentryTrace (), span .toBaggageHeader (thirdPartyBaggageHeaders ));
64+ final @ NotNull SentryTraceHeader sentryTraceHeader = span .toSentryTrace ();
65+ final @ Nullable BaggageHeader baggageHeader = span .toBaggageHeader (thirdPartyBaggageHeaders );
66+ @ Nullable W3CTraceparentHeader w3cTraceparentHeader = null ;
67+
68+ if (sentryOptions .isPropagateTraceparent ()) {
69+ final @ NotNull SpanContext spanContext = span .getSpanContext ();
70+ w3cTraceparentHeader =
71+ new W3CTraceparentHeader (
72+ spanContext .getTraceId (), spanContext .getSpanId (), sentryTraceHeader .isSampled ());
73+ }
74+
75+ return new TracingHeaders (sentryTraceHeader , baggageHeader , w3cTraceparentHeader );
6476 } else {
6577 final @ NotNull PropagationContextHolder returnValue = new PropagationContextHolder ();
6678 scopes .configureScope (
@@ -74,12 +86,22 @@ public static void setTrace(
7486 final @ NotNull BaggageHeader baggageHeader =
7587 BaggageHeader .fromBaggageAndOutgoingHeader (baggage , thirdPartyBaggageHeaders );
7688
77- return new TracingHeaders (
89+ final @ NotNull SentryTraceHeader sentryTraceHeader =
7890 new SentryTraceHeader (
7991 propagationContext .getTraceId (),
8092 propagationContext .getSpanId (),
81- propagationContext .isSampled ()),
82- baggageHeader );
93+ propagationContext .isSampled ());
94+
95+ @ Nullable W3CTraceparentHeader w3cTraceparentHeader = null ;
96+ if (sentryOptions .isPropagateTraceparent ()) {
97+ w3cTraceparentHeader =
98+ new W3CTraceparentHeader (
99+ propagationContext .getTraceId (),
100+ propagationContext .getSpanId (),
101+ propagationContext .isSampled ());
102+ }
103+
104+ return new TracingHeaders (sentryTraceHeader , baggageHeader , w3cTraceparentHeader );
83105 }
84106
85107 return null ;
@@ -110,12 +132,23 @@ private static final class PropagationContextHolder {
110132 public static final class TracingHeaders {
111133 private final @ NotNull SentryTraceHeader sentryTraceHeader ;
112134 private final @ Nullable BaggageHeader baggageHeader ;
135+ private final @ Nullable W3CTraceparentHeader w3cTraceparentHeader ;
113136
114137 public TracingHeaders (
115138 final @ NotNull SentryTraceHeader sentryTraceHeader ,
116139 final @ Nullable BaggageHeader baggageHeader ) {
117140 this .sentryTraceHeader = sentryTraceHeader ;
118141 this .baggageHeader = baggageHeader ;
142+ this .w3cTraceparentHeader = null ;
143+ }
144+
145+ public TracingHeaders (
146+ final @ NotNull SentryTraceHeader sentryTraceHeader ,
147+ final @ Nullable BaggageHeader baggageHeader ,
148+ final @ Nullable W3CTraceparentHeader w3cTraceparentHeader ) {
149+ this .sentryTraceHeader = sentryTraceHeader ;
150+ this .baggageHeader = baggageHeader ;
151+ this .w3cTraceparentHeader = w3cTraceparentHeader ;
119152 }
120153
121154 public @ NotNull SentryTraceHeader getSentryTraceHeader () {
@@ -125,6 +158,10 @@ public TracingHeaders(
125158 public @ Nullable BaggageHeader getBaggageHeader () {
126159 return baggageHeader ;
127160 }
161+
162+ public @ Nullable W3CTraceparentHeader getW3cTraceparentHeader () {
163+ return w3cTraceparentHeader ;
164+ }
128165 }
129166
130167 /** Checks if a transaction is to be ignored. */
0 commit comments