Index: src/main/java/info/magnolia/context/MgnlContext.java =================================================================== --- src/main/java/info/magnolia/context/MgnlContext.java (revision 34547) +++ src/main/java/info/magnolia/context/MgnlContext.java (working copy) @@ -223,7 +223,7 @@ } /** - * Resets the current aggregator instance if we're in a WebContext, throws an IllegalStateException otherwise. + * Resets the current aggregation state if we're in a WebContext, throws an IllegalStateException otherwise. */ public static void resetAggregationState() { final WebContext ctx = getWebContextOrNull(); Index: src/main/java/info/magnolia/context/WebContextImpl.java =================================================================== --- src/main/java/info/magnolia/context/WebContextImpl.java (revision 34547) +++ src/main/java/info/magnolia/context/WebContextImpl.java (working copy) @@ -105,8 +105,11 @@ return aggregationState; } + /** + * This will only reset the original URI/URL by calling {@link AggregationState#resetOriginalURIs()} + */ public void resetAggregationState() { - aggregationState = null; + getAggregationState().resetOriginalURIs(); } /** Index: src/main/java/info/magnolia/cms/core/AggregationState.java =================================================================== --- src/main/java/info/magnolia/cms/core/AggregationState.java (revision 34547) +++ src/main/java/info/magnolia/cms/core/AggregationState.java (working copy) @@ -71,7 +71,7 @@ } this.originalURI = strippedURI; } - + public void setOriginalBrowserURI(String originalBrowserURI) { final String strippedURI = stripContextPathIfExists(originalBrowserURI); if (this.originalBrowserURI != null && !this.originalBrowserURI.equals(strippedURI)) { @@ -119,7 +119,7 @@ public void setOriginalURL(String originalURL) { this.originalURL = originalURL; } - + public String getOriginalBrowserURI() { return originalBrowserURI; } @@ -253,4 +253,14 @@ return uri; } } + + /** + * The original URI/URL can only be set once. A call to this methods resets the original URI/URL and allows to set them freshly. + */ + public void resetOriginalURIs() { + this.originalURI=null; + this.originalURL=null; + this.originalBrowserURI=null; + this.originalBrowserURL=null; + } } Index: src/main/java/info/magnolia/cms/filters/ContentTypeFilter.java =================================================================== --- src/main/java/info/magnolia/cms/filters/ContentTypeFilter.java (revision 34547) +++ src/main/java/info/magnolia/cms/filters/ContentTypeFilter.java (working copy) @@ -54,6 +54,8 @@ * non-content related attributes of the AggregationState. ContentType could become an * attribute of the AggregationState too and could be set later. * + * FIXME: the original uri should not be reset, MAGNOLIA-3204 + * * @author Sameer Charles * @author Fabrizio Giustina * @author gjoseph @@ -63,7 +65,21 @@ private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ContentTypeFilter.class); + /** + * If set we have to reset the aggregation state before setting the original URI/URL with new values + */ + private static final String AGGREGATION_STATE_INITIALIZED = ContentTypeFilter.class.getName() + ".aggregationStateInitialized"; + public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { + // we will set the original uri, to avoid conflicts we have to reset the aggregation state + // this will mainly reset the original uri and keep all other information + if(request.getAttribute(AGGREGATION_STATE_INITIALIZED) != null){ + MgnlContext.resetAggregationState(); + } + else{ + request.setAttribute(AGGREGATION_STATE_INITIALIZED, Boolean.TRUE); + } + final String originalUri = request.getRequestURI(); final String ext = getUriExtension(originalUri); StringBuffer url = request.getRequestURL(); @@ -74,10 +90,6 @@ } final String characterEncoding = setupContentTypeAndCharacterEncoding(ext, request, response); - - // reset any leftover found in request - MgnlContext.resetAggregationState(); - final AggregationState aggregationState = MgnlContext.getAggregationState(); aggregationState.setCharacterEncoding(characterEncoding);