Affects: spring-websocket: 5.3.14, Jetty 10.0.7
When using the Jetty10RequestUpgradeStrategy for websocket support in Jetty 10.0.7 i get the following exception on the upgrade call:
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
at org.springframework.web.socket.server.jetty.Jetty10RequestUpgradeStrategy$WebSocketCreatorInterceptor.invoke(Jetty10RequestUpgradeStrategy.java:161)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
at com.sun.proxy.$Proxy161.createWebSocket(Unknown Source)
at org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer.lambda$upgrade$2(JettyWebSocketServerContainer.java:173)
at org.eclipse.jetty.websocket.core.server.internal.CreatorNegotiator.lambda$negotiate$0(CreatorNegotiator.java:64)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1445)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1482)
at org.eclipse.jetty.websocket.core.server.internal.CreatorNegotiator.negotiate(CreatorNegotiator.java:63)
at org.eclipse.jetty.websocket.core.server.internal.AbstractHandshaker.upgradeRequest(AbstractHandshaker.java:76)
at org.eclipse.jetty.websocket.core.server.internal.HandshakerSelector.upgradeRequest(HandshakerSelector.java:39)
at org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer.upgrade(JettyWebSocketServerContainer.java:177)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
at org.springframework.web.socket.server.jetty.Jetty10RequestUpgradeStrategy.upgrade(Jetty10RequestUpgradeStrategy.java:118)
... 96 common frames omitted
The reason seems to be the WebSocketCreatorInterceptor and in here the
@Nullable
@Override
public Object invoke(@NonNull MethodInvocation invocation) {
if (this.protocol != null) {
ReflectionUtils.invokeMethod(
setAcceptedSubProtocol, invocation.getArguments()[2], this.protocol);
}
return this.adapter;
}
The proxy is created from the jetty based interface
JettyWebSocketCreator
which has only two arguments.
Comment From: rstoyanchev
Thanks for the report. This was previously reported in #27899 and fixed in 5.3.15, which was already released so you should be able to just upgrade for the fix.