From b6037d0d07efee37ddc7200f80f31b862cbed04c Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 9 Sep 2021 15:37:58 +0100 Subject: [PATCH] Correctly format class name in default package Closes gh-27247 --- .../invocation/AbstractMethodMessageHandler.java | 12 ++++++++---- .../reactive/AbstractMethodMessageHandler.java | 12 ++++++++---- .../result/method/AbstractHandlerMethodMapping.java | 10 +++++++--- .../handler/AbstractHandlerMethodMapping.java | 10 +++++++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java index fc50155039c..f160d506eed 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/AbstractMethodMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,6 +53,7 @@ import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback; @@ -319,9 +320,12 @@ public abstract class AbstractMethodMessageHandler } private String formatMappings(Class userType, Map methods) { - String formattedType = Arrays.stream(ClassUtils.getPackageName(userType).split("\\.")) - .map(p -> p.substring(0, 1)) - .collect(Collectors.joining(".", "", "." + userType.getSimpleName())); + String packageName = ClassUtils.getPackageName(userType); + String formattedType = (StringUtils.hasText(packageName) ? + Arrays.stream(packageName.split("\\.")) + .map(packageSegment -> packageSegment.substring(0, 1)) + .collect(Collectors.joining(".", "", "." + userType.getSimpleName())) : + userType.getSimpleName()); Function methodFormatter = method -> Arrays.stream(method.getParameterTypes()) .map(Class::getSimpleName) .collect(Collectors.joining(",", "(", ")")); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractMethodMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractMethodMessageHandler.java index 1d85930585c..a240f4d8efa 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractMethodMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/AbstractMethodMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,6 +54,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; import org.springframework.util.RouteMatcher; +import org.springframework.util.StringUtils; /** * Abstract base class for reactive HandlerMethod-based message handling. @@ -341,9 +342,12 @@ public abstract class AbstractMethodMessageHandler } private String formatMappings(Class userType, Map methods) { - String formattedType = Arrays.stream(ClassUtils.getPackageName(userType).split("\\.")) - .map(p -> p.substring(0, 1)) - .collect(Collectors.joining(".", "", "." + userType.getSimpleName())); + String packageName = ClassUtils.getPackageName(userType); + String formattedType = (StringUtils.hasText(packageName) ? + Arrays.stream(packageName.split("\\.")) + .map(packageSegment -> packageSegment.substring(0, 1)) + .collect(Collectors.joining(".", "", "." + userType.getSimpleName())) : + userType.getSimpleName()); Function methodFormatter = method -> Arrays.stream(method.getParameterTypes()) .map(Class::getSimpleName) .collect(Collectors.joining(",", "(", ")")); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java index 93ff062651e..c2e01aaeff7 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/AbstractHandlerMethodMapping.java @@ -42,6 +42,7 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsUtils; import org.springframework.web.method.HandlerMethod; @@ -222,9 +223,12 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap } private String formatMappings(Class userType, Map methods) { - String formattedType = Arrays.stream(ClassUtils.getPackageName(userType).split("\\.")) - .map(p -> p.substring(0, 1)) - .collect(Collectors.joining(".", "", "." + userType.getSimpleName())); + String packageName = ClassUtils.getPackageName(userType); + String formattedType = (StringUtils.hasText(packageName) ? + Arrays.stream(packageName.split("\\.")) + .map(packageSegment -> packageSegment.substring(0, 1)) + .collect(Collectors.joining(".", "", "." + userType.getSimpleName())) : + userType.getSimpleName()); Function methodFormatter = method -> Arrays.stream(method.getParameterTypes()) .map(Class::getSimpleName) .collect(Collectors.joining(",", "(", ")")); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java index 367ca74997d..46f1707d1cf 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java @@ -44,6 +44,7 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsUtils; import org.springframework.web.method.HandlerMethod; @@ -301,9 +302,12 @@ public abstract class AbstractHandlerMethodMapping extends AbstractHandlerMap } private String formatMappings(Class userType, Map methods) { - String formattedType = Arrays.stream(ClassUtils.getPackageName(userType).split("\\.")) - .map(p -> p.substring(0, 1)) - .collect(Collectors.joining(".", "", "." + userType.getSimpleName())); + String packageName = ClassUtils.getPackageName(userType); + String formattedType = (StringUtils.hasText(packageName) ? + Arrays.stream(packageName.split("\\.")) + .map(packageSegment -> packageSegment.substring(0, 1)) + .collect(Collectors.joining(".", "", "." + userType.getSimpleName())) : + userType.getSimpleName()); Function methodFormatter = method -> Arrays.stream(method.getParameterTypes()) .map(Class::getSimpleName) .collect(Collectors.joining(",", "(", ")"));