Index: src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java,v retrieving revision 1.11 diff -u -3 -r1.11 AbstractInterpreter.java --- src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java 31 Jan 2003 22:51:24 -0000 1.11 +++ src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java 26 Feb 2003 02:07:13 -0000 @@ -57,10 +57,14 @@ import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.thread.SingleThreaded; import org.apache.cocoon.Constants; +import org.apache.cocoon.Processor; +import org.apache.cocoon.components.CocoonComponentManager; import org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode; import org.apache.cocoon.environment.Context; import org.apache.cocoon.environment.Environment; +import org.apache.cocoon.environment.wrapper.EnvironmentWrapper; +import java.io.OutputStream; import java.util.ArrayList; /** @@ -155,6 +159,40 @@ synchronized(this) { needResolve.add(source); } + } + + public boolean subRequest(String uri, OutputStream out, Environment environment) + throws Exception { + boolean result = false; + if (out == null) return result; + + Processor processor = null; + try { + processor = (Processor)this.manager.lookup(Processor.ROLE); + EnvironmentWrapper wrapper = new EnvironmentWrapper(environment, uri, "", getLogger()); + wrapper.setURI("",uri); + wrapper.setOutputStream(out); + + Object key = CocoonComponentManager.startProcessing(wrapper); + CocoonComponentManager.enterEnvironment(wrapper, wrapper.getObjectModel(), processor); + + result = processor.process(wrapper); + + wrapper.commitResponse(); + + CocoonComponentManager.leaveEnvironment(); + CocoonComponentManager.endProcessing(wrapper, key); + + } catch (Exception e) { + System.out.println("Got an exception processing: " + uri); + e.printStackTrace(); + System.out.println("------------------------"); + throw(e); + } finally { + this.manager.release(processor); + } + out.flush(); + return(result); } public void forwardTo(String uri, Object bizData, Index: src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java,v retrieving revision 1.16 diff -u -3 -r1.16 JSCocoon.java --- src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java 23 Feb 2003 19:26:57 -0000 1.16 +++ src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java 26 Feb 2003 02:07:13 -0000 @@ -229,6 +229,13 @@ interpreter.forwardTo(uri, bizData, kont, environment); } + public boolean jsFunction_subRequest(String uri, Object out) + throws Exception + { + Object xout = ((org.mozilla.javascript.NativeJavaObject)out).unwrap(); + return interpreter.subRequest(uri, (java.io.OutputStream)xout, environment); + } + /** Set the Scope object in the session object of the current user. This effectively means that at the next invocation from the