Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 10975 invoked by uid 500); 4 Aug 2002 04:11:55 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 10966 invoked by uid 500); 4 Aug 2002 04:11:55 -0000 Delivered-To: apmail-xml-cocoon2-cvs@apache.org Date: 4 Aug 2002 04:11:53 -0000 Message-ID: <20020804041153.9018.qmail@icarus.apache.org> From: vgritsenko@apache.org To: xml-cocoon2-cvs@apache.org Subject: cvs commit: xml-cocoon2/src/java/org/apache/cocoon/sitemap Handler.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N vgritsenko 2002/08/03 21:11:53 Modified: . Tag: cocoon_2_0_3_branch changes.xml src/java/org/apache/cocoon/components Tag: cocoon_2_0_3_branch CocoonComponentManager.java src/java/org/apache/cocoon/components/source Tag: cocoon_2_0_3_branch CocoonSourceFactory.java SitemapSource.java src/java/org/apache/cocoon/components/treeprocessor Tag: cocoon_2_0_3_branch TreeProcessor.java src/java/org/apache/cocoon/environment Tag: cocoon_2_0_3_branch AbstractEnvironment.java Environment.java src/java/org/apache/cocoon/environment/wrapper Tag: cocoon_2_0_3_branch EnvironmentWrapper.java src/java/org/apache/cocoon/sitemap Tag: cocoon_2_0_3_branch Handler.java Log: Fixed bug in cocoon pseudo protocol involving aggregation of aggregated resources spanning several sitemaps. Fix partially backported from 2.1 Revision Changes Path No revision No revision 1.138.2.43 +9 -4 xml-cocoon2/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/changes.xml,v retrieving revision 1.138.2.42 retrieving revision 1.138.2.43 diff -u -r1.138.2.42 -r1.138.2.43 --- changes.xml 3 Aug 2002 16:44:13 -0000 1.138.2.42 +++ changes.xml 4 Aug 2002 04:11:51 -0000 1.138.2.43 @@ -39,6 +39,10 @@ + + Fixed bug in cocoon pseudo protocol involving aggregation of aggregated + resources spanning several sitemaps. + Conect to the XML:DB once, from the XMLDBSourceFactory. @@ -91,7 +95,7 @@ When building Cocoon it is required to set the targetted JVM (either 1.3 (means 1.3 or lower) or 1.4. - Fix NullPointerException in Notifier. + Fixed NullPointerException in Notifier. Multiple results seem not to be supported by some DBMSs (i.e. Oracle and @@ -109,10 +113,11 @@ returning an error. - Fix sitemap compilation error when matchers are used within view or resource. + Fixed sitemap compilation error when matchers are used within view or + resource. - Fix sitemap compilation error when actions are used within view. + Fixed sitemap compilation error when actions are used within view. TraxTransformer and XSLTProcessor components now correctly handle No revision No revision 1.13.2.3 +31 -7 xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java Index: CocoonComponentManager.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java,v retrieving revision 1.13.2.2 retrieving revision 1.13.2.3 diff -u -r1.13.2.2 -r1.13.2.3 --- CocoonComponentManager.java 7 Jun 2002 10:22:42 -0000 1.13.2.2 +++ CocoonComponentManager.java 4 Aug 2002 04:11:52 -0000 1.13.2.3 @@ -61,6 +61,7 @@ import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.Recomposable; import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.Processor; import org.apache.cocoon.environment.Environment; import java.net.MalformedURLException; @@ -110,19 +111,21 @@ /** * This hook must be called by the sitemap each time a sitemap is entered */ - public static void enterEnvironment(Environment env, Map objectModel) { + public static void enterEnvironment(Environment env, + Map objectModel, + Processor processor) { if (environmentStack.get() == null) { environmentStack.set(new Stack()); } final Stack stack = (Stack)environmentStack.get(); - if ( !stack.empty() ) { + if (!stack.empty() ) { final Object[] objects = (Object[])stack.peek(); if ( objects[1] == objectModel ) { - stack.push(new Object[] {env, objectModel, objects[2], TWO}); + stack.push(new Object[] {env, objectModel, objects[2], TWO, processor}); return; } } - stack.push(new Object[] {env, objectModel, new HashMap(5), ONE}); + stack.push(new Object[] {env, objectModel, new HashMap(5), ONE, processor}); } /** @@ -130,7 +133,7 @@ */ public static void leaveEnvironment() { final Stack stack = (Stack)environmentStack.get(); - if ( null != stack && !stack.empty()) { + if (null != stack && !stack.empty()) { final Object[] objects = (Object[])stack.pop(); if (objects[3] == ONE) { final Map components = (Map)objects[2]; @@ -145,6 +148,28 @@ } /** + * Return the current environment object (for the cocoon: protocol) + */ + public static Environment getCurrentEnvironment() { + final Stack stack = (Stack)environmentStack.get(); + if (null != stack && !stack.empty()) { + return (Environment) ((Object[])stack.peek())[0]; + } + return null; + } + + /** + * Return the current processor object (for the cocoon: protocol) + */ + public static Processor getCurrentProcessor() { + final Stack stack = (Stack)environmentStack.get(); + if (null != stack && !stack.empty()) { + return (Processor) ((Object[])stack.peek())[4]; + } + return null; + } + + /** * Return an instance of a component based on a Role. The Role is usually the Interface's * Fully Qualified Name(FQN)--unless there are multiple Components for the same Role. In that * case, the Role's FQN is appended with "Selector", and we return a ComponentSelector. @@ -209,5 +234,4 @@ protected void releaseRLComponent( final Component component ) { super.release( component ); } - } No revision No revision 1.4.2.1 +3 -10 xml-cocoon2/src/java/org/apache/cocoon/components/source/CocoonSourceFactory.java Index: CocoonSourceFactory.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/CocoonSourceFactory.java,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -u -r1.4 -r1.4.2.1 --- CocoonSourceFactory.java 22 Feb 2002 07:00:13 -0000 1.4 +++ CocoonSourceFactory.java 4 Aug 2002 04:11:52 -0000 1.4.2.1 @@ -56,6 +56,7 @@ import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.Source; import org.apache.cocoon.Processor; +import org.apache.cocoon.components.CocoonComponentManager; import java.io.IOException; import java.net.MalformedURLException; @@ -74,15 +75,11 @@ extends AbstractLoggable implements SourceFactory { - /** The processor */ - private Processor processor; - /** The component manager */ private ComponentManager manager; public CocoonSourceFactory(Processor processor, ComponentManager manager) { - this.processor = processor; this.manager = manager; } @@ -91,11 +88,7 @@ */ public Source getSource(Environment environment, String location) throws ProcessingException, IOException, MalformedURLException { - if (environment == null) - throw new ProcessingException("CocoonSourceFactory: environment is required."); - return new SitemapSource(environment, - this.manager, - this.processor, + return new SitemapSource(this.manager, location, this.getLogger()); } 1.9.2.3 +31 -19 xml-cocoon2/src/java/org/apache/cocoon/components/source/SitemapSource.java Index: SitemapSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/SitemapSource.java,v retrieving revision 1.9.2.2 retrieving revision 1.9.2.3 diff -u -r1.9.2.2 -r1.9.2.3 --- SitemapSource.java 19 Apr 2002 23:48:41 -0000 1.9.2.2 +++ SitemapSource.java 4 Aug 2002 04:11:52 -0000 1.9.2.3 @@ -52,8 +52,6 @@ import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.ComponentSelector; -import org.apache.cocoon.Constants; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.Processor; import org.apache.cocoon.caching.PipelineCacheKey; @@ -63,10 +61,8 @@ import org.apache.cocoon.components.pipeline.StreamPipeline; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.ModifiableSource; -import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Source; import org.apache.cocoon.environment.wrapper.EnvironmentWrapper; -import org.apache.cocoon.serialization.Serializer; import org.apache.cocoon.util.HashUtil; import org.apache.cocoon.xml.AbstractXMLConsumer; import org.apache.cocoon.xml.ContentHandlerWrapper; @@ -82,8 +78,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.util.Map; +import java.net.MalformedURLException; /** * Description of a source which is defined by a pipeline. @@ -111,6 +107,8 @@ /** The processor */ private Processor processor; + private Processor pipelineProcessor; + /** The environment */ private EnvironmentWrapper environment; @@ -135,13 +133,16 @@ /** * Construct a new object */ - public SitemapSource(Environment env, - ComponentManager manager, - Processor sitemap, + public SitemapSource(ComponentManager manager, String uri, Logger logger) throws IOException, ProcessingException { + Environment env = CocoonComponentManager.getCurrentEnvironment(); + if (env == null) { + throw new MalformedURLException("The cocoon protocol can not be used outside an environment."); + } + this.manager = manager; this.setLogger(logger); boolean rawMode = false; @@ -159,18 +160,18 @@ // does the uri point to this sitemap or to the root sitemap? if (uri.startsWith("//", position)) { position += 2; - Processor processor = null; try { - processor = (Processor)this.manager.lookup(Processor.ROLE); + this.processor = (Processor)this.manager.lookup(Processor.ROLE); } catch (ComponentException e) { throw new ProcessingException("Cannot get Processor instance", e); } this.prefix = ""; // start at the root - this.processor = processor; } else if (uri.startsWith("/", position)) { position ++; this.prefix = null; - this.processor = sitemap; + // BUG#9288: Get proper processor, passed either by processor + // or other cocoon source + this.processor = CocoonComponentManager.getCurrentProcessor(); } else { throw new ProcessingException("Malformed cocoon URI."); } @@ -240,7 +241,6 @@ this.environment.setOutputStream(os); this.pipeline.process(this.environment); return new ByteArrayInputStream(os.toByteArray()); - } catch (ProcessingException e) { throw e; } catch (Exception e) { @@ -276,11 +276,19 @@ this.environment.setURI(this.prefix, this.uri); this.processor.process(this.environment, pipeline, eventPipeline); - this.environment.changeToLastContext(); - String redirectURL = this.environment.getRedirectURL(); + // BUG#9288: Get processor which was used to build this pipeline + this.pipelineProcessor = this.environment.changeToLastContext(); + String redirectURL = this.environment.getRedirectURL(); + try { + // BUG#9288: Set proper processor before setting up the pipeline + // (will be needed if pipeline has CocoonSource, see ) + CocoonComponentManager.enterEnvironment(this.environment, + this.environment.getObjectModel(), + this.pipelineProcessor); if (redirectURL == null) { if (this.eventPipeline.getGenerator() != null && - this.eventPipeline instanceof CacheableEventPipeline) { + this.eventPipeline instanceof CacheableEventPipeline) + { CacheableEventPipeline cep = (CacheableEventPipeline)this.eventPipeline; PipelineCacheKey pck = cep.generateKey(this.environment); Map validity = null; @@ -294,13 +302,16 @@ } } } - } else { + } else { if (redirectURL.indexOf(":") == -1) { redirectURL = "cocoon:/" + redirectURL; } this.redirectSource = this.environment.resolve(redirectURL); this.lastModificationDate = this.redirectSource.getLastModified(); } + } finally { + CocoonComponentManager.leaveEnvironment(); + } } catch (ProcessingException e) { reset(); this.exception = e; @@ -348,7 +359,8 @@ } else { try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel()); + this.environment.getObjectModel(), + this.pipelineProcessor); ((XMLProducer)eventPipeline).setConsumer(consumer); eventPipeline.process(this.environment); } finally { No revision No revision 1.4.2.3 +9 -5 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Index: TreeProcessor.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java,v retrieving revision 1.4.2.2 retrieving revision 1.4.2.3 diff -u -r1.4.2.2 -r1.4.2.3 --- TreeProcessor.java 9 Jun 2002 00:23:26 -0000 1.4.2.2 +++ TreeProcessor.java 4 Aug 2002 04:11:52 -0000 1.4.2.3 @@ -299,11 +299,13 @@ public boolean process(Environment environment, StreamPipeline pipeline, EventPipeline eventPipeline) throws Exception { InvokeContext context = new InvokeContext(pipeline, eventPipeline); - context.setLogger(getLogger()); SourceHandler oldSourceHandler = environment.getSourceHandler(); - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel()); + CocoonComponentManager.enterEnvironment(environment, + environment.getObjectModel(), + this); + environment.setComponentManager(this.manager); try { environment.setSourceHandler(this.sourceHandler); return process(environment, context); @@ -318,8 +320,10 @@ throws Exception { SourceHandler oldSourceHandler = environment.getSourceHandler(); - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel()); - + CocoonComponentManager.enterEnvironment(environment, + environment.getObjectModel(), + this); + environment.setComponentManager(this.manager); try { environment.setSourceHandler(this.sourceHandler); if (this.rootNode == null || this.source.getLastModified() > this.lastModified) { No revision No revision 1.12.2.5 +21 -1 xml-cocoon2/src/java/org/apache/cocoon/environment/AbstractEnvironment.java Index: AbstractEnvironment.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/AbstractEnvironment.java,v retrieving revision 1.12.2.4 retrieving revision 1.12.2.5 diff -u -r1.12.2.4 -r1.12.2.5 --- AbstractEnvironment.java 15 Jul 2002 14:42:49 -0000 1.12.2.4 +++ AbstractEnvironment.java 4 Aug 2002 04:11:52 -0000 1.12.2.5 @@ -52,6 +52,7 @@ import org.apache.avalon.excalibur.collections.IteratorEnumeration; import org.apache.avalon.framework.component.ComponentException; +import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.source.SourceHandler; @@ -100,6 +101,25 @@ /** The attributes */ private Map attributes = new HashMap(); + + /** The current manager */ + protected ComponentManager manager = null; + + /** + * The sitemap processor sets up new managers per sitemap. Get the + * "current" one for this environment. + */ + public ComponentManager getComponentManager(){ + return this.manager; + } + + /** + * The sitemap sets up new managers per sitemap. Set the + * "current" one for this environment. + */ + public void setComponentManager(ComponentManager manager){ + this.manager = manager; + } /** * Constructs the abstract environment 1.6.2.3 +8 -1 xml-cocoon2/src/java/org/apache/cocoon/environment/Environment.java Index: Environment.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/Environment.java,v retrieving revision 1.6.2.2 retrieving revision 1.6.2.3 diff -u -r1.6.2.2 -r1.6.2.3 --- Environment.java 15 Jul 2002 14:42:49 -0000 1.6.2.2 +++ Environment.java 4 Aug 2002 04:11:52 -0000 1.6.2.3 @@ -50,6 +50,8 @@ */ package org.apache.cocoon.environment; +import org.apache.avalon.framework.component.ComponentManager; + import org.apache.cocoon.components.source.SourceHandler; import java.io.IOException; @@ -163,6 +165,11 @@ * environment is not able to test it */ boolean isResponseModified(long lastModified); + + /** + * Set the ComponentManager for the current request. + */ + void setComponentManager(ComponentManager manager); /** * Mark the response as not modified. No revision No revision 1.11.2.2 +29 -9 xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java Index: EnvironmentWrapper.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java,v retrieving revision 1.11.2.1 retrieving revision 1.11.2.2 diff -u -r1.11.2.1 -r1.11.2.2 --- EnvironmentWrapper.java 21 Apr 2002 17:36:05 -0000 1.11.2.1 +++ EnvironmentWrapper.java 4 Aug 2002 04:11:53 -0000 1.11.2.2 @@ -50,10 +50,15 @@ */ package org.apache.cocoon.environment.wrapper; +import org.apache.avalon.framework.component.ComponentManager; + import org.apache.cocoon.environment.AbstractEnvironment; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.Request; +import org.apache.cocoon.Processor; +import org.apache.cocoon.components.CocoonComponentManager; + import org.apache.log.Logger; import java.io.IOException; @@ -99,6 +104,9 @@ /** The stream to output to */ private OutputStream outputStream; + /** The processor used */ + private Processor processor; + /** * Constructs an EnvironmentWrapper object from a Request * and Response objects @@ -144,7 +152,6 @@ this, rawMode); this.objectModel.put(ObjectModelHelper.REQUEST_OBJECT, this.request); - this.objectModel.put("Internal-Request", "true"); } @@ -167,12 +174,23 @@ */ public void globalRedirect(boolean sessionmode, String newURL) throws IOException { - if (environment instanceof EnvironmentWrapper) { - ((EnvironmentWrapper)environment).globalRedirect(sessionmode, newURL); - } - else { - environment.redirect(sessionmode,newURL); - } + if (environment instanceof EnvironmentWrapper) { + ((EnvironmentWrapper)environment).globalRedirect(sessionmode, newURL); + } else { + environment.redirect(sessionmode,newURL); + } + } + + /** + * The sitemap processor sets up new managers per sitemap. Set the + * "current" one for this environment. + */ + public void setComponentManager(ComponentManager manager) { + super.setComponentManager( manager ); + // HACK: As processing enters sitemap, capture current processor. + // If pipeline is successfully assembled, this will contain proper processor. + // Used by cocoon protocol. + this.processor = CocoonComponentManager.getCurrentProcessor(); } /** @@ -266,11 +284,13 @@ /** * Change the current context to the last one set by changeContext() + * and return last processor. */ - public void changeToLastContext() { + public Processor changeToLastContext() { this.setContext(this.lastContext); this.setURIPrefix(this.lastPrefix); this.uris = this.lastURI; + return this.processor; } /** No revision No revision 1.14.2.2 +13 -5 xml-cocoon2/src/java/org/apache/cocoon/sitemap/Attic/Handler.java Index: Handler.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/Attic/Handler.java,v retrieving revision 1.14.2.1 retrieving revision 1.14.2.2 diff -u -r1.14.2.1 -r1.14.2.2 --- Handler.java 7 Jun 2002 09:34:24 -0000 1.14.2.1 +++ Handler.java 4 Aug 2002 04:11:53 -0000 1.14.2.2 @@ -218,7 +218,10 @@ public boolean process(Environment environment) throws Exception { checkSanity(); SourceHandler oldSourceHandler = environment.getSourceHandler(); - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel()); + CocoonComponentManager.enterEnvironment(environment, + environment.getObjectModel(), + this); + environment.setComponentManager(this.manager); try { environment.setSourceHandler(this.sourceHandler); return sitemap.process(environment); @@ -228,11 +231,16 @@ } } - public boolean process(Environment environment, StreamPipeline pipeline, - EventPipeline eventPipeline) throws Exception { + public boolean process(Environment environment, + StreamPipeline pipeline, + EventPipeline eventPipeline) throws Exception + { checkSanity(); SourceHandler oldSourceHandler = environment.getSourceHandler(); - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel()); + CocoonComponentManager.enterEnvironment(environment, + environment.getObjectModel(), + this); + environment.setComponentManager(this.manager); try { environment.setSourceHandler(this.sourceHandler); return sitemap.process(environment, pipeline, eventPipeline); ---------------------------------------------------------------------- In case of troubles, e-mail: webmaster@xml.apache.org To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org For additional commands, e-mail: cocoon-cvs-help@xml.apache.org