You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/10/05 09:50:41 UTC

svn commit: r1004557 - in /sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter: Processor.java ProcessorManager.java impl/ProcessorManagerImpl.java impl/RewriterResponse.java

Author: cziegeler
Date: Tue Oct  5 07:50:41 2010
New Revision: 1004557

URL: http://svn.apache.org/viewvc?rev=1004557&view=rev
Log:
Throw SlingException if pipeline could not be setup. IOExceptions might be swallowed and a wrong configuration is a hard setup error!

Modified:
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/Processor.java
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessorManager.java
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/ProcessorManagerImpl.java
    sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/Processor.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/Processor.java?rev=1004557&r1=1004556&r2=1004557&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/Processor.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/Processor.java Tue Oct  5 07:50:41 2010
@@ -30,6 +30,7 @@ public interface Processor {
      * Initialize this component.
      * @param context The invocation context.
      * @param config The configuration for this component.
+     * @throws IOException If an error occurs
      */
     void init(ProcessingContext context,
               ProcessorConfiguration config)

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessorManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessorManager.java?rev=1004557&r1=1004556&r2=1004557&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessorManager.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/ProcessorManager.java Tue Oct  5 07:50:41 2010
@@ -16,7 +16,6 @@
  */
 package org.apache.sling.rewriter;
 
-import java.io.IOException;
 import java.util.List;
 
 /**
@@ -32,8 +31,8 @@ public interface ProcessorManager {
 
     /**
      * Return a pipeline for a pipeline configuration.
+     * @throws org.apache.sling.api.SlingException If an error occurs during setup
      */
     Processor getProcessor(ProcessorConfiguration configuration,
-                           ProcessingContext       context)
-    throws IOException;
+                           ProcessingContext       context);
 }

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/ProcessorManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/ProcessorManagerImpl.java?rev=1004557&r1=1004556&r2=1004557&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/ProcessorManagerImpl.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/ProcessorManagerImpl.java Tue Oct  5 07:50:41 2010
@@ -32,6 +32,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
+import org.apache.sling.api.SlingException;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -429,8 +430,7 @@ public class ProcessorManagerImpl
      * @see org.apache.sling.rewriter.ProcessorManager#getProcessor(org.apache.sling.rewriter.ProcessorConfiguration, org.apache.sling.rewriter.ProcessingContext)
      */
     public Processor getProcessor(ProcessorConfiguration configuration,
-                                  ProcessingContext      context)
-    throws IOException {
+                                  ProcessingContext      context) {
         if ( configuration == null ) {
             throw new IllegalArgumentException("Processor configuration is missing.");
         }
@@ -443,14 +443,18 @@ public class ProcessorManagerImpl
         } else {
             isPipeline = configuration instanceof PipelineConfiguration;
         }
-        if ( isPipeline ) {
-            final PipelineImpl pipeline = new PipelineImpl(this.factoryCache);
-            pipeline.init(context, configuration);
-            return pipeline;
-        }
-        final Processor processor = new ProcessorWrapper(configuration, this.factoryCache);
-        processor.init(context, configuration);
-        return processor;
+        try {
+            if ( isPipeline ) {
+                final PipelineImpl pipeline = new PipelineImpl(this.factoryCache);
+                pipeline.init(context, configuration);
+                return pipeline;
+            }
+            final Processor processor = new ProcessorWrapper(configuration, this.factoryCache);
+            processor.init(context, configuration);
+            return processor;
+        } catch (final IOException ioe) {
+            throw new SlingException("Unable to setup processor: " + ioe.getMessage(), ioe);
+        }
     }
 
     /**

Modified: sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java?rev=1004557&r1=1004556&r2=1004557&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java (original)
+++ sling/trunk/contrib/extensions/rewriter/src/main/java/org/apache/sling/rewriter/impl/RewriterResponse.java Tue Oct  5 07:50:41 2010
@@ -141,11 +141,7 @@ class RewriterResponse
      */
     public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
         if ( type == ContentHandler.class ) {
-            try {
-                this.processor = this.getProcessor();
-            } catch (IOException e) {
-                throw new SlingException("Unable to setup pipeline: " + e.getMessage(), e);
-            }
+            this.processor = this.getProcessor();
             if ( this.processor != null ) {
                 @SuppressWarnings("unchecked")
                 final AdapterType object = (AdapterType)this.processor.getContentHandler();
@@ -158,19 +154,27 @@ class RewriterResponse
     /**
      * Search the first matching processor
      */
-    private Processor getProcessor() throws IOException {
-        this.request.getRequestProgressTracker().log("Searching processor");
+    private Processor getProcessor() {
         final ProcessingContext processorContext = new ServletProcessingContext(this.request, this, this.getSlingResponse(), this.contentType);
         Processor found = null;
         final List<ProcessorConfiguration> processorConfigs = this.processorManager.getProcessorConfigurations();
         final Iterator<ProcessorConfiguration> i = processorConfigs.iterator();
         while ( found == null && i.hasNext() ) {
             final ProcessorConfiguration config = i.next();
-            this.request.getRequestProgressTracker().log("Checking processor {0}", config);
             if ( config.match(processorContext) ) {
-                this.request.getRequestProgressTracker().log("Settimg up processor {0}", config);
-                found = this.processorManager.getProcessor(config, processorContext);
-                this.request.getRequestProgressTracker().log("Found processor for post processing {0}", config);
+                try {
+                    found = this.processorManager.getProcessor(config, processorContext);
+                    this.request.getRequestProgressTracker().log("Found processor for post processing {0}", config);
+                } catch (final SlingException se) {
+                    // if an exception occurs during setup of the pipeline and we are currently
+                    // already processing an error, we ignore this!
+                    if ( processorContext.getRequest().getAttribute("javax.servlet.error.status_code") != null ) {
+                        this.request.getRequestProgressTracker().log("Ignoring found processor for post processing {0}" +
+                                " as an error occured ({1}) during setup while processing another error.", config, se);
+                    } else {
+                        throw se;
+                    }
+                }
             }
         }
         return found;