Return-Path: Delivered-To: apmail-incubator-sling-commits-archive@minotaur.apache.org Received: (qmail 23267 invoked from network); 12 Jun 2009 14:46:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 12 Jun 2009 14:46:31 -0000 Received: (qmail 87234 invoked by uid 500); 12 Jun 2009 14:46:43 -0000 Delivered-To: apmail-incubator-sling-commits-archive@incubator.apache.org Received: (qmail 87187 invoked by uid 500); 12 Jun 2009 14:46:43 -0000 Mailing-List: contact sling-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: sling-dev@incubator.apache.org Delivered-To: mailing list sling-commits@incubator.apache.org Received: (qmail 87178 invoked by uid 99); 12 Jun 2009 14:46:43 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jun 2009 14:46:43 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jun 2009 14:46:41 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 67F842388898; Fri, 12 Jun 2009 14:46:21 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r784140 - /incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java Date: Fri, 12 Jun 2009 14:46:21 -0000 To: sling-commits@incubator.apache.org From: fmeschbe@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090612144621.67F842388898@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Fri Jun 12 14:46:21 2009 New Revision: 784140 URL: http://svn.apache.org/viewvc?rev=784140&view=rev Log: SLING-1003 Cope with the situation of filters not using SlingHttpServletRequest/Response but plain HttpServletRequest/Response Modified: incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java Modified: incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java?rev=784140&r1=784139&r2=784140&view=diff ============================================================================== --- incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java (original) +++ incubator/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/filter/AbstractSlingFilterChain.java Fri Jun 12 14:46:21 2009 @@ -29,6 +29,7 @@ import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.request.RequestProgressTracker; +import org.apache.sling.engine.impl.request.RequestData; public abstract class AbstractSlingFilterChain implements FilterChain { @@ -41,27 +42,59 @@ this.current = -1; } - /** - * @see javax.servlet.FilterChain#doFilter(javax.servlet.ServletRequest, - * javax.servlet.ServletResponse) - */ public void doFilter(ServletRequest request, ServletResponse response) throws ServletException, IOException { this.current++; if (this.current < this.filters.length) { - - RequestProgressTracker tracker = ((SlingHttpServletRequest) request).getRequestProgressTracker(); - tracker.log("Calling filter: {0}", this.filters[this.current].getClass().getName()); - - this.filters[this.current].doFilter(request, response, this); + + // continue filtering with the next filter + Filter filter = this.filters[this.current]; + trackFilter(request, filter); + filter.doFilter(request, response, this); + } else { - this.render((SlingHttpServletRequest) request, - (SlingHttpServletResponse) response); + + // end of chain, a filter may have wrapped a plain ServletRequest + // and we must ensure it is a Sling request again + SlingHttpServletRequest slingRequest = toSlingRequest(request); + SlingHttpServletResponse slingResponse = toSlingResponse(response); + + this.render(slingRequest, slingResponse); + } } protected abstract void render(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException, ServletException; + + // ---------- internal helper + + private void trackFilter(ServletRequest request, Filter filter) { + RequestData data = RequestData.getRequestData(request); + if (data != null) { + RequestProgressTracker tracker = data.getRequestProgressTracker(); + tracker.log("Calling filter: {0}", + this.filters[this.current].getClass().getName()); + } + } + + private SlingHttpServletRequest toSlingRequest(ServletRequest request) { + if (request instanceof SlingHttpServletRequest) { + return (SlingHttpServletRequest) request; + } + + // wrap + return RequestData.toSlingHttpServletRequest(request); + } + + private SlingHttpServletResponse toSlingResponse(ServletResponse response) { + if (response instanceof SlingHttpServletResponse) { + return (SlingHttpServletResponse) response; + } + + // wrap + return RequestData.toSlingHttpServletResponse(response); + } } \ No newline at end of file