ERROR com.vaadin.flow.server.communication.PushAtmosphereHandler

Hello,

Vaadin flow 24.8.7
Tomcat 10

I’m running the base-starter-gradle-24 project with @Push annotation in AppShell class.

Exception below when open the page with a simple JavaFX app like:

[Atmosphere-Shared-22] ERROR com.vaadin.flow.server.communication.PushAtmosphereHandler - Exception in push connection
java.lang.IllegalArgumentException: newPosition > limit: (4 > 2)
at java.base/java.nio.Buffer.createPositionException(Buffer.java:352)
at java.base/java.nio.Buffer.position(Buffer.java:327)
at java.base/java.nio.ByteBuffer.position(ByteBuffer.java:1551)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:237)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:158)
at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:574)
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:130)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1635)
at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051)
at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440)
at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366)
at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337)
at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:516)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.startMessage(WsRemoteEndpointImplBase.java:407)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$TextMessageSendHandler.write(WsRemoteEndpointImplBase.java:840)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendStringByCompletion(WsRemoteEndpointImplBase.java:213)
at org.apache.tomcat.websocket.WsRemoteEndpointAsync.sendText(WsRemoteEndpointAsync.java:46)
at org.atmosphere.container.version.JSR356WebSocket.write(JSR356WebSocket.java:73)
at org.atmosphere.websocket.WebSocket.write(WebSocket.java:261)
at org.atmosphere.websocket.WebSocket.write(WebSocket.java:227)
at org.atmosphere.websocket.WebSocket.write(WebSocket.java:48)
at org.atmosphere.cpr.AtmosphereResponseImpl$Stream.write(AtmosphereResponseImpl.java:955)
at org.atmosphere.handler.AbstractReflectorAtmosphereHandler.onStateChange(AbstractReflectorAtmosphereHandler.java:154)
at com.vaadin.flow.server.communication.PushAtmosphereHandler.onStateChange(PushAtmosphereHandler.java:54)
at org.atmosphere.cpr.DefaultBroadcaster.invokeOnStateChange(DefaultBroadcaster.java:1036)
at org.atmosphere.cpr.DefaultBroadcaster.prepareInvokeOnStateChange(DefaultBroadcaster.java:1056)
at org.atmosphere.cpr.DefaultBroadcaster.executeAsyncWrite(DefaultBroadcaster.java:870)
at org.atmosphere.cpr.DefaultBroadcaster$2.run(DefaultBroadcaster.java:477)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)

Guess: JavaFX WebView doesn’t support WebSockets? Try with @Push(transport = Transport.LONG_POLLING) instead.

Hi,

JavaFX WebView is based on Webkit and supports WebSockets.

Br,
Hugo

Still, if you test with long polling, you could at least find out if the problem is with WebSocket support or something else. JavaFX WebView isn’t an officially supported browser: Vaadin compatibility guide

Hi,
@Push(transport = Transport.LONG_POLLING) in AppShell
Gave this Exception in Chrome in our WebApp

java.lang.IllegalStateException: A filter or servlet of the current chain does not support asynchronous operations. at org.apache.catalina.connector.Request.startAsync(Request.java:1509) at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:720) at jakarta.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:358) at org.atmosphere.cpr.AtmosphereRequestImpl.startAsync(AtmosphereRequestImpl.java:651) at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:91) at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:69) at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2284) at com.vaadin.flow.server.communication.PushRequestHandler.handleRequest(PushRequestHandler.java:290) at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1853) at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:398) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) at servlet.ConfigFilter.doFilter(ConfigFilter.java:38) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:731) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:663) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Thread.java:1583)

This means that asyncSupported = true is missing in web.xml or @WebServlet annotation. Apparently you are not using Spring Boot as it sets this with embedded Tomcat by default.