Uploaded image for project: 'XWiki Platform'
  1. XWiki Platform
  2. XWIKI-23350

Unable to find Decoder for type: jakarta.websocket.MessageHandler$Whole on DynamicEchoEndpoint

    XMLWordPrintable

Details

    • Unknown

    Description

      Reproductions steps

      1. connect to the dynamic echo websocket (see websockat example below)
      2. observe the exception in XWikiEndpoint dispatcher (here https://github.com/xwiki/xwiki-commons/blob/209da6a9c1f59673c08b51b7e89cdc98e468eb8f/xwiki-commons-core/xwiki-commons-websocket/src/main/java/org/xwiki/websocket/internal/XWikiEndpointDispatcher.java#L91)

      Expected

      No exception.

      Actual

      An exception with the stacktrace below is thrown

      java.lang.IllegalStateException: Unable to find Decoder for type: interface jakarta.websocket.MessageHandler$Whole
          at org.eclipse.jetty.ee10.websocket.jakarta.common.JakartaWebSocketFrameHandler.addMessageHandler(JakartaWebSocketFrameHandler.java:413)
          at org.eclipse.jetty.ee10.websocket.jakarta.common.JakartaWebSocketSession.addMessageHandler(JakartaWebSocketSession.java:130)
          at org.eclipse.jetty.ee10.websocket.jakarta.common.JakartaWebSocketSession.addMessageHandler(JakartaWebSocketSession.java:150)
          at org.xwiki.websocket.internal.DynamicEchoEndpoint.lambda$onOpen$1(DynamicEchoEndpoint.java:61)
          at org.xwiki.websocket.internal.DefaultWebSocketContext.run(DefaultWebSocketContext.java:96)
          at org.xwiki.websocket.internal.DynamicEchoEndpoint.onOpen(DynamicEchoEndpoint.java:56)
          at org.xwiki.websocket.internal.XWikiEndpointDispatcher.onOpen(XWikiEndpointDispatcher.java:83)
          at org.eclipse.jetty.ee10.websocket.jakarta.common.JakartaWebSocketFrameHandler.onOpen(JakartaWebSocketFrameHandler.java:175)
          at org.eclipse.jetty.websocket.core.WebSocketCoreSession.lambda$onOpen$6(WebSocketCoreSession.java:402)
          at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1524)
          at org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.run(ContextHandler.java:1511)
          at org.eclipse.jetty.websocket.core.server.internal.AbstractHandshaker$1.handle(AbstractHandshaker.java:179)
          at org.eclipse.jetty.websocket.core.WebSocketCoreSession.onOpen(WebSocketCoreSession.java:402)
          at org.eclipse.jetty.websocket.core.WebSocketConnection.onOpen(WebSocketConnection.java:532)
          at org.eclipse.jetty.io.AbstractEndPoint.upgrade(AbstractEndPoint.java:435)
          at org.eclipse.jetty.server.internal.HttpConnection$HttpStreamOverHTTP1.succeeded(HttpConnection.java:1550)
          at org.eclipse.jetty.server.HttpStream$Wrapper.succeeded(HttpStream.java:227)
          at org.eclipse.jetty.server.internal.CompletionStreamWrapper.succeeded(CompletionStreamWrapper.java:45)
          at org.eclipse.jetty.server.HttpStream$Wrapper.succeeded(HttpStream.java:227)
          at org.eclipse.jetty.session.AbstractSessionManager$SessionStreamWrapper.succeeded(AbstractSessionManager.java:1499)
          at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.completeStream(HttpChannelState.java:787)
          at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:713)
          at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)
          at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
          at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
          at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
          at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
          at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
          at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
          at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
          at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
          at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)
          at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)
          at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)
          at java.base/java.lang.Thread.run(Thread.java:840) 

      Websocat example

      Note:

      • https://github.com/vi/websocat
      • the cookie must be from a logged-in user, basic auth and cookies from a guest users are not working
        websocat -H='Cookie: cookie copied from the browser debugger network tab' ws://localhost:8080/xwiki/websocket/xwiki/echo

      Attachments

        Issue Links

          Activity

            People

              mleduc Manuel Leduc
              mleduc Manuel Leduc
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated: