Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 99562 invoked from network); 18 Jun 2008 14:23:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 18 Jun 2008 14:23:17 -0000 Received: (qmail 7551 invoked by uid 500); 18 Jun 2008 14:23:19 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 7484 invoked by uid 500); 18 Jun 2008 14:23:19 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 7475 invoked by uid 99); 18 Jun 2008 14:23:19 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 18 Jun 2008 07:23:19 -0700 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; Wed, 18 Jun 2008 14:22:38 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A77592388A39; Wed, 18 Jun 2008 07:22:26 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r669178 - /cocoon/whiteboard/corona/trunk/corona-servlet/src/main/java/org/apache/cocoon/corona/servlet/component/RedirectorComponent.java Date: Wed, 18 Jun 2008 14:22:26 -0000 To: cvs@cocoon.apache.org From: reinhard@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080618142226.A77592388A39@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 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; } /**