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);
}