You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2003/10/08 22:18:34 UTC

cvs commit: cocoon-2.1/src/deprecated/java/org/apache/cocoon/components/source SitemapSource.java

cziegeler    2003/10/08 13:18:34

  Modified:    src/java/org/apache/cocoon/components EnvironmentStack.java
                        CocoonComponentManager.java
               src/java/org/apache/cocoon Cocoon.java
               src/java/org/apache/cocoon/components/source/impl
                        SitemapSource.java
               src/java/org/apache/cocoon/components/flow
                        AbstractInterpreter.java
               src/deprecated/java/org/apache/cocoon/components/source
                        SitemapSource.java
  Log:
  Cleaned up internal environment handling
  by reducing the dependencies.
  Fixed (hopefully) the detection of the correct
  environment to use when internal pipelines
  are called
  
  Revision  Changes    Path
  1.2       +169 -17   cocoon-2.1/src/java/org/apache/cocoon/components/EnvironmentStack.java
  
  Index: EnvironmentStack.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/EnvironmentStack.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EnvironmentStack.java	9 Mar 2003 00:08:46 -0000	1.1
  +++ EnvironmentStack.java	8 Oct 2003 20:18:34 -0000	1.2
  @@ -50,7 +50,11 @@
   */
   package org.apache.cocoon.components;
   
  +import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.commons.collections.ArrayStack;
  +import org.xml.sax.Attributes;
  +import org.xml.sax.Locator;
  +import org.xml.sax.SAXException;
   
   /**
    * The stack for the processing environment.
  @@ -60,36 +64,184 @@
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
    * @version CVS $Id$
    */
  -public final class EnvironmentStack 
  +final class EnvironmentStack 
       extends ArrayStack 
       implements Cloneable {
       
       int offset;
       
  -    public Object getCurrent() {
  -        return this.peek(this.offset);
  +    Object getCurrent() {
  +        return this.get(offset);
  +        //return this.peek(this.offset);
       }
       
  -    public void incOffset() {
  -        this.offset++;
  -    }
  -    
  -    public void decOffset() {
  -        this.offset--;
  -    }
  -    
  -    public void resetOffset(int value) {
  -        this.offset = value;
  -    }
  -    
  -    public int getOffset() {
  +    int getOffset() {
           return this.offset;
       }
  +  
  +    void setOffset(int value) {
  +        this.offset = value;  
  +    }
       
       public Object clone() {
           EnvironmentStack old = (EnvironmentStack) super.clone();
           old.offset = offset;
           return old;
       }
  +    
  +    XMLConsumer getEnvironmentAwareConsumerWrapper(XMLConsumer consumer, 
  +                                                   int oldOffset) {
  +        return new EnvironmentChanger(consumer, this, oldOffset, this.offset);
  +    }
   }
   
  +/**
  + * This class is an {@link XMLConsumer} that changes the current environment.
  + * When a pipeline calls an internal pipeline, two environments are
  + * established: one for the calling pipeline and one for the internal pipeline.
  + * Now, if SAX events are send from the internal pipeline, they are
  + * received by some component of the calling pipeline, so inbetween we
  + * have to change the environment forth and back.
  + */
  +final class EnvironmentChanger
  +implements XMLConsumer {
  +
  +    final XMLConsumer consumer;
  +    final EnvironmentStack stack;
  +    final int oldOffset;
  +    final int newOffset;
  +    
  +    EnvironmentChanger(XMLConsumer consumer, EnvironmentStack es,
  +                       int oldOffset, int newOffset) {
  +        this.consumer = consumer;
  +        this.stack = es;
  +        this.oldOffset = oldOffset;
  +        this.newOffset = newOffset;
  +    }
  +    
  +    public void setDocumentLocator(Locator locator) {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.setDocumentLocator(locator);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startDocument()
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startDocument();
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void endDocument()
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endDocument();
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startPrefixMapping(String prefix, String uri)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startPrefixMapping(prefix, uri);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void endPrefixMapping(String prefix)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endPrefixMapping(prefix);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startElement(String uri, String loc, String raw, Attributes a)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startElement(uri, loc, raw, a);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +
  +    public void endElement(String uri, String loc, String raw)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endElement(uri, loc, raw);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +    
  +    public void characters(char c[], int start, int len)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.characters(c, start, len);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void ignorableWhitespace(char c[], int start, int len)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.ignorableWhitespace(c, start, len);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void processingInstruction(String target, String data)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.processingInstruction(target, data);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void skippedEntity(String name)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.skippedEntity(name);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startDTD(String name, String publicId, String systemId)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startDTD(name, publicId, systemId);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void endDTD()
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endDTD();
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startEntity(String name)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startEntity(name);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void endEntity(String name)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endEntity(name);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void startCDATA()
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.startCDATA();
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void endCDATA()
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.endCDATA();
  +        this.stack.setOffset(this.newOffset);
  +    }
  +
  +    public void comment(char ch[], int start, int len)
  +    throws SAXException {
  +        this.stack.setOffset(this.oldOffset);
  +        this.consumer.comment(ch, start, len);
  +        this.stack.setOffset(this.newOffset);
  +    }
  +}
  
  
  
  1.17      +33 -16    cocoon-2.1/src/java/org/apache/cocoon/components/CocoonComponentManager.java
  
  Index: CocoonComponentManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/CocoonComponentManager.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- CocoonComponentManager.java	4 Aug 2003 03:19:22 -0000	1.16
  +++ CocoonComponentManager.java	8 Oct 2003 20:18:34 -0000	1.17
  @@ -67,9 +67,11 @@
   import org.apache.avalon.framework.component.Recomposable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.logger.Logger;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.Processor;
   import org.apache.cocoon.environment.Environment;
  +import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceException;
   import org.apache.excalibur.source.SourceResolver;
  @@ -143,27 +145,31 @@
        * parameters are not set!
        */
       public static void enterEnvironment(Environment      env,
  -                                          ComponentManager manager,
  -                                          Processor        processor) {
  +                                        ComponentManager manager,
  +                                        Processor        processor) {
           if ( null == env || null == manager || null == processor) {                                       	
               throw new RuntimeException("CocoonComponentManager.enterEnvironment: all parameters must be set: " + env + " - " + manager + " - " + processor);
           }
           
  -		if (environmentStack.get() == null) {
  -			environmentStack.set(new EnvironmentStack());
  +        EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
  +		if (stack == null) {
  +            stack = new EnvironmentStack();
  +			environmentStack.set(stack);
   		}
  -		final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
  -		stack.push(new Object[] {env, processor, manager});
  -    
  +		stack.push(new Object[] {env, processor, manager, new Integer(stack.getOffset())});
  +        stack.setOffset(stack.size()-1);
  +        
           env.setAttribute("CocoonComponentManager.processor", processor);
       }
   
       /**
  -     * This hook must be called by the sitemap each time a sitemap is left
  +     * This hook must be called by the sitemap each time a sitemap is left.
  +     * It's the counterpart to {@link #enterEnvironment(Environment, ComponentManager, Processor)}.
        */
       public static void leaveEnvironment() {
           final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
           final Object[] objs = (Object[])stack.pop();
  +        stack.setOffset(((Integer)objs[3]).intValue());
           if ( stack.isEmpty() ) {
               final Environment env = (Environment)objs[0];
               final Map globalComponents = (Map)env.getAttribute(GlobalRequestLifecycleComponent.class.getName());
  @@ -177,10 +183,28 @@
                   }
               }
               env.removeAttribute(GlobalRequestLifecycleComponent.class.getName());
  +        } 
  +    }
  +    
  +    public static void checkEnvironment(Logger logger) {
  +        // TODO (CZ): This is only for testing - remove it later on
  +        final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
  +        if (stack != null && !stack.isEmpty() ) {
  +            logger.error("ENVIRONMENT STACK HAS NOT BEEN CLEANED PROPERLY");        
           }
       }
   
       /**
  +     * Create an environment aware xml consumer for the cocoon
  +     * protocol
  +     */
  +    public static XMLConsumer createEnvironmentAwareConsumer(XMLConsumer consumer) {
  +        final EnvironmentStack stack = (EnvironmentStack)environmentStack.get();
  +        final Object[] objs = (Object[])stack.getCurrent();
  +        return stack.getEnvironmentAwareConsumerWrapper(consumer, ((Integer)objs[3]).intValue());
  +    }
  +    
  +    /**
        * This hook has to be called before a request is processed.
        * The hook is called by the Cocoon component and by the
        * cocoon protocol implementation.
  @@ -233,13 +257,6 @@
               return (Processor) ((Object[])stack.getCurrent())[1];
           }
           return null;
  -    }
  -
  -    /**
  -     * Return the current environment stack (for the cocoon: protocol)
  -     */
  -    public static EnvironmentStack getCurrentEnvironmentStack() {
  -        return (EnvironmentStack)environmentStack.get();
       }
   
       /**
  
  
  
  1.17      +6 -9      cocoon-2.1/src/java/org/apache/cocoon/Cocoon.java
  
  Index: Cocoon.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/Cocoon.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Cocoon.java	6 Oct 2003 15:59:52 -0000	1.16
  +++ Cocoon.java	8 Oct 2003 20:18:34 -0000	1.17
  @@ -83,7 +83,6 @@
   
   import org.apache.cocoon.components.CocoonComponentManager;
   import org.apache.cocoon.components.ComponentContext;
  -import org.apache.cocoon.components.EnvironmentStack;
   import org.apache.cocoon.components.language.generator.CompiledComponent;
   import org.apache.cocoon.components.language.generator.ProgramGenerator;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
  @@ -626,10 +625,10 @@
           }
   
           Object key = CocoonComponentManager.startProcessing(environment);
  +        CocoonComponentManager.enterEnvironment(environment,
  +                                                this.componentManager,
  +                                                this);
           try {
  -            CocoonComponentManager.enterEnvironment(environment,
  -                                                    this.componentManager,
  -                                                    this);
               boolean result;
               if (this.getLogger().isDebugEnabled()) {
                   ++activeRequestCount;
  @@ -661,11 +660,9 @@
               if (this.getLogger().isDebugEnabled()) {
                   --activeRequestCount;
               }
  +            
               // TODO (CZ): This is only for testing - remove it later on
  -            EnvironmentStack stack = CocoonComponentManager.getCurrentEnvironmentStack();
  -            if (stack != null && !stack.isEmpty() ) {
  -                this.getLogger().error("ENVIRONMENT STACK HAS NOT BEEN CLEANED PROPERLY");        
  -            }
  +            CocoonComponentManager.checkEnvironment(this.getLogger());
           }
       }
   
  
  
  
  1.12      +23 -184   cocoon-2.1/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
  
  Index: SitemapSource.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SitemapSource.java	8 Oct 2003 10:33:01 -0000	1.11
  +++ SitemapSource.java	8 Oct 2003 20:18:34 -0000	1.12
  @@ -50,6 +50,14 @@
   */
   package org.apache.cocoon.components.source.impl;
   
  +import java.io.ByteArrayInputStream;
  +import java.io.ByteArrayOutputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.net.MalformedURLException;
  +import java.util.Iterator;
  +import java.util.Map;
  +
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  @@ -58,13 +66,12 @@
   import org.apache.cocoon.Processor;
   import org.apache.cocoon.ResourceNotFoundException;
   import org.apache.cocoon.components.CocoonComponentManager;
  -import org.apache.cocoon.components.EnvironmentStack;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
   import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.ObjectModelHelper;
  -import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
   import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
  +import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
   import org.apache.cocoon.xml.ContentHandlerWrapper;
   import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.excalibur.source.Source;
  @@ -72,20 +79,10 @@
   import org.apache.excalibur.source.SourceNotFoundException;
   import org.apache.excalibur.source.SourceValidity;
   import org.apache.excalibur.xml.sax.XMLizable;
  -import org.xml.sax.Attributes;
   import org.xml.sax.ContentHandler;
  -import org.xml.sax.Locator;
   import org.xml.sax.SAXException;
   import org.xml.sax.ext.LexicalHandler;
   
  -import java.io.ByteArrayInputStream;
  -import java.io.ByteArrayOutputStream;
  -import java.io.IOException;
  -import java.io.InputStream;
  -import java.net.MalformedURLException;
  -import java.util.Iterator;
  -import java.util.Map;
  -
   /**
    * Implementation of a {@link Source} that gets its content
    * by invoking a pipeline.
  @@ -304,17 +301,14 @@
           try {
               ByteArrayOutputStream os = new ByteArrayOutputStream();
               this.environment.setOutputStream(os);
  -            EnvironmentStack envStack = CocoonComponentManager.getCurrentEnvironmentStack();
  -            int currentOffset = envStack.getOffset();
  +            CocoonComponentManager.enterEnvironment(this.environment,
  +                                                    this.manager,
  +                                                    this.pipelineProcessor);
               try {
  -                CocoonComponentManager.enterEnvironment(this.environment,
  -                                                        this.manager,
  -                                                        this.pipelineProcessor);
  -                envStack.resetOffset(0);
  +                
                   this.processingPipeline.process(this.environment);
               } finally {
                   CocoonComponentManager.leaveEnvironment();
  -                envStack.resetOffset(currentOffset);
               }
               return new ByteArrayInputStream(os.toByteArray());
   
  @@ -392,13 +386,10 @@
               String redirectURL = this.environment.getRedirectURL();
               if (redirectURL == null) {
   
  -                EnvironmentStack envStack = CocoonComponentManager.getCurrentEnvironmentStack();
  -                int currentOffset = envStack.getOffset();
  +                CocoonComponentManager.enterEnvironment(this.environment,
  +                                                        this.manager,
  +                                                        this.pipelineProcessor);
                   try {
  -                    CocoonComponentManager.enterEnvironment(this.environment,
  -                                                            this.manager,
  -                                                            this.pipelineProcessor);
  -                    envStack.resetOffset(0);
                       this.processingPipeline.prepareInternal(this.environment);
                       this.sourceValidity = this.processingPipeline.getValidityForEventPipeline();
                       final String eventPipelineKey = this.processingPipeline.getKeyForEventPipeline();
  @@ -417,7 +408,6 @@
                       }
                   } finally {
                       CocoonComponentManager.leaveEnvironment();
  -                    envStack.resetOffset(currentOffset);
                   }
               } else {
                   if (redirectURL.indexOf(":") == -1) {
  @@ -462,18 +452,15 @@
   	                consumer = new ContentHandlerWrapper(contentHandler);
   	            }
                   // We have to add an environment changer
  -                // clean environment stack handling.
  -                EnvironmentStack envStack = CocoonComponentManager.getCurrentEnvironmentStack();
  -                int currentOffset = envStack.getOffset();
  +                // for clean environment stack handling.
  +                CocoonComponentManager.enterEnvironment(this.environment,
  +                                                        this.manager,
  +                                                        this.pipelineProcessor);
                   try {
  -                    CocoonComponentManager.enterEnvironment(this.environment,
  -                                                            this.manager,
  -                                                            this.pipelineProcessor);
  -                    envStack.resetOffset(0);
  -                    this.processingPipeline.process(this.environment, new EnvironmentChanger(consumer, envStack));
  +                    this.processingPipeline.process(this.environment,
  +                                       CocoonComponentManager.createEnvironmentAwareConsumer(consumer)); 
                   } finally {
                       CocoonComponentManager.leaveEnvironment();
  -                    envStack.resetOffset(currentOffset);
                   }
               }
           } catch (SAXException e) {
  @@ -543,151 +530,3 @@
   
   
   }
  -
  -
  -/**
  - * This class is an {@link XMLConsumer} that changes the current environment.
  - * When a pipeline calls an internal pipeline, two environments are
  - * established: one for the calling pipeline and one for the internal pipeline.
  - * Now, if SAX events are send from the internal pipeline, they are
  - * received by some component of the calling pipeline, so inbetween we
  - * have to change the environment forth and back.
  - */
  -final class EnvironmentChanger
  -implements XMLConsumer {
  -
  -    final XMLConsumer consumer;
  -    final EnvironmentStack stack;
  -    
  -    EnvironmentChanger(XMLConsumer consumer, EnvironmentStack es) {
  -        this.consumer = consumer;
  -        this.stack = es;
  -    }
  -    
  -    public void setDocumentLocator(Locator locator) {
  -        this.stack.incOffset();
  -        this.consumer.setDocumentLocator(locator);
  -        this.stack.decOffset();
  -    }
  -
  -    public void startDocument()
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startDocument();
  -        this.stack.decOffset();
  -    }
  -
  -    public void endDocument()
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endDocument();
  -        this.stack.decOffset();
  -    }
  -
  -    public void startPrefixMapping(String prefix, String uri)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startPrefixMapping(prefix, uri);
  -        this.stack.decOffset();
  -    }
  -
  -    public void endPrefixMapping(String prefix)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endPrefixMapping(prefix);
  -        this.stack.decOffset();
  -    }
  -
  -    public void startElement(String uri, String loc, String raw, Attributes a)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startElement(uri, loc, raw, a);
  -        this.stack.decOffset();
  -    }
  -
  -
  -    public void endElement(String uri, String loc, String raw)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endElement(uri, loc, raw);
  -        this.stack.decOffset();
  -    }
  -    
  -    public void characters(char c[], int start, int len)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.characters(c, start, len);
  -        this.stack.decOffset();
  -    }
  -
  -    public void ignorableWhitespace(char c[], int start, int len)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.ignorableWhitespace(c, start, len);
  -        this.stack.decOffset();
  -    }
  -
  -    public void processingInstruction(String target, String data)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.processingInstruction(target, data);
  -        this.stack.decOffset();
  -    }
  -
  -    public void skippedEntity(String name)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.skippedEntity(name);
  -        this.stack.decOffset();
  -    }
  -
  -    public void startDTD(String name, String publicId, String systemId)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startDTD(name, publicId, systemId);
  -        this.stack.decOffset();
  -    }
  -
  -    public void endDTD()
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endDTD();
  -        this.stack.decOffset();
  -    }
  -
  -    public void startEntity(String name)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startEntity(name);
  -        this.stack.decOffset();
  -    }
  -
  -    public void endEntity(String name)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endEntity(name);
  -        this.stack.decOffset();
  -    }
  -
  -    public void startCDATA()
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.startCDATA();
  -        this.stack.decOffset();
  -    }
  -
  -    public void endCDATA()
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.endCDATA();
  -        this.stack.decOffset();
  -    }
  -
  -    public void comment(char ch[], int start, int len)
  -    throws SAXException {
  -        this.stack.incOffset();
  -        this.consumer.comment(ch, start, len);
  -        this.stack.decOffset();
  -    }
  -}
  -
  
  
  
  1.9       +8 -4      cocoon-2.1/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java
  
  Index: AbstractInterpreter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AbstractInterpreter.java	2 Sep 2003 16:29:09 -0000	1.8
  +++ AbstractInterpreter.java	8 Oct 2003 20:18:34 -0000	1.9
  @@ -202,10 +202,10 @@
           try {
               // Retrieve a processor instance
               processor = (Processor)this.manager.lookup(Processor.ROLE);
  -
  +            
               // Enter the environment
               CocoonComponentManager.enterEnvironment(wrapper, this.manager, processor);
  -
  +            
               // Process the subrequest
               result = processor.process(wrapper);
               wrapper.commitResponse();
  @@ -217,7 +217,11 @@
               throw(any);
           } finally {
               // Leave the environment, terminate processing and release processor
  -            CocoonComponentManager.leaveEnvironment();
  +            if ( processor != null ) {
  +                // enterEnvironemnt has only been called if the
  +                // processor has been looked up
  +                CocoonComponentManager.leaveEnvironment();
  +            }
               CocoonComponentManager.endProcessing(wrapper, key);
               this.manager.release(processor);
           }
  
  
  
  1.5       +7 -7      cocoon-2.1/src/deprecated/java/org/apache/cocoon/components/source/SitemapSource.java
  
  Index: SitemapSource.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/deprecated/java/org/apache/cocoon/components/source/SitemapSource.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SitemapSource.java	6 Jul 2003 11:48:48 -0000	1.4
  +++ SitemapSource.java	8 Oct 2003 20:18:34 -0000	1.5
  @@ -240,10 +240,10 @@
           try {
               ByteArrayOutputStream os = new ByteArrayOutputStream();
               this.environment.setOutputStream(os);
  +            CocoonComponentManager.enterEnvironment(this.environment,
  +                                                    this.manager,
  +                                                    this.pipelineProcessor);
               try {
  -                CocoonComponentManager.enterEnvironment(this.environment,
  -                                                        this.manager,
  -                                                        this.pipelineProcessor);
                   this.processingPipeline.process(this.environment);
               } finally {
                   CocoonComponentManager.leaveEnvironment();
  @@ -337,10 +337,10 @@
                   // clean environment stack handling.
                   XMLSerializer xmls = (XMLSerializer) this.manager.lookup(XMLSerializer.ROLE);
                   Object fragment;
  +                CocoonComponentManager.enterEnvironment(this.environment,
  +                                                        this.manager,
  +                                                        this.pipelineProcessor);
                   try {
  -                    CocoonComponentManager.enterEnvironment(this.environment,
  -                                                            this.manager,
  -                                                            this.pipelineProcessor);
                       this.processingPipeline.process(this.environment, xmls);
                       fragment = xmls.getSAXFragment();
                   } finally {