[ 
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.

Reply via email to