From 2687de0fe8a963c401dec783ce3a2dcb037a6820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 13 Sep 2022 15:35:39 +0200 Subject: [PATCH] Add HandshakeWebSocketService runtime hints Closes gh-29146 --- .../support/HandshakeWebSocketService.java | 2 +- ...HandshakeWebSocketServiceRuntimeHints.java | 37 +++++++++++++++++++ .../support/WebSocketHandlerAdapter.java | 2 + 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java index 33f0ae880de..567e5448eb1 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketService.java @@ -114,7 +114,7 @@ public class HandshakeWebSocketService implements WebSocketService, Lifecycle { this.upgradeStrategy = upgradeStrategy; } - private static RequestUpgradeStrategy initUpgradeStrategy() { + static RequestUpgradeStrategy initUpgradeStrategy() { String className; if (tomcatPresent) { className = "TomcatRequestUpgradeStrategy"; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java new file mode 100644 index 00000000000..f10e55ce5e4 --- /dev/null +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java @@ -0,0 +1,37 @@ +/* + * Copyright 2002-2022 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.web.reactive.socket.server.support; + +import org.springframework.aot.hint.MemberCategory; +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.RuntimeHintsRegistrar; + +/** + * {@link RuntimeHintsRegistrar} implementation that registers reflection hints related to + * {@link HandshakeWebSocketService}. + * + * @author Sebastien Deleuze + * @since 6.0 + */ +class HandshakeWebSocketServiceRuntimeHints implements RuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + hints.reflection().registerType(HandshakeWebSocketService.initUpgradeStrategy().getClass(), + MemberCategory.INVOKE_DECLARED_CONSTRUCTORS); + } +} diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java index a988a2e2364..eadb886e170 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java @@ -18,6 +18,7 @@ package org.springframework.web.reactive.socket.server.support; import reactor.core.publisher.Mono; +import org.springframework.context.annotation.ImportRuntimeHints; import org.springframework.core.Ordered; import org.springframework.util.Assert; import org.springframework.web.reactive.HandlerAdapter; @@ -45,6 +46,7 @@ import org.springframework.web.server.ServerWebExchange; * @author Rossen Stoyanchev * @since 5.0 */ +@ImportRuntimeHints(HandshakeWebSocketServiceRuntimeHints.class) public class WebSocketHandlerAdapter implements HandlerAdapter, Ordered { private final WebSocketService webSocketService;