1

I have problems rendering f:websocket component. Server is Tomcat v8.5.

Regarding instructions at links:

http://balusc.omnifaces.org/2013/10/how-to-install-cdi-in-tomcat.html

How to update JSF 2.2 to JSF 2.3 using Maven in a Spring Application

https://blog.payara.fish/jsf-2.3-the-websocket-quickstart-under-payara-server

maven dependencies are:

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet-shaded</artifactId>
        <version>3.0.3.Final</version>
    </dependency>

    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>6.2</version>
    </dependency>

This is test.xhtml:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>

<h:body>


 <h:form>
  <h:outputText value="#{pisSocketView.count}" styleClass="display" />
  <p:commandButton value="Click"
   actionListener="#{pisSocketView.increment}" />

  <f:websocket channel="counter" onmessage="handleMessage" />
 </h:form>

 <script type="text/javascript">
  function handleMessage(message, channel, event) {
   $('.display').text(message);
  }
 </script>


</h:body>
</html>

When I load the page I get error:

java.lang.AbstractMethodError at javax.faces.application.ViewHandlerWrapper.getWebsocketURL(ViewHandlerWrapper.java:328) at javax.faces.application.ViewHandlerWrapper.getWebsocketURL(ViewHandlerWrapper.java:328) at com.sun.faces.push.WebsocketChannelManager.register(WebsocketChannelManager.java:151) at com.sun.faces.push.WebsocketChannelManager.register(WebsocketChannelManager.java:142) at com.sun.faces.push.WebsocketChannelManager$Proxy$_$$_WeldClientProxy.register(Unknown Source) at com.sun.faces.renderkit.html_basic.WebsocketRenderer.encodeEnd(WebsocketRenderer.java:115) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:949) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1912) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:918) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1905) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1908) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:491) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194) at org.ocpsoft.rewrite.faces.RewriteViewHandler.renderView(RewriteViewHandler.java:186) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:223) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:671) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:117) at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:61) at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:92) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:110) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)

bmlikota
  • 34
  • 3
  • Did you do the last step in you third link? You don't explicitly mention it – Kukeltje May 15 '18 at 08:31
  • Yes, I added this two context parameters – bmlikota May 15 '18 at 08:44
  • Tried tomcat 9? – Kukeltje May 15 '18 at 08:50
  • Oh and there already is a JSF 2.3.4... Tried that? And tried running in debug mode? Set breakpoints? – Kukeltje May 15 '18 at 08:58
  • And according to your version info etc, your code should end up in https://github.com/javaserverfaces/mojarra/blob/2.3.0/jsf-ri/src/main/java/com/sun/faces/application/ViewHandlerImpl.java#L720 Weird... sure you don't have a different explicit error somewhere? – Kukeltje May 15 '18 at 09:02
  • Tried with JSF 2.3.4 and nothing has been changed. – bmlikota May 15 '18 at 09:18
  • I have put breakpoints at ViewHandlerImpl at 720 and 736 lines, they are inactive and I didn't reach them after page reload. – bmlikota May 15 '18 at 09:18
  • So after pagereload everything works? – Kukeltje May 15 '18 at 09:21
  • No, it is not working yet. Tried with tomcat 9, everything same – bmlikota May 15 '18 at 09:24
  • Sorry, I posted a wrong viewhandler reference. Can you check what is the actual viewhandler class that is used when you have a breakpoint at ViewHandlerWrapper.java:328 – Kukeltje May 15 '18 at 09:42
  • And sure there is not an old jsf 2.2 still in your classpath? That would be one of the main reasons for an AbstractMethodError (https://stackoverflow.com/questions/12137073/abstract-method-error, never seen it myself) – Kukeltje May 15 '18 at 09:46
  • From ViewHandlerWrapper.getWebsocketURL is called DialogViewHandler.getWrapped and wrapped class is org.jboss.weld.module.jsf.ConversationAwareViewHandler which doesn't implement getWebsocketURL method – bmlikota May 15 '18 at 09:49
  • That is a PrimeFaces class!!! Are you actually using JSF 2.3 push in a PrimeFaces dialogFramwork dialog? If so please try making a [mcve]. Start without the dialog! – Kukeltje May 15 '18 at 09:52
  • I think I don't use push in a PrimeFaces dialogFramwork dialog. I posted full test.xhtml above in the stackoverflow issue – bmlikota May 15 '18 at 10:03
  • Everything is ok after I removed dependency: org.ocpsoft.rewrite rewrite-config-prettyfaces Many thanks @Kukeltje! – bmlikota May 16 '18 at 11:56

0 Answers0