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 2008/06/18 16:22:26 UTC

svn commit: r669178 - /cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java

Author: reinhard
Date: Wed Jun 18 07:22:26 2008
New Revision: 669178

URL: http://svn.apache.org/viewvc?rev=669178&view=rev
Log:
. special support of servlet: URIs in redirect-to elements

Modified:
    cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java

Modified: cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java?rev=669178&r1=669177&r2=669178&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java Wed Jun 18 07:22:26 2008
@@ -19,7 +19,9 @@
 package org.apache.cocoon.corona.servlet.component;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URL;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
@@ -27,11 +29,16 @@
 import org.apache.cocoon.corona.pipeline.component.Finisher;
 import org.apache.cocoon.corona.pipeline.component.Starter;
 import org.apache.cocoon.corona.servlet.util.HttpContextHelper;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 public class RedirectorComponent implements Starter, Finisher {
 
+    private final Log logger = LogFactory.getLog(this.getClass());
+
     private Map<String, Object> parameters;
     private String uri;
+    private OutputStream outputStream;
 
     /**
      * {@inheritDoc}
@@ -42,9 +49,24 @@
         HttpServletResponse response = HttpContextHelper.getResponse(this.parameters);
 
         try {
-            String location = response.encodeRedirectURL(this.uri);
-            response.sendRedirect(location);
+            if (this.uri.startsWith("servlet:")) {
+                InputStream inputStream = new URL(this.uri).openStream();
+                byte[] data = new byte[1024];
+                while (true) {
+                    int bytesRead = inputStream.read(data, 0, data.length);
+
+                    if (bytesRead == -1) {
+                        break;
+                    }
+
+                    this.outputStream.write(data, 0, bytesRead);
+                }
+            } else {
+                String location = response.encodeRedirectURL(this.uri);
+                response.sendRedirect(location);
+            }
         } catch (IOException e) {
+            this.logger.error("Can't redirect to " + this.uri, e);
             throw new RuntimeException(e);
         }
     }
@@ -72,6 +94,7 @@
      * @see org.apache.cocoon.corona.pipeline.component.Finisher#setOutputStream(java.io.OutputStream)
      */
     public void setOutputStream(OutputStream outputStream) {
+        this.outputStream = outputStream;
     }
 
     /**