diff --git a/build.gradle b/build.gradle index 8de3f484c4..0a1cc7d2c8 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ configure(allprojects) { project -> mavenBom "io.netty:netty-bom:4.1.39.Final" mavenBom "io.projectreactor:reactor-bom:Dysprosium-RELEASE" mavenBom "io.rsocket:rsocket-bom:1.0.0-RC5" - mavenBom "org.eclipse.jetty:jetty-bom:9.4.20.v20190813" + mavenBom "org.eclipse.jetty:jetty-bom:9.4.21.v20190926" mavenBom "org.jetbrains.kotlin:kotlin-bom:1.3.50" mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.3.2" mavenBom "org.junit:junit-bom:5.5.2" diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java index fab7634b9f..b3a10faf88 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java @@ -30,7 +30,6 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.websocket.api.WebSocketPolicy; import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; -import org.eclipse.jetty.websocket.api.extensions.ExtensionFactory; import org.eclipse.jetty.websocket.server.HandshakeRFC6455; import org.eclipse.jetty.websocket.server.WebSocketServerFactory; @@ -180,14 +179,17 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Serv return result; } - @SuppressWarnings({"unchecked"}) + @SuppressWarnings({"unchecked", "deprecation"}) private Set getExtensionNames() { try { - return this.factory.getExtensionFactory().getExtensionNames(); + return this.factory.getAvailableExtensionNames(); } catch (IncompatibleClassChangeError ex) { + // Fallback for versions prior to 9.4.21: // 9.4.20.v20190813: ExtensionFactory (abstract class -> interface) - Method method = ClassUtils.getMethod(ExtensionFactory.class, "getExtensionNames"); + // 9.4.21.v20190926: ExtensionFactory (interface -> abstract class) + deprecated + Class clazz = org.eclipse.jetty.websocket.api.extensions.ExtensionFactory.class; + Method method = ClassUtils.getMethod(clazz, "getExtensionNames"); return (Set) ReflectionUtils.invokeMethod(method, this.factory.getExtensionFactory()); } }