You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2009/12/07 22:55:30 UTC

svn commit: r888151 - in /cocoon/cocoon3/trunk: cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/ cocoon-sample/src/test/java/org/apache/cocoon/profiling/ cocoon-sample/src/test/java/org/apache/cocoon/sitemap/ cocoon-servlet/src/main/java/or...

Author: reinhard
Date: Mon Dec  7 21:55:28 2009
New Revision: 888151

URL: http://svn.apache.org/viewvc?rev=888151&view=rev
Log:
one aspect for all collectors (will also make stacktraces more readable)

Added:
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java   (with props)
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java   (with props)
Removed:
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/node/LastModifiedCollector.java
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/node/MimeTypeCollector.java
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/node/StatusCodeCollector.java
Modified:
    cocoon/cocoon3/trunk/cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/SpringRESTController.java
    cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
    cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/sitemap/SitemapBuilderTest.java
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/RequestProcessor.java
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/ssf/ServletServiceSerializer.java
    cocoon/cocoon3/trunk/cocoon-servlet/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-collector.xml
    cocoon/cocoon3/trunk/cocoon-wicket/src/main/java/org/apache/cocoon/wicket/sitemap/WicketReader.java

Modified: cocoon/cocoon3/trunk/cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/SpringRESTController.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/SpringRESTController.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/SpringRESTController.java (original)
+++ cocoon/cocoon3/trunk/cocoon-rest/src/main/java/org/apache/cocoon/rest/controller/SpringRESTController.java Mon Dec  7 21:55:28 2009
@@ -43,8 +43,7 @@
 import org.apache.cocoon.rest.controller.response.RestResponse;
 import org.apache.cocoon.rest.controller.response.RestResponseMetaData;
 import org.apache.cocoon.rest.controller.util.AnnotationCollector;
-import org.apache.cocoon.servlet.node.MimeTypeCollector;
-import org.apache.cocoon.servlet.node.StatusCodeCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.servlet.util.HttpContextHelper;
 import org.apache.cocoon.servlet.util.SettingsHelper;
 import org.apache.cocoon.sitemap.util.ExceptionHandler;
@@ -88,10 +87,10 @@
             RestResponseMetaData restResponseMetaData = restResponse.execute(outputStream, inputParameters);
 
             // set the status-code with the result produced by the restResponse execution
-            StatusCodeCollector.setStatusCode(restResponseMetaData.getStatusCode());
+            ResponseHeaderCollector.setStatusCode(restResponseMetaData.getStatusCode());
 
             // set the content type with the result produced by the restResponse execution
-            MimeTypeCollector.setMimeType(restResponseMetaData.getContentType());
+            ResponseHeaderCollector.setMimeType(restResponseMetaData.getContentType());
 
             // return the content type
             return restResponseMetaData.getContentType();

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/profiling/MockXMLSitemapServlet.java Mon Dec  7 21:55:28 2009
@@ -32,8 +32,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.cocoon.servlet.node.LastModifiedCollector;
-import org.apache.cocoon.servlet.node.MimeTypeCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.servlet.util.HttpContextHelper;
 import org.apache.cocoon.sitemap.Invocation;
 
@@ -74,7 +73,7 @@
 
             // collect meta information from the previous run of the sitemap
             // engine
-            long lastModified = LastModifiedCollector.getLastModified();
+            long lastModified = ResponseHeaderCollector.getLastModified();
             int contentLengh = baos.size();
 
             // send the Last-Modified header
@@ -85,7 +84,7 @@
             response.setHeader("X-Cocoon-Version", this.version);
 
             // Content-Type handling
-            String mimeType = MimeTypeCollector.getMimeType();
+            String mimeType = ResponseHeaderCollector.getMimeType();
             if (mimeType == null || "".equals(mimeType) || "content/unknown".equals(mimeType)) {
                 mimeType = this.servletConfig.getServletContext().getMimeType(request.getRequestURI());
             }

Modified: cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/sitemap/SitemapBuilderTest.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/sitemap/SitemapBuilderTest.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/sitemap/SitemapBuilderTest.java (original)
+++ cocoon/cocoon3/trunk/cocoon-sample/src/test/java/org/apache/cocoon/sitemap/SitemapBuilderTest.java Mon Dec  7 21:55:28 2009
@@ -28,7 +28,7 @@
 import junit.framework.TestCase;
 
 import org.apache.cocoon.sample.action.CustomException;
-import org.apache.cocoon.servlet.node.StatusCodeCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.servlet.util.HttpContextHelper;
 import org.apache.cocoon.servletservice.CallStackHelper;
 import org.apache.cocoon.sitemap.node.InvocationResult;
@@ -72,7 +72,7 @@
         assertTrue("Expected CustomException but received " + invocation.getThrowable(),
                 invocation.getThrowable() instanceof CustomException);
 
-        assertEquals(501, StatusCodeCollector.getStatusCode());
+        assertEquals(501, ResponseHeaderCollector.getStatusCode());
     }
 
     public void testGenerator() throws Exception {
@@ -86,7 +86,7 @@
 
         // invocation should not be marked as error-invocation
         assertFalse(invocation.isErrorInvocation());
-        assertEquals(401, StatusCodeCollector.getStatusCode());
+        assertEquals(401, ResponseHeaderCollector.getStatusCode());
     }
 
     public void testNoMatchingPipeline() throws Exception {

Modified: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/RequestProcessor.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/RequestProcessor.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/RequestProcessor.java (original)
+++ cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/RequestProcessor.java Mon Dec  7 21:55:28 2009
@@ -36,9 +36,7 @@
 
 import org.apache.cocoon.callstack.CallStack;
 import org.apache.cocoon.configuration.Settings;
-import org.apache.cocoon.servlet.node.LastModifiedCollector;
-import org.apache.cocoon.servlet.node.MimeTypeCollector;
-import org.apache.cocoon.servlet.node.StatusCodeCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.servlet.util.HttpContextHelper;
 import org.apache.cocoon.servlet.util.ManifestUtils;
 import org.apache.cocoon.servlet.util.ObjectModelProvider;
@@ -95,7 +93,7 @@
                 return;
             }
 
-            // if it runs ouside of the Servlet-Service framework, the CallStack has
+            // if it runs outside of the Servlet-Service framework, the CallStack has
             // to be prepared
             try {
                 CallStackHelper.enterServlet(this.servletContext, request, response);
@@ -281,7 +279,7 @@
                 this.servletContext), baos);
 
         // collect meta information from the previous run of the sitemap engine
-        long lastModified = LastModifiedCollector.getLastModified();
+        long lastModified = ResponseHeaderCollector.getLastModified();
         int contentLengh = baos.size();
 
         // send the Last-Modified header
@@ -311,7 +309,7 @@
         }
 
         // Content-Type handling
-        String mimeType = MimeTypeCollector.getMimeType();
+        String mimeType = ResponseHeaderCollector.getMimeType();
         if (mimeType == null || "".equals(mimeType) || "content/unknown".equals(mimeType)) {
             mimeType = this.servletContext.getMimeType(request.getRequestURI());
         }
@@ -320,7 +318,7 @@
         }
 
         // Status code handling
-        int statusCode = StatusCodeCollector.getStatusCode();
+        int statusCode = ResponseHeaderCollector.getStatusCode();
         response.setStatus(statusCode);
 
         // write the sitemap result to the output stream

Added: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java?rev=888151&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java (added)
+++ cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java Mon Dec  7 21:55:28 2009
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * 
+ */
+package org.apache.cocoon.servlet.collector;
+
+public class InvalidStatusCodeException extends RuntimeException {
+
+    private static final long serialVersionUID = 1L;
+
+    public InvalidStatusCodeException(String message, Throwable t) {
+        super(message, t);
+    }
+}
\ No newline at end of file

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/InvalidStatusCodeException.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java?rev=888151&view=auto
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java (added)
+++ cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java Mon Dec  7 21:55:28 2009
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.servlet.collector;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.cocoon.callstack.CallStack;
+import org.apache.cocoon.pipeline.Pipeline;
+import org.apache.cocoon.pipeline.component.PipelineComponent;
+import org.apache.cocoon.sitemap.Invocation;
+import org.apache.cocoon.sitemap.node.InvocationResult;
+import org.apache.cocoon.sitemap.node.SerializeNode;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+
+@Aspect
+public class ResponseHeaderCollector {
+
+    private static final String KEY_LAST_MODIFIED = ResponseHeaderCollector.class.getName() + "/last-modified";
+    private static final String KEY_MIME_TYPE = ResponseHeaderCollector.class.getName() + "/mime-type";
+    private static final String KEY_STATUS_CODE = ResponseHeaderCollector.class.getName() + "/status-code";
+
+    @SuppressWarnings("unchecked")
+    @Around("execution(* org.apache.cocoon.pipeline.Pipeline.execute(..))")
+    public Object interceptInvoke(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
+        Object result = proceedingJoinPoint.proceed();
+        Pipeline<PipelineComponent> pipeline = (Pipeline<PipelineComponent>) proceedingJoinPoint.getTarget();
+
+        // last modified
+        long lastModified = pipeline.getLastModified();
+        if (lastModified > -1 || getLastModified() <= 0) {
+            setLastModified(lastModified);
+        }
+
+        // mime type
+        String newValue = pipeline.getContentType();
+        if (newValue != null) {
+            setMimeType(newValue);
+        }
+
+        return result;
+    }
+
+    @Around("execution(* org.apache.cocoon.sitemap.node.SerializeNode.invoke(..)) && args(invocation)")
+    public Object interceptInvoke(ProceedingJoinPoint proceedingJoinPoint, Invocation invocation) throws Throwable {
+        SerializeNode target = (SerializeNode) proceedingJoinPoint.getTarget();
+        String statusCode = invocation.resolveParameter(target.getParameters().get("status-code"));
+
+        InvocationResult invocationResult = (InvocationResult) proceedingJoinPoint.proceed();
+        if (invocationResult.isContinued() && statusCode != null) {
+            try {
+                setStatusCode(Integer.valueOf(statusCode));
+            } catch (NumberFormatException nfe) {
+                throw new InvalidStatusCodeException("The status-code '" + statusCode + " is not valid number.", nfe);
+            }
+        }
+
+        return invocationResult;
+    }
+
+    public static long getLastModified() {
+        Object lastModified = CallStack.getCurrentFrame().getAttribute(KEY_LAST_MODIFIED);
+
+        if (lastModified == null) {
+            return -1;
+        }
+
+        return (Long) lastModified;
+    }
+
+    public static String getMimeType() {
+        return (String) CallStack.getCurrentFrame().getAttribute(KEY_MIME_TYPE);
+    }
+
+    public static int getStatusCode() {
+        Integer statusCode = (Integer) CallStack.getCurrentFrame().getAttribute(KEY_STATUS_CODE);
+
+        if (statusCode == null) {
+            return HttpServletResponse.SC_OK;
+        }
+
+        return statusCode;
+    }
+
+    public static void setLastModified(Long lastModified) {
+        CallStack.getCurrentFrame().setAttribute(KEY_LAST_MODIFIED, lastModified);
+    }
+
+    public static void setMimeType(String mimeType) {
+        CallStack.getCurrentFrame().setAttribute(KEY_MIME_TYPE, mimeType);
+    }
+
+    public static void setStatusCode(int statusCode) {
+        CallStack.getCurrentFrame().setAttribute(KEY_STATUS_CODE, statusCode);
+    }
+}

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/collector/ResponseHeaderCollector.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/ssf/ServletServiceSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/ssf/ServletServiceSerializer.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/ssf/ServletServiceSerializer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-servlet/src/main/java/org/apache/cocoon/servlet/ssf/ServletServiceSerializer.java Mon Dec  7 21:55:28 2009
@@ -28,7 +28,7 @@
 import org.apache.cocoon.pipeline.util.URLConnectionUtils;
 import org.apache.cocoon.sax.AbstractSAXSerializer;
 import org.apache.cocoon.sax.util.XMLUtils;
-import org.apache.cocoon.servlet.node.StatusCodeCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.xml.sax.SAXBuffer;
 import org.apache.commons.io.IOUtils;
 import org.xml.sax.SAXException;
@@ -60,7 +60,7 @@
             if (urlConnection instanceof HttpURLConnection) {
                 HttpURLConnection servletURLConnection = (HttpURLConnection) urlConnection;
                 int statusCode = servletURLConnection.getResponseCode();
-                StatusCodeCollector.setStatusCode(statusCode);
+                ResponseHeaderCollector.setStatusCode(statusCode);
             }
         } catch (IOException e) {
             throw new SAXException("Can't copy result of servlet service to the output stream", e);

Modified: cocoon/cocoon3/trunk/cocoon-servlet/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-collector.xml
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-servlet/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-collector.xml?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-servlet/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-collector.xml (original)
+++ cocoon/cocoon3/trunk/cocoon-servlet/src/main/resources/META-INF/cocoon/spring/cocoon-servlet-collector.xml Mon Dec  7 21:55:28 2009
@@ -22,14 +22,9 @@
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
+                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
 
   <aop:aspectj-autoproxy proxy-target-class="false" />
  
-  <bean id="org.apache.cocoon.servlet.node.StatusCodeCollector" class="org.apache.cocoon.servlet.node.StatusCodeCollector" />
-
-  <bean id="org.apache.cocoon.servlet.node.MimeTypeCollector" class="org.apache.cocoon.servlet.node.MimeTypeCollector" />
-  
-  <bean id="org.apache.cocoon.servlet.node.LastModifiedCollector" class="org.apache.cocoon.servlet.node.LastModifiedCollector" />
-  
+  <bean id="org.apache.cocoon.servlet.collector.ResponseHeaderCollector" class="org.apache.cocoon.servlet.collector.ResponseHeaderCollector" />
 </beans>

Modified: cocoon/cocoon3/trunk/cocoon-wicket/src/main/java/org/apache/cocoon/wicket/sitemap/WicketReader.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-wicket/src/main/java/org/apache/cocoon/wicket/sitemap/WicketReader.java?rev=888151&r1=888150&r2=888151&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-wicket/src/main/java/org/apache/cocoon/wicket/sitemap/WicketReader.java (original)
+++ cocoon/cocoon3/trunk/cocoon-wicket/src/main/java/org/apache/cocoon/wicket/sitemap/WicketReader.java Mon Dec  7 21:55:28 2009
@@ -43,7 +43,7 @@
 import org.apache.cocoon.pipeline.SetupException;
 import org.apache.cocoon.pipeline.component.Finisher;
 import org.apache.cocoon.pipeline.component.Starter;
-import org.apache.cocoon.servlet.node.LastModifiedCollector;
+import org.apache.cocoon.servlet.collector.ResponseHeaderCollector;
 import org.apache.cocoon.servlet.util.HttpContextHelper;
 import org.apache.commons.io.IOUtils;
 import org.apache.wicket.protocol.http.WicketFilter;
@@ -293,7 +293,7 @@
 
         public void setDateHeader(String name, long date) {
             if ("Last-Modified".equals(name)) {
-                LastModifiedCollector.setLastModified(date);
+                ResponseHeaderCollector.setLastModified(date);
             }
             this.response.setDateHeader(name, date);
         }