Author: ningjiang
Date: Thu Jul 24 03:39:38 2008
New Revision: 679345

URL: http://svn.apache.org/viewvc?rev=679345&view=rev
Log:
CAMEL-751 Get the CamelContext ErrorHandler to work

Added:
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
   (with props)
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/MessageVariableResolver.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/model/ProcessorType.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=679345&r1=679344&r2=679345&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
 Thu Jul 24 03:39:38 2008
@@ -208,10 +208,10 @@
     /**
      * Gets the default error handler builder which is inherited by the routes
      */
-    public ErrorHandlerBuilder getErrorHandlerBuilder();
+    ErrorHandlerBuilder getErrorHandlerBuilder();
 
     /**
      * Sets the default error handler builder which is inherited by the routes
      */
-    public void setErrorHandlerBuilder(ErrorHandlerBuilder 
errorHandlerBuilder);
+    void setErrorHandlerBuilder(ErrorHandlerBuilder errorHandlerBuilder);
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java?rev=679345&r1=679344&r2=679345&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java
 Thu Jul 24 03:39:38 2008
@@ -247,11 +247,7 @@
 
     protected ErrorHandlerBuilder createErrorHandlerBuilder() {
         if (isInheritErrorHandler()) {
-            ErrorHandlerBuilder errorHandler= context.getErrorHandlerBuilder();
-            if (errorHandler == null) {
-                errorHandler = new DeadLetterChannelBuilder();
-            }
-            return errorHandler;
+            return new DeadLetterChannelBuilder();
         } else {
             return new NoErrorHandlerBuilder();
         }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java?rev=679345&r1=679344&r2=679345&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
 Thu Jul 24 03:39:38 2008
@@ -173,6 +173,11 @@
     // -----------------------------------------------------------------------
     protected void checkInitialized() throws Exception {
         if (initialized.compareAndSet(false, true)) {
+            // Set the CamelContext ErrorHandler here
+            CamelContext camelContext = getContext();
+            if (camelContext.getErrorHandlerBuilder() != null) {
+                setErrorHandlerBuilder(camelContext.getErrorHandlerBuilder());
+            }
             configure();
             populateRoutes(routes);
         }
@@ -194,21 +199,21 @@
     public RoutesType getRouteCollection() {
         return this.routeCollection;
     }
-    
+
     /**
-     * Completely disable stream caching for all routes being defined in the 
same RouteBuilder after this. 
+     * Completely disable stream caching for all routes being defined in the 
same RouteBuilder after this.
      */
     public void noStreamCaching() {
         
StreamCachingInterceptor.noStreamCaching(routeCollection.getInterceptors());
     }
-    
+
     /**
      * Enable stream caching for all routes being defined in the same 
RouteBuilder after this call.
      */
     public void streamCaching() {
         routeCollection.intercept(new StreamCachingInterceptor());
     }
-    
+
     /**
      * Factory method
      */

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/MessageVariableResolver.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/MessageVariableResolver.java?rev=679345&r1=679344&r2=679345&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/MessageVariableResolver.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/MessageVariableResolver.java
 Thu Jul 24 03:39:38 2008
@@ -37,7 +37,7 @@
  * A variable resolver for XPath expressions which support properties on the
  * messge, exchange as well as making system properties and environment
  * properties available.
- * 
+ *
  * @version $Revision$
  */
 public class MessageVariableResolver implements XPathVariableResolver {
@@ -75,8 +75,8 @@
             try {
                 answer = System.getProperty(localPart);
             } catch (Exception e) {
-                LOG.debug("Security exception evaluating system property: " + 
localPart +
-                    ". Reason: " + e, e);
+                LOG.debug("Security exception evaluating system property: " + 
localPart
+                          + ". Reason: " + e, e);
             }
         } else if (uri.equals(ENVIRONMENT_VARIABLES)) {
             answer = System.getenv().get(localPart);

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=679345&r1=679344&r2=679345&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 24 03:39:38 2008
@@ -338,7 +338,7 @@
 
     public void addRoutes(Routes builder) throws Exception {
         // lets now add the routes from the builder
-        builder.setContext(this);
+        builder.setContext(this);        
         List<Route> routeList = builder.getRouteList();
         LOG.debug("Adding routes from: " + builder + " routes: " + routeList);
         addRoutes(routeList);

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=679345&r1=679344&r2=679345&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 24 03:39:38 2008
@@ -1596,7 +1596,7 @@
         if (errorHandlerRef != null) {
             return new ErrorHandlerBuilderRef(errorHandlerRef);
         }
-        if (isInheritErrorHandler()) {
+        if (isInheritErrorHandler()) {            
             return new DeadLetterChannelBuilder();
         } else {
             return new NoErrorHandlerBuilder();

Added: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java?rev=679345&view=auto
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
 (added)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
 Thu Jul 24 03:39:38 2008
@@ -0,0 +1,115 @@
+/**
+ * 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 java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
+import org.apache.camel.Route;
+import org.apache.camel.TestSupport;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.EventDrivenConsumerRoute;
+import org.apache.camel.processor.DeadLetterChannel;
+import org.apache.camel.processor.LoggingErrorHandler;
+import org.apache.camel.processor.RedeliveryPolicy;
+import org.apache.camel.processor.SendProcessor;
+
+public class ContextErrorHandlerTest extends ContextTestSupport {
+
+    protected void setUp() throws Exception {
+        setUseRouteBuilder(false);
+        super.setUp();
+        RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
+        redeliveryPolicy.maximumRedeliveries(1);
+        redeliveryPolicy.setUseExponentialBackOff(true);
+        DeadLetterChannelBuilder deadLetterChannelBuilder = new 
DeadLetterChannelBuilder();
+        deadLetterChannelBuilder.setRedeliveryPolicy(redeliveryPolicy);
+        context.setErrorHandlerBuilder(deadLetterChannelBuilder);
+    }
+
+    protected void startCamelContext() throws Exception {
+        // do nothing here
+    }
+
+    protected void stopCamelContext() throws Exception {
+        // do nothing here
+    }
+
+    protected List<Route> getRouteList(RouteBuilder builder) throws Exception {
+        context.addRoutes(builder);
+        context.start();
+        List<Route> answer = context.getRoutes();
+        context.stop();
+        return answer;
+    }
+
+    public void testOverloadingTheDefaultErrorHandler() throws Exception {
+
+        RouteBuilder builder = new RouteBuilder() {
+            public void configure() {
+                errorHandler(loggingErrorHandler("FOO.BAR"));
+                from("seda:a").to("seda:b");
+            }
+        };
+
+        List<Route> list = getRouteList(builder);
+        assertEquals("Number routes created" + list, 1, list.size());
+        for (Route route : list) {
+            Endpoint key = route.getEndpoint();
+            assertEquals("From endpoint", "seda:a", key.getEndpointUri());
+
+            EventDrivenConsumerRoute consumerRoute = 
assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            Processor processor = consumerRoute.getProcessor();
+            processor = unwrap(processor);
+            LoggingErrorHandler loggingProcessor = 
assertIsInstanceOf(LoggingErrorHandler.class, processor);
+            processor = unwrap(loggingProcessor.getOutput());
+            SendProcessor sendProcessor = 
assertIsInstanceOf(SendProcessor.class, processor);
+            log.debug("Found sendProcessor: " + sendProcessor);
+        }
+    }
+
+    public void testGetTheDefaultErrorHandlerFromContext() throws Exception {
+
+        RouteBuilder builder = new RouteBuilder() {
+            public void configure() {
+                from("seda:a").to("seda:b");
+            }
+        };
+
+        List<Route> list = getRouteList(builder);
+        assertEquals("Number routes created" + list, 1, list.size());
+        for (Route route : list) {
+            Endpoint key = route.getEndpoint();
+            assertEquals("From endpoint", "seda:a", key.getEndpointUri());
+
+            EventDrivenConsumerRoute consumerRoute = 
assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            Processor processor = consumerRoute.getProcessor();
+            processor = unwrap(processor);
+
+            DeadLetterChannel deadLetterChannel = 
assertIsInstanceOf(DeadLetterChannel.class, processor);
+
+            RedeliveryPolicy redeliveryPolicy = 
deadLetterChannel.getRedeliveryPolicy();
+
+            assertEquals("getMaximumRedeliveries()", 1, 
redeliveryPolicy.getMaximumRedeliveries());
+            assertEquals("isUseExponentialBackOff()", true, 
redeliveryPolicy.isUseExponentialBackOff());
+        }
+    }
+
+}

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

Propchange: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to