svn commit: r1303826 - in /cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon: components/treeprocessor/ConcreteTreeProcessor.java environment/wrapper/EnvironmentWrapper.java

[email protected]
Newsgroups gmane.text.xml.cocoon.cvs
Message-ID <[email protected]>
Author: cdamioli
Date: Thu Mar 22 15:12:51 2012
New Revision: 1303826

URL: http://svn.apache.org/viewvc?rev=1303826&view=rev
Log:
COCOON-2321 Unable to permanently redirect the client (eg. with an HTTP code 301) from inside a cocoon:// redirection

Modified:
    cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
    cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java

Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java?rev=1303826&r1=1303825&r2=1303826&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Thu Mar 22 15:12:51 2012
@@ -35,6 +35,7 @@ import org.apache.cocoon.components.Coco
 import org.apache.cocoon.components.pipeline.ProcessingPipeline;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.ForwardRedirector;
+import org.apache.cocoon.environment.PermanentRedirector;
 import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
 import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
@@ -300,8 +301,15 @@ public class ConcreteTreeProcessor exten
         if ( facade != null ) {
             newEnv = facade.getDelegate();
         }
-        if ( ((ForwardEnvironmentWrapper)newEnv).getRedirectURL() != null ) {
-            environment.redirect( false, ((ForwardEnvironmentWrapper)newEnv).getRedirectURL() );
+        
+        ForwardEnvironmentWrapper forwardEnv = (ForwardEnvironmentWrapper) newEnv;
+        if (forwardEnv.hasRedirected()) {
+            if (forwardEnv.isPermanentRedirection() && environment instanceof PermanentRedirector) {
+                ((PermanentRedirector )environment).permanentRedirect(false, forwardEnv.getRedirectURL());
+            }
+            else {
+                environment.redirect( false, forwardEnv.getRedirectURL() );
+            }
         }
         return result;
     }

Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java
URL: http://svn.apache.org/viewvc/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java?rev=1303826&r1=1303825&r2=1303826&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java Thu Mar 22 15:12:51 2012
@@ -29,6 +29,8 @@ import org.apache.cocoon.Constants;
 import org.apache.cocoon.environment.AbstractEnvironment;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.PermanentRedirector;
+import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.Response;
 import org.apache.cocoon.util.BufferedOutputStream;
@@ -42,7 +44,7 @@ import org.apache.cocoon.util.BufferedOu
  * @author <a href="mailto:[email protected]">Carsten Ziegeler</a>
  * @version $Id$
  */
-public class EnvironmentWrapper extends AbstractEnvironment {
+public class EnvironmentWrapper extends AbstractEnvironment implements Redirector, PermanentRedirector {
 
     /** The wrapped environment */
     protected Environment environment;
@@ -52,7 +54,7 @@ public class EnvironmentWrapper extends 
 
     /** The redirect url */
     protected String redirectURL;
-
+    
     /** The request object */
     protected Request request;
 
@@ -63,6 +65,10 @@ public class EnvironmentWrapper extends 
 
     protected boolean internalRedirect = false;
 
+    protected boolean hasRedirected;
+
+    protected boolean permanentRedirection;
+
     /**
      * Constructs an EnvironmentWrapper object from a Request
      * and Response objects
@@ -267,6 +273,7 @@ public class EnvironmentWrapper extends 
     public void redirect(boolean sessionmode, String newURL)
     throws IOException {
         this.redirectURL = newURL;
+        this.hasRedirected = true;
 
         // check if session mode shall be activated
         if (sessionmode) {
@@ -276,6 +283,31 @@ public class EnvironmentWrapper extends 
     }
 
     /**
+     * Permanentlty redirect the client to a new URL is not allowed
+     */
+    public void permanentRedirect(boolean sessionmode, String newURL)
+    throws IOException {
+        this.redirect(sessionmode, newURL);
+        this.permanentRedirection = true;
+    }
+    
+    public boolean hasRedirected() {
+        return this.hasRedirected;
+    }
+    
+    /**
+     * Has a permanent redirection been asked
+     */
+    public boolean isPermanentRedirection() {
+        return this.permanentRedirection;
+    }
+    
+    public void sendStatus(int sc) {
+        this.setStatus(sc);
+        this.hasRedirected = true;
+    }
+
+    /**
      * Redirect in the first non-wrapped environment
      */
     public void globalRedirect(boolean sessionmode, String newURL)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.