Skip to content

Commit bc88b96

Browse files
committed
Use MH for setContentLengthLong since available from 3.1
1 parent 21ccbe9 commit bc88b96

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/RumHttpServletResponseWrapper.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import datadog.trace.api.rum.RumInjector;
44
import datadog.trace.bootstrap.instrumentation.buffer.InjectingPipeWriter;
5+
import datadog.trace.util.MethodHandles;
56
import java.io.IOException;
67
import java.io.PrintWriter;
8+
import java.lang.invoke.MethodHandle;
79
import java.nio.charset.Charset;
810
import javax.servlet.ServletOutputStream;
11+
import javax.servlet.ServletResponse;
912
import javax.servlet.http.HttpServletResponse;
1013
import javax.servlet.http.HttpServletResponseWrapper;
1114

@@ -16,6 +19,21 @@ public class RumHttpServletResponseWrapper extends HttpServletResponseWrapper {
1619
private InjectingPipeWriter wrappedPipeWriter;
1720
private boolean shouldInject = true;
1821

22+
private static final MethodHandle SET_CONTENT_LENGTH_LONG = getMh("setContentLengthLong");
23+
24+
private static MethodHandle getMh(final String name) {
25+
try {
26+
return new MethodHandles(ServletResponse.class.getClassLoader())
27+
.method(ServletResponse.class, name);
28+
} catch (Throwable ignored) {
29+
return null;
30+
}
31+
}
32+
33+
private static <E extends Throwable> void sneakyThrow(Throwable e) throws E {
34+
throw (E) e;
35+
}
36+
1937
public RumHttpServletResponseWrapper(HttpServletResponse response) {
2038
super(response);
2139
this.rumInjector = RumInjector.get();
@@ -72,8 +90,12 @@ public void setContentLength(int len) {
7290

7391
@Override
7492
public void setContentLengthLong(long len) {
75-
if (!shouldInject) {
76-
super.setContentLengthLong(len);
93+
if (!shouldInject && SET_CONTENT_LENGTH_LONG != null) {
94+
try {
95+
SET_CONTENT_LENGTH_LONG.invoke(getResponse(), len);
96+
} catch (Throwable t) {
97+
sneakyThrow(t);
98+
}
7799
}
78100
}
79101

0 commit comments

Comments
 (0)