From eb032a50a0a3c5c4b0d6aa264c5d7685a94a57ca Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 20 Jul 2020 16:48:33 +0300 Subject: [PATCH 1/4] Upgrade to Reactor Dysprosium-SR10 Closes gh-25376 --- build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index c8b4c2dc48..a256d31500 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ configure(allprojects) { project -> imports { mavenBom "com.fasterxml.jackson:jackson-bom:2.10.4" mavenBom "io.netty:netty-bom:4.1.51.Final" - mavenBom "io.projectreactor:reactor-bom:Dysprosium-BUILD-SNAPSHOT" + mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR10" mavenBom "io.rsocket:rsocket-bom:1.0.1" mavenBom "org.eclipse.jetty:jetty-bom:9.4.30.v20200611" mavenBom "org.jetbrains.kotlin:kotlin-bom:1.3.72" @@ -279,7 +279,6 @@ configure(allprojects) { project -> repositories { mavenCentral() maven { url "https://repo.spring.io/libs-spring-framework-build" } - maven { url "https://repo.spring.io/snapshot" } // Reactor } } configurations.all { From 64f4703445c57adba37477394f2c3217d0af99cb Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 20 Jul 2020 16:47:32 +0200 Subject: [PATCH 2/4] Defer creating logger in StandardWebSocketHandlerAdapter to instantiation time Closes gh-25427 --- .../adapter/standard/StandardWebSocketHandlerAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java index c4c11a30d9..2cdea2d1a0 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2020 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. @@ -42,7 +42,7 @@ import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator */ public class StandardWebSocketHandlerAdapter extends Endpoint { - private static final Log logger = LogFactory.getLog(StandardWebSocketHandlerAdapter.class); + private final Log logger = LogFactory.getLog(StandardWebSocketHandlerAdapter.class); private final WebSocketHandler handler; From 6c7f18e902b7658d08d3d747a89153f9c88f382f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 20 Jul 2020 16:47:52 +0200 Subject: [PATCH 3/4] Upgrade to Jetty Reactive HttpClient 1.1.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a256d31500..6bd1fd31c6 100644 --- a/build.gradle +++ b/build.gradle @@ -152,7 +152,7 @@ configure(allprojects) { project -> dependency("org.apache.httpcomponents:httpasyncclient:4.1.4") { exclude group: "commons-logging", name: "commons-logging" } - dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.3" + dependency "org.eclipse.jetty:jetty-reactive-httpclient:1.1.4" dependency "org.jruby:jruby:9.2.11.1" dependency "org.python:jython-standalone:2.7.1" From 913eca9e141b9c58c2c175dc822ceab624a96f0b Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 20 Jul 2020 17:52:29 +0300 Subject: [PATCH 4/4] ReactorNettyRequestUpgradeStrategy uses unique builder per request See gh-25315 --- .../ReactorNettyRequestUpgradeStrategy.java | 4 +- ...actorNettyRequestUpgradeStrategyTests.java | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategyTests.java diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java index 827d649429..9a27dc8970 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java @@ -57,7 +57,7 @@ public class ReactorNettyRequestUpgradeStrategy implements RequestUpgradeStrateg * @since 5.2.6 */ public ReactorNettyRequestUpgradeStrategy() { - this(WebsocketServerSpec.builder()); + this(WebsocketServerSpec::builder); } @@ -83,7 +83,7 @@ public class ReactorNettyRequestUpgradeStrategy implements RequestUpgradeStrateg return buildSpec(null); } - private WebsocketServerSpec buildSpec(@Nullable String subProtocol) { + WebsocketServerSpec buildSpec(@Nullable String subProtocol) { WebsocketServerSpec.Builder builder = this.specBuilderSupplier.get(); if (subProtocol != null) { builder.protocols(subProtocol); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategyTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategyTests.java new file mode 100644 index 0000000000..409dc06b20 --- /dev/null +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategyTests.java @@ -0,0 +1,39 @@ +/* + * Copyright 2002-2020 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.upgrade; + +import org.junit.jupiter.api.Test; +import reactor.netty.http.server.WebsocketServerSpec; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +/** + * Unit tests for {@link ReactorNettyRequestUpgradeStrategy}. + * @author Rossen Stoyanchev + */ +public class ReactorNettyRequestUpgradeStrategyTests { + + @Test // gh-25315 + void defaultWebSocketSpecBuilderIsUniquePerRequest() { + ReactorNettyRequestUpgradeStrategy strategy = new ReactorNettyRequestUpgradeStrategy(); + WebsocketServerSpec spec1 = strategy.buildSpec("p1"); + WebsocketServerSpec spec2 = strategy.getWebsocketServerSpec(); + + assertThat(spec1.protocols()).isEqualTo("p1"); + assertThat(spec2.protocols()).isNull(); + } + +}