[ https://issues.apache.org/jira/browse/SLING-1003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12720162#action_12720162 ]
Christian Sprecher commented on SLING-1003: ------------------------------------------- To be honest, I cannot follow you there :). But anyways: I do see java.lang.ClassCastException: org.webcastellum.RequestWrapper cannot be cast to org.apache.sling.api.SlingHttpServletRequest at org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper.getSlingRequest(SlingHttpServletRequestWrapper.java:56) at org.apache.sling.engine.impl.request.RequestData.unwrap(RequestData.java:317) When I look at your change: @Override + public SlingHttpServletRequest getSlingRequest() { + // overwrite base class getSlingRequest since that method + // calls getRequest which is overwritten here to return the + // HttpServletRequest - we have to get the actual underlying + // request object which is available from the base class + return (SlingHttpServletRequest) super.getRequest(); + } You still cast it onto SlingHttpServletRequest, why? I do not know enough of the source code, but maybe a hint: When I debug the whole stuff in RequestData#unwrap, I do see the following thing: request.getRequest() ==> org.webcastellum.requestwrap...@97eb44 request.getRequest().getRequest() ==> org.apache.sling.engine.impl.slinghttpservletrequesti...@1a60a71 So I *think* (wild guessing of course), that we are interested in the later result when unwrapping. The WebCastellum filter itself already wrapps the (Sling)Request in a custom wrapper. Sorry to be such a pain, and thx in advance > Integration of 3rd party servlet filters problematic > ---------------------------------------------------- > > Key: SLING-1003 > URL: https://issues.apache.org/jira/browse/SLING-1003 > Project: Sling > Issue Type: Bug > Components: Engine > Affects Versions: Engine 2.0.4 > Environment: Windows Vista, > java version "1.6.0_13" > Java(TM) SE Runtime Environment (build 1.6.0_13-b03) > Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing) > Reporter: Christian Sprecher > Assignee: Felix Meschberger > Priority: Minor > Fix For: Engine 2.0.6 > > Attachments: SlingWebCastellum-1.0.jar > > > There is a problem within the chain handling: the 3rd party filter uses it's > own wrapper for requests and response, and supplies it to the chain in the > chain.doFilter() call. This leads to a ClassCastException on line 54 of > AbstractSlingFilterChain: > ... > RequestProgressTracker tracker = ((SlingHttpServletRequest) > request).getRequestProgressTracker(); > ... > I am not sure if this cast is valid in the context of a filter chain. On the > other hand I am not sure wether such a use case (filter that manipulates > request and response) has a chance to run in Sling. > ==> Please note that this servlet filter needs to run as early as possible in > the filter chain > java.lang.ClassCastException: org.webcastellum.RequestWrapper cannot be cast > to > org.apache.sling.api.SlingHttpServletRequest > at > org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter > (AbstractSlingFilterChain.java:54) > at > org.webcastellum.WebCastellumFilter.internalDoFilter(WebCastellumFilt > er.java:2610) > at > org.webcastellum.WebCastellumFilter.doFilter(WebCastellumFilter.java: > 1710) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.