Author: vgritsenko
Date: Tue Oct 19 08:26:10 2004
New Revision: 55068

Modified:
   
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
   
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
   cocoon/branches/BRANCH_2_1_X/src/test/anteater/redirect.xml
   cocoon/branches/BRANCH_2_1_X/status.xml
Log:
Forbid flowscripts with no response
http://marc.theaimsgroup.com/?t=106849566300008&r=1


Modified: 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
      (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
      Tue Oct 19 08:26:10 2004
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -33,6 +33,7 @@
 import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
 import 
org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
 import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.Redirector;
 import org.apache.cocoon.sitemap.PatternException;
 
 /**
@@ -112,25 +113,33 @@
             params = resolveList(parameters, manager, context, 
env.getObjectModel());
         }
 
-        String continuation = continuationId.resolve(context, 
env.getObjectModel());
+        // Need redirector in any case
+        Redirector redirector = context.getRedirector();
 
         // If the continuation id is not null, it takes precedence over
         // the function call, so we invoke it here.
+        String continuation = continuationId.resolve(context, 
env.getObjectModel());
         if (continuation != null && continuation.length() > 0) {
-            interpreter.handleContinuation(continuation, params, 
context.getRedirector());
+            interpreter.handleContinuation(continuation, params, redirector);
+            if (!redirector.hasRedirected()) {
+                throw new ProcessingException("<map:call continuation> did not 
send a response, at " +
+                                              getLocation());
+            }
             return true;
         }
 
         // We don't have a continuation id passed in <map:call>, so invoke
         // the specified function
-
         String name = functionName.resolve(context, env.getObjectModel());
-
         if (name != null && name.length() > 0) {
-            interpreter.callFunction(name, params, context.getRedirector());
+            interpreter.callFunction(name, params, redirector);
+            if (!redirector.hasRedirected()) {
+                throw new ProcessingException("<map:call function> did not 
send a response, at " +
+                                              getLocation());
+            }
             return true;
         }
-        
+
         // Found neither continuation nor function to call
         throw new ProcessingException("No function nor continuation given in 
<map:call function> at " + getLocation());
     }

Modified: 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
       (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallNodeBuilder.java
       Tue Oct 19 08:26:10 2004
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -30,11 +30,10 @@
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a>
- * @version CVS $Id: CallNodeBuilder.java,v 1.3 2004/03/05 13:02:51 
bdelacretaz Exp $
+ * @version CVS $Id$
  */
-
 public class CallNodeBuilder extends AbstractProcessingNodeBuilder
-  implements LinkedProcessingNodeBuilder {
+                             implements LinkedProcessingNodeBuilder {
 
     protected ProcessingNode node;
     protected String resourceName;
@@ -42,8 +41,7 @@
     protected String continuationId;
 
     public ProcessingNode buildNode(Configuration config)
-        throws Exception
-    {
+    throws Exception {
         resourceName = config.getAttribute("resource", null);
         functionName = config.getAttribute("function", null);
         continuationId = config.getAttribute("continuation", null);
@@ -60,7 +58,7 @@
                 VariableResolverFactory.getResolver(functionName, 
this.manager),
                 VariableResolverFactory.getResolver(continuationId, 
this.manager)
             );
-            
+
         } else {
             // Building a Call(Resource)Node
             if (functionName != null || continuationId != null) {
@@ -73,7 +71,7 @@
         }
 
         this.treeBuilder.setupNode(this.node, config);
-        if (node instanceof Configurable) 
+        if (node instanceof Configurable)
             ((Configurable)this.node).configure(config);
 
         return this.node;

Modified: cocoon/branches/BRANCH_2_1_X/src/test/anteater/redirect.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/test/anteater/redirect.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/src/test/anteater/redirect.xml Tue Oct 19 
08:26:10 2004
@@ -62,7 +62,7 @@
     
     <httpRequest href="${redirect-test}/donothing-from-flow">
       <match>
-        <responseCode value="404"/>
+        <responseCode value="500"/>
       </match>
     </httpRequest>
     

Modified: cocoon/branches/BRANCH_2_1_X/status.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml     (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml     Tue Oct 19 08:26:10 2004
@@ -205,6 +205,10 @@
 
   <changes>
  <release version="@version@" date="@date@">
+   <action dev="VG" type="update">
+     Flow invocations (function calls or continuation invocations) should 
always
+     result in a response. Flowscripts with no response are prohibited.
+   </action>
    <action dev="CZ" type="add" due-to="Juergen Seitz" due-to-email="[EMAIL 
PROTECTED]">
      Portal block: Apply batch for configuring the type handling in the Castor 
converter.
    </action>
@@ -223,9 +227,9 @@
    <action dev="TC" type="fix" fixes-bug="31545">
     Throw a more meaningful exception if charset classes are missing
    </action>
-    <action dev="TC" type="fix" fixes-bug="30874">
+   <action dev="TC" type="fix" fixes-bug="30874">
      Fixes the SQLTransformer not to close the statement twice
-    </action>
+   </action>
    <action dev="TC" type="fix" fixes-bug="30994">
      Change constructor to be public in order to fix bug 30270
    </action>

Reply via email to