[richfaces-issues] [JBoss JIRA] Commented: (RF-572) ClassCastException when trying to access a JSF Portlet using RichFaces

Thomas Heute (JIRA) jira-events at lists.jboss.org
Thu Sep 27 09:24:42 EDT 2007


    [ http://jira.jboss.com/jira/browse/RF-572?page=comments#action_12379073 ] 
            
Thomas Heute commented on RF-572:
---------------------------------

MyFaces implementation has a unique FacesContextFactory for Portet and 'pure servlet' environemnt and check against the 2 to create the
correct FacesContext:
 if (context instanceof ServletContext)
{
   return new ServletFacesContextImpl((ServletContext)context,
                                                (ServletRequest)request,
                                                (ServletResponse)response);
}
         
if (context instanceof PortletContext)
{
   return new ServletFacesContextImpl((PortletContext)context,
                                         (PortletRequest)request,
                                         (PortletResponse)response);
}

Sun RI has 2 FacesContextFactory, one used in a portlet environment, one used in a servlet environment both suppose that only portletContext (or only servletContext) will be used, while this is not the case with RichFaces's filter.
Both implementation are not perfect while the myFaces one is safer as long as no other context exist. In fact we should have 2 facesContextFactory but the portletContextFactory should delegate if needed. 

As a conclusion on this particular problem it should work just fine with MyFaces but the jsfportletbridge.dev.java.net project should modify this behavior.

Alternatively we can probably create a RichFacesFacesPortletContextFactory and workaround this issue



> ClassCastException when trying to access a JSF Portlet using RichFaces
> ----------------------------------------------------------------------
>
>                 Key: RF-572
>                 URL: http://jira.jboss.com/jira/browse/RF-572
>             Project: RichFaces
>          Issue Type: Bug
>    Affects Versions: 3.1.0
>         Environment: RealFaces 3.1.0.SNAPSHOT (sourcecode retrieved and built manually from svn 08.08.2007 )
> JSF Portlet Bridge 1.2.1 from Sun
> JBoss Portal 2.6.1.GA
> JBoss AS 4.2.1.GA
> JDK 1.5.0_08
> Postgresql 8.x database
> Linux Kubuntu 6.10
>            Reporter: Viggo Navarsete
>         Assigned To: Alexander Smirnov
>             Fix For: 3.2.0
>
>         Attachments: AbstractExternalContext.java, ContextAttributesMap.java, ContextMap.java, EnumerationIterator.java, FacesContextImpl.java, portlet-jsfrichfacesdemo.war, PortletContextImpl.java, ServletContextImpl.java, SessionAttributesNames.java
>
>
> I have created a JSF portlet using the latest RichFaces source code from svn. I have added a <rich:panel> to my jsp page, deployed it to my jboss portal, created a portlet instance and added it to a page. When trying to access the page I get the following stacktrace:
> 08:37:37,523 WARN  [SkinFactoryImpl] Init parameter for a skin name changed to org.richfaces.SKIN
> 08:37:39,853 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
> java.lang.ClassCastException: org.apache.catalina.core.ApplicationContextFacade
>         at com.sun.faces.portlet.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:64)
>         at org.ajax4jsf.resource.InternetResourceService.getFacesContext(InternetResourceService.java:317)
>         at org.ajax4jsf.resource.InternetResourceService.getResourceContext(InternetResourceService.java:251)
>         at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:162)
>         at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:144)
>         at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:259)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         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.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
>         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:595)
> Please read the JBoss Forum reference for more information about configuration of my web.xml, portlet.xml and other "war-file-specific-things".

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the richfaces-issues mailing list