Skip to content

Commit 39668b5

Browse files
authoredSep 12, 2024··
Make OpenTelemetryHandlerMappingFilter handle exceptions from Servlet… (#12221)
1 parent cab8ce6 commit 39668b5

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed
 

‎instrumentation/spring/spring-webmvc/spring-webmvc-3.1/javaagent/src/main/java/org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import java.util.Objects;
23+
import java.util.logging.Level;
24+
import java.util.logging.Logger;
2325
import javax.annotation.Nullable;
2426
import javax.servlet.Filter;
2527
import javax.servlet.FilterChain;
@@ -36,14 +38,19 @@
3638
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
3739

3840
public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
41+
private static final Logger logger =
42+
Logger.getLogger(OpenTelemetryHandlerMappingFilter.class.getName());
43+
3944
private static final MethodHandle usesPathPatternsMh = getUsesPathPatternsMh();
4045
private static final MethodHandle parseAndCacheMh = parseAndCacheMh();
4146

4247
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
4348
(context, request) -> {
4449
if (this.parseRequestPath) {
4550
// sets new value for PATH_ATTRIBUTE of request
46-
parseAndCache(request);
51+
if (!parseAndCache(request)) {
52+
return null;
53+
}
4754
}
4855
if (findMapping(request)) {
4956
// Name the parent span based on the matching pattern
@@ -191,14 +198,16 @@ private static MethodHandle parseAndCacheMh() {
191198
}
192199
}
193200

194-
private static void parseAndCache(HttpServletRequest request) {
201+
private static boolean parseAndCache(HttpServletRequest request) {
195202
if (parseAndCacheMh == null) {
196-
return;
203+
return false;
197204
}
198205
try {
199206
parseAndCacheMh.invoke(request);
207+
return true;
200208
} catch (Throwable throwable) {
201-
throw new IllegalStateException(throwable);
209+
logger.log(Level.FINE, "Failed calling parseAndCache", throwable);
210+
return false;
202211
}
203212
}
204213
}

‎instrumentation/spring/spring-webmvc/spring-webmvc-6.0/javaagent/src/main/java/org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.util.List;
2727
import java.util.Map;
2828
import java.util.Objects;
29+
import java.util.logging.Level;
30+
import java.util.logging.Logger;
2931
import javax.annotation.Nullable;
3032
import org.springframework.core.Ordered;
3133
import org.springframework.web.servlet.HandlerExecutionChain;
@@ -34,12 +36,19 @@
3436
import org.springframework.web.util.ServletRequestPathUtils;
3537

3638
public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
39+
private static final Logger logger =
40+
Logger.getLogger(OpenTelemetryHandlerMappingFilter.class.getName());
3741

3842
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
3943
(context, request) -> {
4044
if (this.parseRequestPath) {
4145
// sets new value for PATH_ATTRIBUTE of request
42-
ServletRequestPathUtils.parseAndCache(request);
46+
try {
47+
ServletRequestPathUtils.parseAndCache(request);
48+
} catch (RuntimeException exception) {
49+
logger.log(Level.FINE, "Failed calling parseAndCache", exception);
50+
return null;
51+
}
4352
}
4453
if (findMapping(request)) {
4554
// Name the parent span based on the matching pattern

0 commit comments

Comments
 (0)
Please sign in to comment.