Details
Description
If you try to load a trivial Facelets page, then you get this exception:
javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl
com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324)
com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26)
com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143)
*root cause*
com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl
com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157)
com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146)
com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193)
com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141)
com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93)
com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303)
com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26)
com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143)
It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml.
So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this.
Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR.
Or, since we ship our own Facelets, we could alter it so that if nothing is configured, it would first try the com.sun.el ExpressionFactory and then try the org.apache ExpressionFactory. That would only take 3 lines of code or so.
javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl
com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324)
com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26)
com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143)
*root cause*
com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl
com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157)
com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146)
com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193)
com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141)
com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93)
com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303)
com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26)
com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143)
It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml.
So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this.
Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR.
Or, since we ship our own Facelets, we could alter it so that if nothing is configured, it would first try the com.sun.el ExpressionFactory and then try the org.apache ExpressionFactory. That would only take 3 lines of code or so.
Activity
Mark Collette
created issue -
Liming Wu
made changes -
Field | Original Value | New Value |
---|---|---|
Summary | ICEfaces + Facelets + JSF 1.1 + Tomcat 6 problem | ICEfaces + Facelets + JSF 1.1 and 1.2+ Tomcat 6 problem |
Environment | ICEfaces, Facelets, JSF 1.1, Tomcat 6 | ICEfaces, Facelets, JSF 1.1 1.2, Tomcat 6 |
Description |
If you try to load a trivial Facelets page, then you get this exception: javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) *root cause* com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157) com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146) com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93) com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml. So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this. Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR. |
If you try to load a trivial Facelets page, then you get this exception: javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) *root cause* com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157) com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146) com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93) com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml. So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this. Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR. For a simple 1.2 project on Tomcat 6, I got following error message: WARNING: executePhase(RESTORE_VIEW 1,com.icesoft.faces.context.BridgeFacesContext@1ef7de4) threw exception javax.faces.application.ViewExpiredException: viewId:/ice.iface - View /ice.iface could not be restored. at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:25) at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:36) at com.icesoft.faces.webapp.http.core.PageServer.service(PageServer.java:31) at com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:46) at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherServer.java:50) at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19) at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19) at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:29) at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:109) at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:35) at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52) at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29) at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) |
Mark Collette
made changes -
Summary | ICEfaces + Facelets + JSF 1.1 and 1.2+ Tomcat 6 problem | ICEfaces + Facelets + JSF 1.1 + Tomcat 6 problem |
Environment | ICEfaces, Facelets, JSF 1.1 1.2, Tomcat 6 | ICEfaces, Facelets, JSF 1.1, Tomcat 6 |
Description |
If you try to load a trivial Facelets page, then you get this exception: javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) *root cause* com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157) com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146) com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93) com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml. So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this. Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR. For a simple 1.2 project on Tomcat 6, I got following error message: WARNING: executePhase(RESTORE_VIEW 1,com.icesoft.faces.context.BridgeFacesContext@1ef7de4) threw exception javax.faces.application.ViewExpiredException: viewId:/ice.iface - View /ice.iface could not be restored. at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:25) at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet$ThreadBlockingRequestResponse.respondWith(ThreadBlockingAdaptingServlet.java:36) at com.icesoft.faces.webapp.http.core.PageServer.service(PageServer.java:31) at com.icesoft.faces.webapp.http.core.SingleViewServer.service(SingleViewServer.java:46) at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherServer.java:50) at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19) at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19) at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:29) at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:109) at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:35) at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52) at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29) at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) |
If you try to load a trivial Facelets page, then you get this exception: javax.faces.FacesException: Problem in renderResponse: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:324) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) *root cause* com.sun.facelets.FaceletException: Could not instantiate feature[compiler.ExpressionFactory]: com.sun.el.ExpressionFactoryImpl com.sun.facelets.compiler.Compiler.featureInstance(Compiler.java:157) com.sun.facelets.compiler.Compiler.createExpressionFactory(Compiler.java:146) com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:193) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:141) com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:93) com.icesoft.faces.facelets.D2DFaceletViewHandler.renderResponse(D2DFaceletViewHandler.java:303) com.icesoft.faces.application.D2DViewHandler.renderView(D2DViewHandler.java:153) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) com.icesoft.faces.webapp.http.core.PageServer$1.respond(PageServer.java:26) com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.respondWith(ServletRequestResponse.java:143) It appears that, under Tomcat 6, they have their own EL implementation, and don't use the com.sun.el.* one. With Facelets 1.1.11 (not sure about Facelets 1.1.14) there is a "feature" called "compiler.ExpressionFactory" which defaults to "com.sun.el.ExpressionFactoryImpl". Trying to instantiate that class is what causes the exception. There's a method on the Compiler class to set this "feature", but I'm not aware of any code that itself grabs it out of the web.xml. So, we could add code to set the feature from the web.xml ourself, and then tell people how to configure their web.xml with Tomcat 6 and JSF 1.1 to use this. Or, we could make a small JAR with a dummy com.sun.el.ExpressionFactoryImpl class that would delegate to the Apache ExpressionFactory, and tell people to just include that JAR with their WAR. Or, since we ship our own Facelets, we could alter it so that if nothing is configured, it would first try the com.sun.el ExpressionFactory and then try the org.apache ExpressionFactory. That would only take 3 lines of code or so. |
Ken Fyten
made changes -
Fix Version/s | 1.6.2 [ 10111 ] | |
Fix Version/s | 1.7DR#2 [ 10110 ] | |
Assignee | Mark Collette [ mark.collette ] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #14974 | Wed Oct 17 18:58:05 MDT 2007 | mark.collette | |
Files Changed | ||||
MODIFY
/icefaces/trunk/icefaces/lib/icefaces-facelets.jar
|
Mark Collette
made changes -
Status | Open [ 1 ] | Resolved [ 5 ] |
Resolution | Fixed [ 1 ] |
Mark Collette
made changes -
Resolution | Fixed [ 1 ] | |
Status | Resolved [ 5 ] | Reopened [ 4 ] |
Mark Collette
made changes -
Link | This issue depends on ICE-2260 [ ICE-2260 ] |
Mark Collette
made changes -
Status | Reopened [ 4 ] | Resolved [ 5 ] |
Resolution | Fixed [ 1 ] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #15024 | Thu Oct 25 12:23:20 MDT 2007 | mark.collette | Backport to 1.6.2 : |
Files Changed | ||||
MODIFY
/icefaces/branches/icefaces-1.6/icefaces/lib/icefaces-facelets.jar
|
Ken Fyten
made changes -
Fix Version/s | 1.7 [ 10080 ] |
Ken Fyten
made changes -
Status | Resolved [ 5 ] | Closed [ 6 ] |
Assignee | Mark Collette [ mark.collette ] |
When running under JSF 1.1, with no "compiler.ExpressionFactory" feature set, ICEfaces Facelets will not just try to load "com.sun.el.ExpressionFactoryImpl", but will also then try to load "org.apache.el.ExpressionFactoryImpl". This should enable ICEfaces + Facelets + JSF 1.1 apps to work under Tomcat 6.
Subversion 15234
3rd\facelets-1.1\src\java\com\sun\facelets\compiler\Compiler.java
Subversion 14974
icefaces/lib/icefaces-facelets.jar