Skip to content

Commit 291b98a

Browse files
committed
Fix cxf-2.1 tests after jetty update from 12.0 to 12.1
1 parent a5a85e9 commit 291b98a

6 files changed

Lines changed: 209 additions & 116 deletions

File tree

dd-java-agent/instrumentation/cxf-2.1/gradle.lockfile

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ io.sqreen:libsqreen:17.3.0=cxf3LatestDepTestRuntimeClasspath,latestDepTestRuntim
5959
jakarta.activation:jakarta.activation-api:1.2.2=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
6060
jakarta.activation:jakarta.activation-api:2.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
6161
jakarta.annotation:jakarta.annotation-api:1.3.5=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
62-
jakarta.annotation:jakarta.annotation-api:2.1.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
63-
jakarta.servlet:jakarta.servlet-api:6.0.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
62+
jakarta.annotation:jakarta.annotation-api:3.0.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
63+
jakarta.servlet:jakarta.servlet-api:6.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
6464
jakarta.ws.rs:jakarta.ws.rs-api:2.1.6=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
65-
jakarta.ws.rs:jakarta.ws.rs-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
65+
jakarta.ws.rs:jakarta.ws.rs-api:4.0.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
6666
jakarta.xml.bind:jakarta.xml.bind-api:2.3.3=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
6767
jakarta.xml.bind:jakarta.xml.bind-api:4.0.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
6868
javax.activation:javax.activation-api:1.2.0=cxf3LatestDepTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath
@@ -89,19 +89,19 @@ org.apache.cxf:cxf-api:2.1=compileClasspath
8989
org.apache.cxf:cxf-common-schemas:2.1=compileClasspath
9090
org.apache.cxf:cxf-common-utilities:2.1=compileClasspath
9191
org.apache.cxf:cxf-core:3.0.0=testCompileClasspath,testRuntimeClasspath
92-
org.apache.cxf:cxf-core:3.6.9=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
93-
org.apache.cxf:cxf-core:4.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
92+
org.apache.cxf:cxf-core:3.6.10=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
93+
org.apache.cxf:cxf-core:4.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
9494
org.apache.cxf:cxf-rt-frontend-jaxrs:3.0.0=testCompileClasspath,testRuntimeClasspath
95-
org.apache.cxf:cxf-rt-frontend-jaxrs:3.6.9=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
96-
org.apache.cxf:cxf-rt-frontend-jaxrs:4.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
97-
org.apache.cxf:cxf-rt-security:3.6.9=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
98-
org.apache.cxf:cxf-rt-security:4.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
95+
org.apache.cxf:cxf-rt-frontend-jaxrs:3.6.10=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
96+
org.apache.cxf:cxf-rt-frontend-jaxrs:4.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
97+
org.apache.cxf:cxf-rt-security:3.6.10=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
98+
org.apache.cxf:cxf-rt-security:4.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
9999
org.apache.cxf:cxf-rt-transports-http-jetty:3.0.0=testCompileClasspath,testRuntimeClasspath
100-
org.apache.cxf:cxf-rt-transports-http-jetty:3.6.9=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
101-
org.apache.cxf:cxf-rt-transports-http-jetty:4.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
100+
org.apache.cxf:cxf-rt-transports-http-jetty:3.6.10=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
101+
org.apache.cxf:cxf-rt-transports-http-jetty:4.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
102102
org.apache.cxf:cxf-rt-transports-http:3.0.0=testCompileClasspath,testRuntimeClasspath
103-
org.apache.cxf:cxf-rt-transports-http:3.6.9=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
104-
org.apache.cxf:cxf-rt-transports-http:4.1.4=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
103+
org.apache.cxf:cxf-rt-transports-http:3.6.10=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
104+
org.apache.cxf:cxf-rt-transports-http:4.2.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
105105
org.apache.geronimo.specs:geronimo-activation_1.1_spec:1.0.2=compileClasspath
106106
org.apache.geronimo.specs:geronimo-annotation_1.0_spec:1.1.1=compileClasspath
107107
org.apache.geronimo.specs:geronimo-servlet_3.0_spec:1.0=testCompileClasspath,testRuntimeClasspath
@@ -130,25 +130,25 @@ org.codehaus.woodstox:wstx-asl:3.2.4=compileClasspath
130130
org.codenarc:CodeNarc:3.7.0=codenarc
131131
org.dom4j:dom4j:2.2.0=spotbugs
132132
org.eclipse.angus:angus-activation:2.0.3=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
133-
org.eclipse.jetty.ee10:jetty-ee10-servlet:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
133+
org.eclipse.jetty.ee11:jetty-ee11-servlet:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
134134
org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016=testCompileClasspath,testRuntimeClasspath
135135
org.eclipse.jetty.toolchain:jetty-servlet-api:4.0.6=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
136136
org.eclipse.jetty:jetty-continuation:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
137137
org.eclipse.jetty:jetty-http:10.0.26=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
138-
org.eclipse.jetty:jetty-http:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
138+
org.eclipse.jetty:jetty-http:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
139139
org.eclipse.jetty:jetty-http:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
140140
org.eclipse.jetty:jetty-io:10.0.26=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
141-
org.eclipse.jetty:jetty-io:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
141+
org.eclipse.jetty:jetty-io:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
142142
org.eclipse.jetty:jetty-io:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
143143
org.eclipse.jetty:jetty-security:10.0.26=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
144-
org.eclipse.jetty:jetty-security:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
144+
org.eclipse.jetty:jetty-security:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
145145
org.eclipse.jetty:jetty-security:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
146146
org.eclipse.jetty:jetty-server:10.0.26=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
147-
org.eclipse.jetty:jetty-server:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
147+
org.eclipse.jetty:jetty-server:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
148148
org.eclipse.jetty:jetty-server:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
149-
org.eclipse.jetty:jetty-session:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
149+
org.eclipse.jetty:jetty-session:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
150150
org.eclipse.jetty:jetty-util:10.0.26=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
151-
org.eclipse.jetty:jetty-util:12.0.29=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
151+
org.eclipse.jetty:jetty-util:12.1.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
152152
org.eclipse.jetty:jetty-util:8.1.15.v20140411=testCompileClasspath,testRuntimeClasspath
153153
org.glassfish.jaxb:jaxb-core:4.0.6=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
154154
org.glassfish.jaxb:jaxb-runtime:2.3.5=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath
@@ -159,6 +159,7 @@ org.gmetrics:GMetrics:2.1.0=codenarc
159159
org.hamcrest:hamcrest-core:1.3=cxf3LatestDepTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath
160160
org.hamcrest:hamcrest:3.0=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
161161
org.jctools:jctools-core:3.3.0=buildTimeInstrumentationPlugin,cxf3LatestDepTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
162+
org.jspecify:jspecify:1.0.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath
162163
org.junit.jupiter:junit-jupiter-api:5.14.1=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
163164
org.junit.jupiter:junit-jupiter-engine:5.14.1=cxf3LatestDepTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath
164165
org.junit.jupiter:junit-jupiter-params:5.14.1=cxf3LatestDepTestCompileClasspath,cxf3LatestDepTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package datadog.trace.instrumentation.jetty12;
2+
3+
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4+
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
5+
import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments;
6+
7+
import datadog.trace.agent.tooling.Instrumenter;
8+
import net.bytebuddy.asm.Advice;
9+
import org.eclipse.jetty.server.Request;
10+
import org.eclipse.jetty.server.Response;
11+
import org.eclipse.jetty.server.internal.HttpChannelState.ChannelResponse;
12+
13+
final class JettyResponseInstrumentation
14+
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
15+
@Override
16+
public String instrumentedType() {
17+
return "org.eclipse.jetty.server.internal.HttpChannelState$ChannelResponse";
18+
}
19+
20+
@Override
21+
public void methodAdvice(MethodTransformer transformer) {
22+
transformer.applyAdvice(
23+
named("succeeded").and(takesNoArguments()),
24+
JettyResponseInstrumentation.class.getName() + "$ResponseSuccessAdvice");
25+
transformer.applyAdvice(
26+
named("failed").and(takesArguments(1)),
27+
JettyResponseInstrumentation.class.getName() + "$ResponseFailureAdvice");
28+
}
29+
30+
public static class ResponseSuccessAdvice {
31+
@Advice.OnMethodExit(suppress = Throwable.class)
32+
public static void stopSpan(@Advice.This final Response response) {
33+
if (response instanceof ChannelResponse) {
34+
Request req = ((ChannelResponse) response).getRequest();
35+
JettyServerAdvice.finishSpan(req, response, null);
36+
}
37+
}
38+
}
39+
40+
public static class ResponseFailureAdvice {
41+
@Advice.OnMethodExit(suppress = Throwable.class)
42+
public static void stopSpan(
43+
@Advice.This final Response response, @Advice.Argument(0) final Throwable failure) {
44+
if (response instanceof ChannelResponse) {
45+
Request req = ((ChannelResponse) response).getRequest();
46+
JettyServerAdvice.finishSpan(req, response, failure);
47+
}
48+
}
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,87 @@
11
package datadog.trace.instrumentation.jetty12;
22

33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4-
import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE;
4+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_CONTEXT_ATTRIBUTE;
5+
import static datadog.trace.instrumentation.jetty12.JettyDecorator.DECORATE;
56
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
67
import static net.bytebuddy.matcher.ElementMatchers.takesNoArguments;
78

8-
import com.google.auto.service.AutoService;
9-
import datadog.trace.agent.tooling.ExcludeFilterProvider;
9+
import datadog.context.Context;
10+
import datadog.context.ContextScope;
1011
import datadog.trace.agent.tooling.Instrumenter;
11-
import datadog.trace.agent.tooling.InstrumenterModule;
12-
import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter;
13-
import java.util.Arrays;
14-
import java.util.Collection;
15-
import java.util.Collections;
16-
import java.util.Map;
17-
18-
@AutoService(InstrumenterModule.class)
19-
public final class JettyServerInstrumentation extends InstrumenterModule.Tracing
20-
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice, ExcludeFilterProvider {
21-
22-
public JettyServerInstrumentation() {
23-
super("jetty");
24-
}
12+
import datadog.trace.api.CorrelationIdentifier;
13+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
14+
import net.bytebuddy.asm.Advice;
15+
import org.eclipse.jetty.server.Request;
16+
import org.eclipse.jetty.server.internal.HttpChannelState;
2517

18+
final class JettyServerInstrumentation
19+
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
2620
@Override
2721
public String instrumentedType() {
2822
return "org.eclipse.jetty.server.internal.HttpChannelState";
2923
}
3024

31-
@Override
32-
public String[] helperClassNames() {
33-
return new String[] {
34-
packageName + ".ExtractAdapter",
35-
packageName + ".ExtractAdapter$Request",
36-
packageName + ".ExtractAdapter$Response",
37-
packageName + ".JettyDecorator",
38-
packageName + ".RequestURIDataAdapter",
39-
packageName + ".JettyServerAdvice",
40-
packageName + ".JettyServerAdvice$HandleAdvice",
41-
packageName + ".JettyServerAdvice$ResetAdvice",
42-
packageName + ".JettyRunnableWrapper"
43-
};
44-
}
45-
4625
@Override
4726
public void methodAdvice(MethodTransformer transformer) {
4827
transformer.applyAdvice(
49-
named("onRequest").and(takesArguments(1)), packageName + ".JettyServerAdvice$HandleAdvice");
28+
named("onRequest").and(takesArguments(1)),
29+
JettyServerInstrumentation.class.getName() + "$HandleAdvice");
5030
transformer.applyAdvice(
51-
named("recycle").and(takesNoArguments()), packageName + ".JettyServerAdvice$ResetAdvice");
31+
named("recycle").and(takesNoArguments()),
32+
JettyServerInstrumentation.class.getName() + "$ResetAdvice");
5233
}
5334

54-
@Override
55-
public Map<ExcludeFilter.ExcludeType, ? extends Collection<String>> excludedClasses() {
56-
return Collections.singletonMap(
57-
RUNNABLE,
58-
Arrays.asList(
59-
"org.eclipse.jetty.util.thread.strategy.ProduceConsume",
60-
"org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume",
61-
"org.eclipse.jetty.io.ManagedSelector",
62-
"org.eclipse.jetty.util.thread.TimerScheduler",
63-
"org.eclipse.jetty.util.thread.TimerScheduler$SimpleTask",
64-
"org.eclipse.jetty.util.thread.SerializedInvoker$NamedRunnable"));
35+
public static class HandleAdvice {
36+
37+
@Advice.OnMethodExit(suppress = Throwable.class)
38+
public static void onExit(
39+
@Advice.This final HttpChannelState channel,
40+
@Advice.Return(readOnly = false) Runnable ret) {
41+
Request req = channel.getRequest();
42+
Object existingContext = req.getAttribute(DD_CONTEXT_ATTRIBUTE);
43+
if (existingContext instanceof Context) {
44+
try (final ContextScope scope = ((Context) existingContext).attach()) {
45+
ret = JettyRunnableWrapper.wrapIfNeeded(ret);
46+
return;
47+
}
48+
}
49+
50+
final Context parentContext = DECORATE.extract(req);
51+
final Context context = DECORATE.startSpan(req, parentContext);
52+
try (final ContextScope ignored = context.attach()) {
53+
final AgentSpan span = AgentSpan.fromContext(context);
54+
span.setMeasured(true);
55+
DECORATE.afterStart(span);
56+
DECORATE.onRequest(span, req, req, parentContext);
57+
58+
req.setAttribute(DD_CONTEXT_ATTRIBUTE, context);
59+
req.setAttribute(CorrelationIdentifier.getTraceIdKey(), CorrelationIdentifier.getTraceId());
60+
req.setAttribute(CorrelationIdentifier.getSpanIdKey(), CorrelationIdentifier.getSpanId());
61+
ret = JettyRunnableWrapper.wrapIfNeeded(ret);
62+
}
63+
}
64+
}
65+
66+
/**
67+
* Jetty ensures that connections are reset immediately after the response is sent. This provides
68+
* a reliable point to finish the server span at the last possible moment.
69+
*/
70+
public static class ResetAdvice {
71+
@Advice.OnMethodEnter(suppress = Throwable.class)
72+
public static void stopSpan(@Advice.This final HttpChannelState channel) {
73+
Request req = channel.getRequest();
74+
Object contextObj = req.getAttribute(DD_CONTEXT_ATTRIBUTE);
75+
if (contextObj instanceof Context) {
76+
final Context context = (Context) contextObj;
77+
final AgentSpan span = AgentSpan.fromContext(context);
78+
if (span != null) {
79+
DECORATE.onResponse(span, channel);
80+
DECORATE.beforeFinish(context);
81+
span.finish();
82+
}
83+
req.removeAttribute(DD_CONTEXT_ATTRIBUTE);
84+
}
85+
}
6586
}
6687
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package datadog.trace.instrumentation.jetty12;
2+
3+
import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE;
4+
import static java.util.Arrays.asList;
5+
6+
import com.google.auto.service.AutoService;
7+
import datadog.trace.agent.tooling.ExcludeFilterProvider;
8+
import datadog.trace.agent.tooling.Instrumenter;
9+
import datadog.trace.agent.tooling.InstrumenterModule;
10+
import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter;
11+
import java.util.Collection;
12+
import java.util.Collections;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
@AutoService(InstrumenterModule.class)
17+
public final class JettyServerModule extends InstrumenterModule.Tracing
18+
implements ExcludeFilterProvider {
19+
20+
public JettyServerModule() {
21+
super("jetty");
22+
}
23+
24+
@Override
25+
public List<Instrumenter> typeInstrumentations() {
26+
return asList(new JettyServerInstrumentation(), new JettyResponseInstrumentation());
27+
}
28+
29+
@Override
30+
public String[] helperClassNames() {
31+
return new String[] {
32+
packageName + ".ExtractAdapter",
33+
packageName + ".ExtractAdapter$Request",
34+
packageName + ".ExtractAdapter$Response",
35+
packageName + ".JettyDecorator",
36+
packageName + ".RequestURIDataAdapter",
37+
packageName + ".JettyServerAdvice",
38+
packageName + ".JettyRunnableWrapper"
39+
};
40+
}
41+
42+
@Override
43+
public Map<ExcludeFilter.ExcludeType, ? extends Collection<String>> excludedClasses() {
44+
return Collections.singletonMap(
45+
RUNNABLE,
46+
asList(
47+
"org.eclipse.jetty.util.thread.strategy.ProduceConsume",
48+
"org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume",
49+
"org.eclipse.jetty.io.ManagedSelector",
50+
"org.eclipse.jetty.util.thread.TimerScheduler",
51+
"org.eclipse.jetty.util.thread.TimerScheduler$SimpleTask",
52+
"org.eclipse.jetty.util.thread.SerializedInvoker$NamedRunnable"));
53+
}
54+
}

dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/main/java17/datadog/trace/instrumentation/jetty12/JettyDecorator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ protected String getRequestHeader(final Request request, String key) {
9191
public AgentSpan onResponse(AgentSpan span, HttpChannelState channel) {
9292
Request request = channel.getRequest();
9393
Response response = channel.getResponse();
94+
return onResponse(span, request, response);
95+
}
96+
97+
public AgentSpan onResponse(AgentSpan span, Request request, Response response) {
9498
if (Config.get().isServletPrincipalEnabled()) {
9599
final Request.AuthenticationState authenticationState =
96100
Request.getAuthenticationState(request);

0 commit comments

Comments
 (0)