diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/javaagent/src/main/java/org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.java b/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/javaagent/src/main/java/org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.java index fae2f33b9d9c..fb04e273addb 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/javaagent/src/main/java/org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/javaagent/src/main/java/org/springframework/web/servlet/v3_1/OpenTelemetryHandlerMappingFilter.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.annotation.Nullable; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -36,6 +38,9 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered { + private static final Logger logger = + Logger.getLogger(OpenTelemetryHandlerMappingFilter.class.getName()); + private static final MethodHandle usesPathPatternsMh = getUsesPathPatternsMh(); private static final MethodHandle parseAndCacheMh = parseAndCacheMh(); @@ -43,7 +48,9 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered { (context, request) -> { if (this.parseRequestPath) { // sets new value for PATH_ATTRIBUTE of request - parseAndCache(request); + if (!parseAndCache(request)) { + return null; + } } if (findMapping(request)) { // Name the parent span based on the matching pattern @@ -191,14 +198,16 @@ private static MethodHandle parseAndCacheMh() { } } - private static void parseAndCache(HttpServletRequest request) { + private static boolean parseAndCache(HttpServletRequest request) { if (parseAndCacheMh == null) { - return; + return false; } try { parseAndCacheMh.invoke(request); + return true; } catch (Throwable throwable) { - throw new IllegalStateException(throwable); + logger.log(Level.FINE, "Failed calling parseAndCache", throwable); + return false; } } } diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/javaagent/src/main/java/org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.java b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/javaagent/src/main/java/org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.java index 32a8782be2da..a1d8dc64b6ca 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/javaagent/src/main/java/org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/javaagent/src/main/java/org/springframework/web/servlet/v6_0/OpenTelemetryHandlerMappingFilter.java @@ -26,6 +26,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.annotation.Nullable; import org.springframework.core.Ordered; import org.springframework.web.servlet.HandlerExecutionChain; @@ -34,12 +36,19 @@ import org.springframework.web.util.ServletRequestPathUtils; public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered { + private static final Logger logger = + Logger.getLogger(OpenTelemetryHandlerMappingFilter.class.getName()); private final HttpServerRouteGetter serverSpanName = (context, request) -> { if (this.parseRequestPath) { // sets new value for PATH_ATTRIBUTE of request - ServletRequestPathUtils.parseAndCache(request); + try { + ServletRequestPathUtils.parseAndCache(request); + } catch (RuntimeException exception) { + logger.log(Level.FINE, "Failed calling parseAndCache", exception); + return null; + } } if (findMapping(request)) { // Name the parent span based on the matching pattern