Vaadin 8.3.3 works perfectly, Vaadin 8.4.0 fails with websocket errors at startup. The webapp works, but without push. Environment:
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number: 9.0.7.0
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name: Mac OS X
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version: 10.13.4
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture: x86_64
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home: /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version: 10.0.1+10
Apr 26, 2018 10:12:18 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor: "Oracle Corporation"
The problem affects each of the servlets at startup. Here is an example configuration at the top of a Servlet class:
@WebServlet(urlPatterns = {"/counter/*"}, asyncSupported = true)
@VaadinServletConfiguration(
productionMode = Constants.PRODUCTIONMODE,
ui = CounterUI.class,
widgetset = "ca.demy.widgetset.FossWidgetset",
heartbeatInterval = 60,
closeIdleSessions = true
)
And here’s the startup error under Vaadin 8.4.0. No such problem with 8.3.3.
Apr 26, 2018 9:54:40 AM org.atmosphere.cpr.AtmosphereFramework initWebSocket
INFO: Installed WebSocketProtocol org.atmosphere.websocket.protocol.SimpleHttpProtocol
Apr 26, 2018 9:54:40 AM org.atmosphere.container.JSR356AsyncSupport <init>
INFO: JSR 356 Mapping path /counter
Apr 26, 2018 9:54:40 AM org.atmosphere.cpr.DefaultAsyncSupportResolver newCometSupport
WARNING: Failed to create AsyncSupport class: class org.atmosphere.container.JSR356AsyncSupport, error: java.lang.reflect.InvocationTargetException
Apr 26, 2018 9:54:40 AM org.atmosphere.cpr.DefaultAsyncSupportResolver newCometSupport
SEVERE: Real error: The path
[/counter/{path0}/] contains one or more empty segments which are is not permitted
java.lang.IllegalArgumentException: The path
[/counter/{path0}/] contains one or more empty segments which are is not permitted
at org.apache.tomcat.websocket.server.UriTemplate.<init>(UriTemplate.java:71)
at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:153)
at org.atmosphere.container.JSR356AsyncSupport.<init>(JSR356AsyncSupport.java:99)
at org.atmosphere.container.JSR356AsyncSupport.<init>(JSR356AsyncSupport.java:42)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
at org.atmosphere.cpr.DefaultAsyncSupportResolver.newCometSupport(DefaultAsyncSupportResolver.java:237)
at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolveWebSocket(DefaultAsyncSupportResolver.java:308)
at org.atmosphere.cpr.DefaultAsyncSupportResolver.resolve(DefaultAsyncSupportResolver.java:294)
at org.atmosphere.cpr.AtmosphereFramework.autoDetectContainer(AtmosphereFramework.java:2085)
at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:914)
at org.atmosphere.cpr.AtmosphereFramework.init(AtmosphereFramework.java:838)
at com.vaadin.server.communication.PushRequestHandler.initAtmosphere(PushRequestHandler.java:212)
at com.vaadin.server.communication.JSR356WebsocketInitializer.initAtmosphereForVaadinServlet(JSR356WebsocketInitializer.java:152)
at com.vaadin.server.communication.JSR356WebsocketInitializer.contextInitialized(JSR356WebsocketInitializer.java:118)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4602)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5066)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:682)
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:564)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:350)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
It looks like Tomcat is getting empty segments on the path under 8.4.0.
Any ideas?