From 397a5a89b51b22f9d7e45a124c3ad9daed9479e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B1=95=E5=9F=8E?= <704450642@qq.com> Date: Fri, 21 Oct 2022 16:35:33 +0800 Subject: [PATCH] fix spring-webflux cast to PathPattern throws ClassCastException (#6872) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit when ServerWebExchange.getAttributes().put(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE, "path string type"). opentelemetry javaagent will throw exception. [企业微信截图_76344afd-4541-482c-a90f-0606ad720351](https://user-images.githubusercontent.com/15957476/195615160-45559fb5-5e0c-4c25-8678-7d8aa603f346.png) --- .../spring/webflux/server/WebfluxSingletons.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/instrumentation/spring/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/server/WebfluxSingletons.java b/instrumentation/spring/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/server/WebfluxSingletons.java index 56b3250509..7a79e8b1e8 100644 --- a/instrumentation/spring/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/server/WebfluxSingletons.java +++ b/instrumentation/spring/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/server/WebfluxSingletons.java @@ -41,9 +41,14 @@ public final class WebfluxSingletons { public static HttpRouteGetter httpRouteGetter() { return (context, exchange) -> { - PathPattern bestPattern = - exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); - return bestPattern == null ? null : bestPattern.getPatternString(); + Object bestPatternObj = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + if (bestPatternObj == null) { + return null; + } + if (bestPatternObj instanceof PathPattern) { + return ((PathPattern) bestPatternObj).getPatternString(); + } + return bestPatternObj.toString(); }; }