Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.1.0-core
-
None
-
MyFaces Core 2.1.17 (instead of Mojarra)
Trinidad 2.0.1
Spring WebFlow 2.4.2
Tomcat 7.0.35
Windows 7 64 bit
Java 8.0.45-64bit
Description
When starting a webapp based on Trinidad and Spring WebFlow with MyFaces Core as JSF implementation following exception occurrs:
java.lang.ClassNotFoundException: com.sun.faces.component.CompositeComponentStackManager
java.net.URLClassLoader.findClass(URLClassLoader.java:381)
java.lang.ClassLoader.loadClass(ClassLoader.java:424)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
java.lang.ClassLoader.loadClass(ClassLoader.java:357)
org.springframework.faces.webflow.JsfViewFactory$MojarraProcessTreeHandler.handleBefore(JsfViewFactory.java:225)
org.springframework.faces.webflow.JsfViewFactory.processTree(JsfViewFactory.java:166)
org.springframework.faces.webflow.JsfViewFactory.getViewStateViewRoot(JsfViewFactory.java:138)
org.springframework.faces.webflow.JsfViewFactory.getViewRoot(JsfViewFactory.java:102)
org.springframework.faces.webflow.JsfViewFactory.getView(JsfViewFactory.java:86)
org.springframework.webflow.engine.ViewState.resume(ViewState.java:192)
org.springframework.webflow.engine.Flow.resume(Flow.java:537)
Reason: org.springframework.faces.webflow.JsfRuntimeInformation.isMyFacesInUse() returns false because of following bug in Trinidad:
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl extends javax.faces.context.FacesContextFactory but FacesContextFactory.getWrapped() isn't overwritten. So getWrapped() returns null which causes the loop in org.springframework.faces.webflow.JsfRuntimeInformation.checkMyFacesContextFactory() to terminate and to return false.
Solution: Add following method to org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl:
@Override
public FacesContextFactory getWrapped()