java.lang.ClassCastException

There are no available Samebug tips for this exception. Do you have an idea how to solve this issue? A short tip would help users who saw this issue last week.

  • ZK wraps RenderRequest to org.zkoss.web.portlet.RenderHttpServletRequest and RenderResponse to org.zkoss.web.portlet.RenderHttpServletResponse, using static getInstance() methods. It causes exceptions that go like this : 13:56:15,342 ERROR [com.liferay.portal.kernel.servlet.PortletServlet] (http--0.0.0.0-8080-2) javax.portlet.PortletException: javax.servlet.ServletException: Original SevletRequest or wrapped original ServletRequest not passed to RequestDispatcher in violation of SRV.8.2 and SRV.14.2.5.1: javax.portlet.PortletException: javax.servlet.ServletException: Original SevletRequest or wrapped original ServletRequest not passed to RequestDispatcher in violation of SRV.8.2 and SRV.14.2.5.1 >> at org.zkoss.web.portlet.ServletPortletDispatcher.include(ServletPortletDispatcher.java:57) [zweb-6.0.0.jar:] >> at org.zkoss.web.portlet.Portlets.include(Portlets.java:72) [zweb-6.0.0.jar:] >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.handleError(DHtmlLayoutPortlet.java:335) [zk-6.0.0.jar:6.0.0] >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.doView(DHtmlLayoutPortlet.java:146) [zk-6.0.0.jar:6.0.0] JBoss & Tomcat (when using Liferay 6.1) are affected. If we try not to use strict servlet compliance (by setting system property "-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false"), this leads to another exception wich is shown below : 14:16:58,743 ERROR [portal-web.docroot.html.portal.render_portlet_jsp] (http--0.0.0.0-8080-2) java.lang.ClassCastException: org.zkoss.web.portlet.RenderHttpServletRequest cannot be cast to javax.servlet.ServletRequestWrapper >> at org.apache.catalina.core.ApplicationFilterFactory.createFilterChain(ApplicationFilterFactory.java:164) >> at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:827) >> at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:720) >> at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:657) >> at org.zkoss.web.portlet.ServletPortletDispatcher.include(ServletPortletDispatcher.java:51) >> at org.zkoss.web.portlet.Portlets.include(Portlets.java:72) >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.handleError(DHtmlLayoutPortlet.java:335) >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.doView(DHtmlLayoutPortlet.java:146) Workaround : As an alternative, I rewrote org.zkoss.web.portlet.RenderHttpServletRequest to use standard javax.servlet.http.HttpServletRequestWrapper. Here's my code : /** * A facade of RenderRequest that implements HttpServletRespose. * * @author tomyeh */ public class RenderHttpServletRequest implements HttpServletRequest { private final RenderRequest _req; private final HttpServletRequest _hreq; private String _enc = "UTF-8"; private final Map<String, String> _attrs = new HashMap<String, String>(8); public static HttpServletRequest getInstance(RenderRequest req) { final HttpServletRequest res; if (req instanceof HttpServletRequest) { res = (HttpServletRequest) req; } else { res = new RenderHttpServletRequest2(req); } // wraps HttpServletRequest to prevent further type checks : return new HttpServletRequestWrapper(res); } ... code unchanged after that ... } As a better alternative, RenderHttpServletRequest & RenderHttpServletResponse should inherit from (resp.) HttpServletRequestWrapper & HttpServletResponseWrapper or at least, use such wrappers in getInstance() methods.
    via by jezelinside,
  • ZK wraps RenderRequest to org.zkoss.web.portlet.RenderHttpServletRequest and RenderResponse to org.zkoss.web.portlet.RenderHttpServletResponse, using static getInstance() methods. It causes exceptions that go like this : 13:56:15,342 ERROR [com.liferay.portal.kernel.servlet.PortletServlet] (http--0.0.0.0-8080-2) javax.portlet.PortletException: javax.servlet.ServletException: Original SevletRequest or wrapped original ServletRequest not passed to RequestDispatcher in violation of SRV.8.2 and SRV.14.2.5.1: javax.portlet.PortletException: javax.servlet.ServletException: Original SevletRequest or wrapped original ServletRequest not passed to RequestDispatcher in violation of SRV.8.2 and SRV.14.2.5.1 >> at org.zkoss.web.portlet.ServletPortletDispatcher.include(ServletPortletDispatcher.java:57) [zweb-6.0.0.jar:] >> at org.zkoss.web.portlet.Portlets.include(Portlets.java:72) [zweb-6.0.0.jar:] >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.handleError(DHtmlLayoutPortlet.java:335) [zk-6.0.0.jar:6.0.0] >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.doView(DHtmlLayoutPortlet.java:146) [zk-6.0.0.jar:6.0.0] JBoss & Tomcat (when using Liferay 6.1) are affected. If we try not to use strict servlet compliance (by setting system property "-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false"), this leads to another exception wich is shown below : 14:16:58,743 ERROR [portal-web.docroot.html.portal.render_portlet_jsp] (http--0.0.0.0-8080-2) java.lang.ClassCastException: org.zkoss.web.portlet.RenderHttpServletRequest cannot be cast to javax.servlet.ServletRequestWrapper >> at org.apache.catalina.core.ApplicationFilterFactory.createFilterChain(ApplicationFilterFactory.java:164) >> at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:827) >> at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:720) >> at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:657) >> at org.zkoss.web.portlet.ServletPortletDispatcher.include(ServletPortletDispatcher.java:51) >> at org.zkoss.web.portlet.Portlets.include(Portlets.java:72) >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.handleError(DHtmlLayoutPortlet.java:335) >> at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.doView(DHtmlLayoutPortlet.java:146) Workaround : As an alternative, I rewrote org.zkoss.web.portlet.RenderHttpServletRequest to use standard javax.servlet.http.HttpServletRequestWrapper. Here's my code : /** * A facade of RenderRequest that implements HttpServletRespose. * * @author tomyeh */ public class RenderHttpServletRequest implements HttpServletRequest { private final RenderRequest _req; private final HttpServletRequest _hreq; private String _enc = "UTF-8"; private final Map<String, String> _attrs = new HashMap<String, String>(8); public static HttpServletRequest getInstance(RenderRequest req) { final HttpServletRequest res; if (req instanceof HttpServletRequest) { res = (HttpServletRequest) req; } else { res = new RenderHttpServletRequest2(req); } // wraps HttpServletRequest to prevent further type checks : return new HttpServletRequestWrapper(res); } ... code unchanged after that ... } As a better alternative, RenderHttpServletRequest & RenderHttpServletResponse should inherit from (resp.) HttpServletRequestWrapper & HttpServletResponseWrapper or at least, use such wrappers in getInstance() methods.
    via by jezelinside,
    • java.lang.ClassCastException: org.zkoss.web.portlet.RenderHttpServletRequest cannot be cast to javax.servlet.ServletRequestWrapper at org.apache.catalina.core.ApplicationFilterFactory.createFilterChain(ApplicationFilterFactory.java:164) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:827) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:720) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:657) at org.zkoss.web.portlet.ServletPortletDispatcher.include(ServletPortletDispatcher.java:51) at org.zkoss.web.portlet.Portlets.include(Portlets.java:72) at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.handleError(DHtmlLayoutPortlet.java:335) at org.zkoss.zk.ui.http.DHtmlLayoutPortlet.doView(DHtmlLayoutPortlet.java:146)
    No Bugmate found.