Author: jstrachan
Date: Thu Jul  3 15:04:23 2008
New Revision: 673837

URL: http://svn.apache.org/viewvc?rev=673837&view=rev
Log:
applied fix for https://issues.apache.org/activemq/browse/CAMEL-662 to allow 
error handlers to be customized on a <camelContext/> or a <pipeline> or other 
<route> element

Added:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
   (with props)
    
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
   (with props)
    
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
   (with props)
    
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
      - copied, changed from r673699, 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
    
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
 Thu Jul  3 15:04:23 2008
@@ -18,6 +18,7 @@
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
 import org.apache.camel.processor.DeadLetterChannel;
 import org.apache.camel.processor.ErrorHandlerSupport;
 import org.apache.camel.processor.Logger;
@@ -61,7 +62,7 @@
         return answer;
     }
 
-    public Processor createErrorHandler(Processor processor) throws Exception {
+    public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) throws Exception {
         Processor deadLetter = getDeadLetterFactory().createProcessor();
         DeadLetterChannel answer = new DeadLetterChannel(processor, 
deadLetter, getRedeliveryPolicy(), getLogger(), getExceptionPolicyStrategy());
         configure(answer);

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
 Thu Jul  3 15:04:23 2008
@@ -17,6 +17,7 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
 import org.apache.camel.model.ExceptionType;
 
 /**
@@ -34,7 +35,7 @@
     /**
      * Creates the error handler interceptor
      */
-    Processor createErrorHandler(Processor processor) throws Exception;
+    Processor createErrorHandler(RouteContext routeContext, Processor 
processor) throws Exception;
 
     /**
      * Adds error handler for the given exception type

Added: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java?rev=673837&view=auto
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
 (added)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
 Thu Jul  3 15:04:23 2008
@@ -0,0 +1,64 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder;
+
+import org.apache.camel.Processor;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.model.ExceptionType;
+import org.apache.camel.spi.RouteContext;
+
+import java.util.List;
+
+/**
+ * Represents a proxy to an error handler builder which is resolved by named 
reference
+ * 
+ * @version $Revision: 1.1 $
+ */
+public class ErrorHandlerBuilderRef extends ErrorHandlerBuilderSupport {
+    private final String ref;
+    private ErrorHandlerBuilder handler;
+
+    public ErrorHandlerBuilderRef(String ref) {
+        this.ref = ref;
+    }
+
+    public ErrorHandlerBuilder copy() {
+        return new ErrorHandlerBuilderRef(ref);
+    }
+
+    @Override
+    public void addErrorHandlers(ExceptionType exception) {
+        if (handler != null) {
+            handler.addErrorHandlers(exception);
+        }
+        super.addErrorHandlers(exception);
+    }
+
+    public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) throws Exception {
+        if (handler == null) {
+            System.out.println("Looking up error handler: " + ref);
+            handler = routeContext.lookup(ref, ErrorHandlerBuilder.class);
+            ObjectHelper.notNull(handler, "error handler '" + ref + "'");
+            List<ExceptionType> list = getExceptions();
+            for (ExceptionType exceptionType : list) {
+                handler.addErrorHandlers(exceptionType);
+            }
+        }
+        return handler.createErrorHandler(routeContext, processor);
+    }
+}

Propchange: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
 Thu Jul  3 15:04:23 2008
@@ -39,4 +39,8 @@
             handler.addExceptionPolicy(exception);
         }
     }
+
+    public List<ExceptionType> getExceptions() {
+        return exceptions;
+    }
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
 Thu Jul  3 15:04:23 2008
@@ -17,6 +17,7 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
 import org.apache.camel.processor.Logger;
 import org.apache.camel.processor.LoggingErrorHandler;
 import org.apache.camel.processor.LoggingLevel;
@@ -51,7 +52,7 @@
         return answer;
     }
 
-    public Processor createErrorHandler(Processor processor) {
+    public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) {
         LoggingErrorHandler handler = new LoggingErrorHandler(processor, log, 
level);
         configure(handler);
         return handler;

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
 Thu Jul  3 15:04:23 2008
@@ -17,6 +17,7 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
 
 /**
  * A builder to disable the use of an error handler so that any exceptions are 
thrown.
@@ -32,7 +33,7 @@
         return this;
     }
 
-    public Processor createErrorHandler(Processor processor) {
+    public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) {
         return processor;
     }
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
 Thu Jul  3 15:04:23 2008
@@ -42,6 +42,7 @@
 import org.apache.camel.spi.BrowsableEndpoint;
 import org.apache.camel.util.ExpressionComparator;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.CamelContextHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -82,6 +83,18 @@
         init();
     }
 
+
+    /**
+     * A helper method to resolve the mock endpoint of the given URI on the 
given context
+     *
+     * @param context the camel context to try resolve the mock endpoint from
+     * @param uri the uri of the endpoint to resolve
+     * @return the endpoint
+     */
+    public static MockEndpoint resolve(CamelContext context, String uri) {
+        return CamelContextHelper.getMandatoryEndpoint(context, uri, 
MockEndpoint.class);
+    }
+
     public static void assertWait(long timeout, TimeUnit unit, MockEndpoint... 
endpoints) throws InterruptedException {
         long start = System.currentTimeMillis();
         long left = unit.toMillis(timeout);

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Thu Jul  3 15:04:23 2008
@@ -38,6 +38,7 @@
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.management.InstrumentationLifecycleStrategy;
 import org.apache.camel.management.JmxSystemPropertyKeys;
@@ -89,6 +90,7 @@
     private List<RouteType> routeDefinitions = new ArrayList<RouteType>();
     private List<InterceptStrategy> interceptStrategies = new 
ArrayList<InterceptStrategy>();
     private Boolean trace;
+    private ErrorHandlerBuilder errorHandlerBuilder;
 
     public DefaultCamelContext() {
         name = NAME_PREFIX + ++nameSuffix;
@@ -467,6 +469,21 @@
         this.trace = trace;
     }
 
+    public <E extends Exchange> ProducerTemplate<E> createProducerTemplate() {
+        return new DefaultProducerTemplate<E>(this);
+    }
+
+    public ErrorHandlerBuilder getErrorHandlerBuilder() {
+        return errorHandlerBuilder;
+    }
+
+    /**
+     * Sets the default error handler builder which is inherited by the routes
+     */
+    public void setErrorHandlerBuilder(ErrorHandlerBuilder 
errorHandlerBuilder) {
+        this.errorHandlerBuilder = errorHandlerBuilder;
+    }
+
     // Implementation methods
     // -----------------------------------------------------------------------
 
@@ -626,8 +643,5 @@
         return isStarted() && !isStarting();
     }
 
-    public <E extends Exchange> ProducerTemplate<E> createProducerTemplate() {
-        return new DefaultProducerTemplate<E>(this);
-    }
 
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
 Thu Jul  3 15:04:23 2008
@@ -21,6 +21,7 @@
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorType;
 import org.apache.camel.spi.ErrorHandlerWrappingStrategy;
+import org.apache.camel.spi.RouteContext;
 
 /**
  * @version $Revision$
@@ -35,12 +36,12 @@
         this.counterMap = counterMap;
     }
 
-    public Processor wrapProcessorInErrorHandler(ProcessorType processorType,
-            Processor target) throws Exception {
+    public Processor wrapProcessorInErrorHandler(RouteContext routeContext, 
ProcessorType processorType,
+                                                 Processor target) throws 
Exception {
 
         // don't wrap our instrumentation interceptors
         if (counterMap.containsKey(processorType)) {
-            return 
processorType.getErrorHandlerBuilder().createErrorHandler(target);
+            return 
processorType.getErrorHandlerBuilder().createErrorHandler(routeContext, target);
         }
 
         return target;

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
 Thu Jul  3 15:04:23 2008
@@ -43,6 +43,7 @@
 import org.apache.camel.builder.DataFormatClause;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.builder.NoErrorHandlerBuilder;
 import org.apache.camel.builder.ProcessorBuilder;
@@ -79,6 +80,7 @@
     private LinkedList<Block> blocks = new LinkedList<Block>();
     private ProcessorType<? extends ProcessorType> parent;
     private List<InterceptorType> interceptors = new 
ArrayList<InterceptorType>();
+    private String errorHandlerRef;
 
     // else to use an optional attribute in JAXB2
     public abstract List<ProcessorType<?>> getOutputs();
@@ -1444,6 +1446,28 @@
         this.errorHandlerBuilder = errorHandlerBuilder;
     }
 
+    /**
+     * Sets the error handler if one is not already set
+     */
+    protected void setErrorHandlerBuilderIfNull(ErrorHandlerBuilder 
errorHandlerBuilder) {
+        if (this.errorHandlerBuilder == null) {
+            setErrorHandlerBuilder(errorHandlerBuilder);
+        }
+    }
+
+    public String getErrorHandlerRef() {
+        return errorHandlerRef;
+    }
+
+    /**
+     * Sets the bean ref name of the error handler builder to use on this route
+     */
+    @XmlAttribute(required = false)
+    public void setErrorHandlerRef(String errorHandlerRef) {
+        this.errorHandlerRef = errorHandlerRef;
+        setErrorHandlerBuilder(new ErrorHandlerBuilderRef(errorHandlerRef));
+    }
+
     @XmlTransient
     public boolean isInheritErrorHandler() {
         return isInheritErrorHandler(getInheritErrorHandlerFlag());
@@ -1562,13 +1586,16 @@
         ErrorHandlerWrappingStrategy strategy = 
routeContext.getErrorHandlerWrappingStrategy();
 
         if (strategy != null) {
-            return strategy.wrapProcessorInErrorHandler(this, target);
+            return strategy.wrapProcessorInErrorHandler(routeContext, this, 
target);
         }
 
-        return getErrorHandlerBuilder().createErrorHandler(target);
+        return getErrorHandlerBuilder().createErrorHandler(routeContext, 
target);
     }
 
     protected ErrorHandlerBuilder createErrorHandlerBuilder() {
+        if (errorHandlerRef != null) {
+            return new ErrorHandlerBuilderRef(errorHandlerRef);
+        }
         if (isInheritErrorHandler()) {
             return new DeadLetterChannelBuilder();
         } else {

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
 Thu Jul  3 15:04:23 2008
@@ -33,7 +33,9 @@
 import org.apache.camel.Endpoint;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Route;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.processor.interceptor.StreamCachingInterceptor;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.CamelContextHelper;
@@ -76,11 +78,20 @@
     public void addRoutes(CamelContext context, Collection<Route> routes) 
throws Exception {
         setCamelContext(context);
 
+        if (context instanceof DefaultCamelContext) {
+            DefaultCamelContext defaultCamelContext = (DefaultCamelContext) 
context;
+            ErrorHandlerBuilder handler = 
defaultCamelContext.getErrorHandlerBuilder();
+            if (handler != null) {
+                setErrorHandlerBuilderIfNull(handler);
+            }
+        }
+
         for (FromType fromType : inputs) {
             addRoutes(routes, fromType);
         }
     }
 
+
     public Endpoint resolveEndpoint(String uri) throws NoSuchEndpointException 
{
         CamelContext context = getCamelContext();
         if (context == null) {

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
 Thu Jul  3 15:04:23 2008
@@ -202,8 +202,9 @@
     //-------------------------------------------------------------------------
     protected RouteType createRoute() {
         RouteType route = new RouteType();
-        if (isInheritErrorHandler()) {
-            route.setErrorHandlerBuilder(getErrorHandlerBuilder());
+        ErrorHandlerBuilder handler = getErrorHandlerBuilder();
+        if (isInheritErrorHandler() && handler != null) {
+            route.setErrorHandlerBuilderIfNull(handler);
         }
         return route;
     }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
 Thu Jul  3 15:04:23 2008
@@ -37,7 +37,7 @@
      * @return processor wrapped with an interceptor or not wrapped
      * @throws Exception
      */
-    Processor wrapProcessorInErrorHandler(ProcessorType processorType,
-            Processor target) throws Exception;
+    Processor wrapProcessorInErrorHandler(RouteContext routeContext, 
ProcessorType processorType,
+                                          Processor target) throws Exception;
 
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
 Thu Jul  3 15:04:23 2008
@@ -58,6 +58,15 @@
     }
 
     /**
+     * Returns the mandatory endpoint for the given URI and type or the
+     * [EMAIL PROTECTED] org.apache.camel.NoSuchEndpointException} is thrown
+     */
+    public static <T extends Endpoint> T getMandatoryEndpoint(CamelContext 
camelContext, String uri, Class<T> type) {
+        Endpoint endpoint = getMandatoryEndpoint(camelContext, uri);
+        return ObjectHelper.cast(type, endpoint);
+    }
+
+    /**
      * Returns a list of all endpoints of the given type
      *
      * @param camelContext

Modified: 
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 (original)
+++ 
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 Thu Jul  3 15:04:23 2008
@@ -31,6 +31,7 @@
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.impl.DefaultLifecycleStrategy;
 import org.apache.camel.management.DefaultInstrumentationAgent;
 import org.apache.camel.management.InstrumentationLifecycleStrategy;
@@ -74,6 +75,8 @@
     private Boolean autowireRouteBuilders = Boolean.TRUE;
     @XmlAttribute(required = false)
     private Boolean trace;
+    @XmlAttribute(required = false)
+    private String errorHandlerRef;
     @XmlElement(name = "package", required = false)
     private String[] packages = {};
     @XmlElement(name = "jmxAgent", type = CamelJMXAgentType.class, required = 
false)
@@ -364,6 +367,20 @@
         this.autowireRouteBuilders = autowireRouteBuilders;
     }
 
+    public String getErrorHandlerRef() {
+        return errorHandlerRef;
+    }
+
+    /**
+     * Sets the name of the error handler object used to default the error 
handling strategy
+     *
+     * @param errorHandlerRef the Spring bean ref of the error handler
+     */
+    public void setErrorHandlerRef(String errorHandlerRef) {
+        this.errorHandlerRef = errorHandlerRef;
+    }
+
+
     // Implementation methods
     // 
-------------------------------------------------------------------------
 
@@ -376,6 +393,13 @@
         if (trace != null) {
             ctx.setTrace(trace);
         }
+        if (errorHandlerRef != null) {
+            ErrorHandlerBuilder errorHandlerBuilder = (ErrorHandlerBuilder) 
getApplicationContext().getBean(errorHandlerRef, ErrorHandlerBuilder.class);
+            if (errorHandlerBuilder == null) {
+                throw new IllegalArgumentException("Could not find bean: " + 
errorHandlerRef);
+            }
+            ctx.setErrorHandlerBuilder(errorHandlerBuilder);
+        }
         return ctx;
     }
 

Added: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java?rev=673837&view=auto
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
 (added)
+++ 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
 Thu Jul  3 15:04:23 2008
@@ -0,0 +1,59 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.config;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderSupport;
+import org.apache.camel.processor.DelegateProcessor;
+import org.apache.camel.spi.RouteContext;
+import org.springframework.beans.factory.BeanNameAware;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class DummyErrorHandlerBuilder extends ErrorHandlerBuilderSupport 
implements BeanNameAware {
+    public static final String PROPERTY_NAME = "DummyErrorHandler";
+    private String beanName;
+
+    public DummyErrorHandlerBuilder() {
+    }
+
+    public DummyErrorHandlerBuilder(String beanName) {
+        this.beanName = beanName;
+    }
+
+    public void setBeanName(String beanName) {
+        this.beanName = beanName;
+    }
+
+    public ErrorHandlerBuilder copy() {
+        return new DummyErrorHandlerBuilder(beanName);
+    }
+
+    public Processor createErrorHandler(RouteContext routeContext, Processor 
processor) throws Exception {
+        return new DelegateProcessor(processor) {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.setProperty(PROPERTY_NAME, beanName);
+                super.process(exchange);
+            }
+        };
+    }
+}

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java?rev=673837&view=auto
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
 (added)
+++ 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
 Thu Jul  3 15:04:23 2008
@@ -0,0 +1,57 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.config;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import 
org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests;
+
+/**
+ * @version $Revision: 1.1 $
+ */
[EMAIL PROTECTED]
+public class ErrorHandlerConfigTest extends AbstractJUnit38SpringContextTests {
+
+    @Autowired
+    protected ProducerTemplate template;
+
+    @Autowired
+    protected CamelContext context;
+
+    protected Object expectedBody = "<hello>world!</hello>";
+
+    public void testRouteInheritsConfiguredErrorHandler() throws Exception {
+        assertReceivedMessageWithErrorHandlerValue("defaultErrorHandler", 
"defaultErrorHandler");
+    }
+
+    public void testRouteConfiguredErrorHandler() throws Exception {
+        assertReceivedMessageWithErrorHandlerValue("customErrorHandler", 
"customErrorHandler");
+    }
+
+    protected void assertReceivedMessageWithErrorHandlerValue(String name, 
String value) throws InterruptedException {
+        template.sendBody("direct:" + name, expectedBody);
+
+        MockEndpoint endpoint = MockEndpoint.resolve(context, "mock:" + name);
+        endpoint.expectedMessageCount(1);
+        
endpoint.message(0).header(DummyErrorHandlerBuilder.PROPERTY_NAME).isEqualTo(value);
+        endpoint.assertIsSatisfied();
+    }
+}
\ No newline at end of file

Propchange: 
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
 (from r673699, 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml)
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml?p2=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml&p1=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml&r1=673699&r2=673837&rev=673837&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml
 (original)
+++ 
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
 Thu Jul  3 15:04:23 2008
@@ -22,13 +22,19 @@
        http://activemq.apache.org/camel/schema/spring 
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
     ">
 
+  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"; 
errorHandlerRef="defaultErrorHandler">
+    <template id="myTemplate"/>
 
-
-  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring";>
-    <template id="myTemplate" defaultEndpoint="mock:results"/>
+    <route>
+      <from uri="direct:defaultErrorHandler"/>
+      <to uri="mock:defaultErrorHandler"/>
+    </route>
+    <route errorHandlerRef="customErrorHandler">
+      <from uri="direct:customErrorHandler"/>
+      <to uri="mock:customErrorHandler"/>
+    </route>
   </camelContext>
 
-  <bean id="myBean" class="org.apache.camel.spring.config.TemplateUsingBean">
-    <property name="template" ref="myTemplate"/>
-  </bean>
+  <bean id="defaultErrorHandler" 
class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
+  <bean id="customErrorHandler" 
class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
 </beans>


Reply via email to