Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying Mojarra 2.1.x and 2.2 on Apache Tomcat 7.0.42 and above results in java.lang.UnsupportedOperationException

Our JSF web application based on java 7 se, JSF 2.1, using Mojarra 2.1.27 was working fine on Apache Tomcat 7.0.41 and below. When we attempted to upgrade to Tomcat 7.0.42 and above (we've tried every version up to 7.0.50), after application start up, on the first hit to any URL in the webapp, we see the following error in the tomcat logs:

I've debugged through this, and it seems the source of the Exception comes from the defaultFacesContext being null.

Stack Trace

INFO: Server startup in 1591 ms
Feb 03, 2014 6:32:25 PM org.apache.catalina.core.StandardContext fireRequestDestroyEvent
SEVERE: Exception sending request initialized lifecycle event to listener instance of class com.sun.faces.config.ConfigureListener
java.lang.UnsupportedOperationException
    at javax.faces.context.FacesContext.getExceptionHandler(FacesContext.java:287)
    at javax.faces.event.ExceptionQueuedEventContext.getListenersForEventClass(ExceptionQueuedEventContext.java:262)
    at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(ApplicationImpl.java:2128)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:289)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:247)
    at com.sun.faces.application.WebappLifecycleListener.requestDestroyed(WebappLifecycleListener.java:125)
    at com.sun.faces.config.ConfigureListener.requestDestroyed(ConfigureListener.java:344)
    at org.apache.catalina.core.StandardContext.fireRequestDestroyEvent(StandardContext.java:6151)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:207)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

I've reproduced this start-up exception issue with a very simple application with only one static JSF page with just Hello World and no backing bean, and a minimal web.xml, shown below. Everything works as expected on Tomcat 7.0.41, but always results in the following error on Tomcat 7.0.42+.

Just wondering if anyone else has run into this issue?

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0">
  <display-name>JSF TEST</display-name>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>    
</web-app>
like image 801
zzhu8192 Avatar asked Feb 04 '14 00:02

zzhu8192


1 Answers

remove that obsolete listener, and put

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
like image 144
Michele Mariotti Avatar answered Sep 28 '22 07:09

Michele Mariotti