You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2007/08/09 19:43:55 UTC

svn commit: r564295 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ main/java/org/apache/camel/model/ main/java/org/apache/camel/processor/ main/resources/org/apache/camel/model/ test/java/org/apache/camel/processor/

Author: jstrachan
Date: Thu Aug  9 10:43:51 2007
New Revision: 564295

URL: http://svn.apache.org/viewvc?view=rev&rev=564295
Log:
added the exception(Class) expression to the DSL for easier DSL based exception routing, for CAMEL-93

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java   (contents, props changed)
      - copied, changed from r564272, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchType.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandlerSupport.java   (with props)
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationWithExceptionTest.java   (contents, props changed)
      - copied, changed from r564133, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java
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/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/builder/RouteBuilder.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/RoutesType.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryType.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
    activemq/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -33,7 +33,7 @@
  * 
  * @version $Revision$
  */
-public class DeadLetterChannelBuilder implements ErrorHandlerBuilder {
+public class DeadLetterChannelBuilder extends ErrorHandlerBuilderSupport {
     private RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
     private ProcessorFactory deadLetterFactory;
     private Processor defaultDeadLetterEndpoint;
@@ -60,7 +60,9 @@
 
     public Processor createErrorHandler(Processor processor) throws Exception {
         Processor deadLetter = getDeadLetterFactory().createProcessor();
-        return new DeadLetterChannel(processor, deadLetter, getRedeliveryPolicy(), getLogger());
+        DeadLetterChannel answer = new DeadLetterChannel(processor, deadLetter, getRedeliveryPolicy(), getLogger());
+        configure(answer);
+        return answer;
     }
 
     // Builder methods

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -19,17 +19,21 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 
+import java.util.List;
+
 /**
  * @version $Revision$
  */
-public interface ErrorHandlerBuilder<E extends Exchange> {
+public interface ErrorHandlerBuilder {
     /**
      * Creates a copy of this builder
      */
-    ErrorHandlerBuilder<E> copy();
+    ErrorHandlerBuilder copy();
 
     /**
      * Creates the error handler interceptor
      */
     Processor createErrorHandler(Processor processor) throws Exception;
+
+    void addErrorHandlers(List<Class> exceptionClasses, Processor errorHandler);
 }

Added: 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?view=auto&rev=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java Thu Aug  9 10:43:51 2007
@@ -0,0 +1,50 @@
+/**
+ *
+ * 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.processor.ErrorHandlerSupport;
+
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public abstract class ErrorHandlerBuilderSupport implements ErrorHandlerBuilder {
+    private Map<List<Class>, Processor> exceptionHandlers = new IdentityHashMap<List<Class>, Processor>();
+
+    public void addErrorHandlers(List<Class> exceptionClasses, Processor errorHandler) {
+        exceptionHandlers.put(exceptionClasses, errorHandler);
+    }
+
+    protected void configure(ErrorHandlerSupport handler) {
+        Set<Map.Entry<List<Class>, Processor>> entries = exceptionHandlers.entrySet();
+        for (Map.Entry<List<Class>, Processor> entry : entries) {
+            configure(handler, entry.getKey(), entry.getValue());
+        }
+    }
+
+    protected void configure(ErrorHandlerSupport handler, List<Class> exceptionTypes, Processor exceptionProcessor) {
+        for (Class exceptionType : exceptionTypes) {
+            handler.addCustomProcessor(exceptionType, exceptionProcessor);
+        }
+    }
+}

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

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -20,6 +20,7 @@
 import org.apache.camel.processor.Logger;
 import org.apache.camel.processor.LoggingErrorHandler;
 import org.apache.camel.processor.LoggingLevel;
+import org.apache.camel.processor.ErrorHandlerSupport;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -28,7 +29,7 @@
  *
  * @version $Revision$
  */
-public class LoggingErrorHandlerBuilder implements ErrorHandlerBuilder {
+public class LoggingErrorHandlerBuilder extends ErrorHandlerBuilderSupport {
     private Log log = LogFactory.getLog(Logger.class);
     private LoggingLevel level = LoggingLevel.INFO;
 
@@ -52,7 +53,9 @@
     }
 
     public Processor createErrorHandler(Processor processor) {
-        return new LoggingErrorHandler(processor, log, level);
+        LoggingErrorHandler handler = new LoggingErrorHandler(processor, log, level);
+        configure(handler);
+        return handler;
     }
 
     public LoggingLevel getLevel() {

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -28,8 +28,8 @@
  *
  * @version $Revision$
  */
-public class NoErrorHandlerBuilder<E extends Exchange> implements ErrorHandlerBuilder<E> {
-    public ErrorHandlerBuilder<E> copy() {
+public class NoErrorHandlerBuilder extends ErrorHandlerBuilderSupport {
+    public ErrorHandlerBuilder copy() {
         return this;
     }
 

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -26,6 +26,7 @@
 import org.apache.camel.model.ProcessorType;
 import org.apache.camel.model.RouteType;
 import org.apache.camel.model.RoutesType;
+import org.apache.camel.model.ExceptionType;
 import org.apache.camel.processor.DelegateProcessor;
 
 import java.util.ArrayList;
@@ -121,6 +122,13 @@
      */
     public OtherwiseType intercept(Predicate predicate) {
         return routeCollection.intercept(predicate);
+    }
+
+    /**
+     * Adds an exception handler route for the given exception type
+     */
+    public ExceptionType exception(Class exceptionType) {
+        return routeCollection.exception(exceptionType);
     }
 
     // Properties

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java (from r564272, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchType.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java?view=diff&rev=564295&p1=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchType.java&r1=564272&p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchType.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java Thu Aug  9 10:43:51 2007
@@ -18,7 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
-
+import java.util.Collection;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -27,6 +27,8 @@
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.impl.RouteContext;
 import org.apache.camel.processor.CatchProcessor;
 import org.apache.camel.util.ObjectHelper;
@@ -34,9 +36,9 @@
 /**
  * @version $Revision: 1.1 $
  */
-@XmlRootElement(name = "catch")
+@XmlRootElement(name = "error")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class CatchType extends ProcessorType {
+public class ExceptionType extends ProcessorType {
     @XmlElementRef
     private List<InterceptorType> interceptors = new ArrayList<InterceptorType>();
     @XmlElement(name = "exception")
@@ -46,21 +48,28 @@
     @XmlTransient
     private List<Class> exceptionClasses;
 
-    public CatchType() {
+    public ExceptionType() {
     }
 
-    public CatchType(List<Class> exceptionClasses) {
+    public ExceptionType(List<Class> exceptionClasses) {
         this.exceptionClasses = exceptionClasses;
     }
 
-    public CatchType(Class exceptionType) {
+    public ExceptionType(Class exceptionType) {
         exceptionClasses = new ArrayList<Class>();
         exceptionClasses.add(exceptionType);
     }
 
     @Override
     public String toString() {
-        return "Catch[ " + getExceptionClasses() + " -> " + getOutputs() + "]";
+        return "Error[ " + getExceptionClasses() + " -> " + getOutputs() + "]";
+    }
+
+    public void addRoutes(RouteContext routeContext, Collection<Route> routes) throws Exception {
+        // lets attach a processor to an error handler
+        Processor errorHandler = routeContext.createProcessor(this);
+        ErrorHandlerBuilder builder = routeContext.getRoute().getErrorHandlerBuilder();
+        builder.addErrorHandlers(getExceptionClasses(), errorHandler);
     }
 
     @Override
@@ -113,4 +122,4 @@
         }
         return answer;
     }
-}
+}
\ No newline at end of file

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

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -421,21 +421,27 @@
 
     public InterceptType intercept() {
         InterceptType answer = new InterceptType();
-        getOutputs().add(answer);
+        addOutput(answer);
         return answer;
     }
 
     public ProcessorType proceed() {
-        getOutputs().add(new ProceedType());
+        addOutput(new ProceedType());
         return this;
     }
 
+    public ExceptionType exception(Class exceptionType) {
+        ExceptionType answer = new ExceptionType(exceptionType);
+        addOutput(answer);
+        return answer;
+    }
+
     /**
      * Apply an interceptor route if the predicate is true
      */
     public OtherwiseType intercept(Predicate predicate) {
         InterceptType answer = new InterceptType();
-        getOutputs().add(answer);
+        addOutput(answer);
         return answer.when(predicate);
     }
 

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?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- 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 Aug  9 10:43:51 2007
@@ -51,6 +51,8 @@
     @XmlTransient
     private List<InterceptType> intercepts = new ArrayList<InterceptType>();
     @XmlTransient
+    private List<ExceptionType> exceptions = new ArrayList<ExceptionType>();
+    @XmlTransient
     private CamelContext camelContext;
 
     @Override
@@ -90,6 +92,14 @@
         this.intercepts = intercepts;
     }
 
+    public List<ExceptionType> getExceptions() {
+        return exceptions;
+    }
+
+    public void setExceptions(List<ExceptionType> exceptions) {
+        this.exceptions = exceptions;
+    }
+
     public CamelContext getCamelContext() {
         return camelContext;
     }
@@ -139,6 +149,7 @@
         route.setInheritErrorHandlerFlag(getInheritErrorHandlerFlag());
         route.getInterceptors().addAll(getInterceptors());
         route.getOutputs().addAll(getIntercepts());
+        route.getOutputs().addAll(getExceptions());
         getRoutes().add(route);
         return route;
     }
@@ -160,4 +171,9 @@
         return answer.when(predicate);
     }
 
+    public ExceptionType exception(Class exceptionType) {
+        ExceptionType answer = new ExceptionType(exceptionType);
+        getExceptions().add(answer);
+        return answer;
+    }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryType.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryType.java?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryType.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryType.java Thu Aug  9 10:43:51 2007
@@ -72,13 +72,13 @@
     // -------------------------------------------------------------------------
     public CatchType handle(Class<?> exceptionType) {
         CatchType answer = new CatchType(exceptionType);
-        getOutputs().add(answer);
+        addOutput(answer);
         return answer;
     }
 
     public FinallyType handleAll() {
         FinallyType answer = new FinallyType();
-        getOutputs().add(answer);
+        addOutput(answer);
         return answer;
     }
 

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java Thu Aug  9 10:43:51 2007
@@ -32,7 +32,7 @@
  * 
  * @version $Revision$
  */
-public class DeadLetterChannel extends ServiceSupport implements ErrorHandler {
+public class DeadLetterChannel extends ErrorHandlerSupport {
     public static final String REDELIVERY_COUNTER = "org.apache.camel.RedeliveryCounter";
     public static final String REDELIVERED = "org.apache.camel.Redelivered";
 
@@ -77,7 +77,10 @@
             try {
                 output.process(exchange);
                 return;
-            } catch (RuntimeException e) {
+            } catch (Throwable e) {
+                if (customProcessorForException(exchange, e)) {
+                    return;
+                }
                 logger.log("On delivery attempt: " + redeliveryCounter + " caught: " + e, e);
             }
             redeliveryCounter = incrementRedeliveryCounter(exchange);

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandlerSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandlerSupport.java?view=auto&rev=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandlerSupport.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandlerSupport.java Thu Aug  9 10:43:51 2007
@@ -0,0 +1,66 @@
+/**
+ *
+ * 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.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.impl.ServiceSupport;
+
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public abstract class ErrorHandlerSupport extends ServiceSupport implements ErrorHandler {
+    private Map<Class, Processor> exceptionHandlers = new IdentityHashMap<Class, Processor>();
+
+    public void addCustomProcessor(Class exceptionType, Processor processor) {
+        addChildService(processor);
+        exceptionHandlers.put(exceptionType, processor);
+
+    }
+
+    /**
+     * Attempts to invoke the handler for this particular exception if one is available
+     * @param exchange
+     * @param exception
+     * @return
+     */
+    protected boolean customProcessorForException(Exchange exchange, Throwable exception) throws Exception {
+        Processor processor = getProcessorForException(exchange, exception);
+        if (processor != null) {
+            exchange.setException(exception);
+            processor.process(exchange);
+            return true;
+        }
+        return false;
+    }
+
+    protected Processor getProcessorForException(Exchange exchange, Throwable exception) {
+        Set<Map.Entry<Class,Processor>> entries = exceptionHandlers.entrySet();
+        for (Map.Entry<Class, Processor> entry : entries) {
+            Class type = entry.getKey();
+            if (type.isInstance(exception)) {
+                return entry.getValue();
+            }
+        }
+        return null;
+    }
+}

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

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java Thu Aug  9 10:43:51 2007
@@ -28,7 +28,7 @@
  * 
  * @version $Revision$
  */
-public class LoggingErrorHandler extends ServiceSupport implements ErrorHandler {
+public class LoggingErrorHandler extends ErrorHandlerSupport {
     private Processor output;
     private Log log;
     private LoggingLevel level;
@@ -51,8 +51,10 @@
     public void process(Exchange exchange) throws Exception {
         try {
             output.process(exchange);
-        } catch (RuntimeException e) {
-            logError(exchange, e);
+        } catch (Throwable e) {
+            if (!customProcessorForException(exchange, e)) {
+                logError(exchange, e);
+            }
         }
     }
 
@@ -84,7 +86,7 @@
 
     // Implementation methods
     // -------------------------------------------------------------------------
-    protected void logError(Exchange exchange, RuntimeException e) {
+    protected void logError(Exchange exchange, Throwable e) {
         switch (level) {
         case DEBUG:
             if (log.isDebugEnabled()) {
@@ -122,7 +124,7 @@
         }
     }
 
-    protected Object logMessage(Exchange exchange, RuntimeException e) {
+    protected Object logMessage(Exchange exchange, Throwable e) {
         return e + " while processing exchange: " + exchange;
     }
 

Modified: activemq/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index?view=diff&rev=564295&r1=564294&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index (original)
+++ activemq/camel/trunk/camel-core/src/main/resources/org/apache/camel/model/jaxb.index Thu Aug  9 10:43:51 2007
@@ -19,6 +19,7 @@
 CatchType
 ChoiceType
 DelayerType
+ExceptionType
 FilterType
 FinallyType
 FromType

Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationWithExceptionTest.java (from r564133, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationWithExceptionTest.java?view=diff&rev=564295&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java&r1=564133&p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationWithExceptionTest.java&r2=564295
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidationWithExceptionTest.java Thu Aug  9 10:43:51 2007
@@ -16,53 +16,22 @@
  */
 package org.apache.camel.processor;
 
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Processor;
 import org.apache.camel.ValidationException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
 
 /**
  * @version $Revision: 1.1 $
  */
-public class ValidationTest extends ContextTestSupport {
-    protected Processor validator = new MyValidator();
-    protected MockEndpoint validEndpoint;
-    protected MockEndpoint invalidEndpoint;
-
-    public void testValidMessage() throws Exception {
-        validEndpoint.expectedMessageCount(1);
-
-        template.sendBodyAndHeader("direct:start", "<valid/>", "foo", "bar");
-
-        MockEndpoint.assertIsSatisfied(validEndpoint, invalidEndpoint);
-    }
-
-    public void testInvalidMessage() throws Exception {
-        invalidEndpoint.expectedMessageCount(1);
-
-        template.sendBodyAndHeader("direct:start", "<invalid/>", "foo", "notMatchedHeaderValue");
-
-        MockEndpoint.assertIsSatisfied(validEndpoint, invalidEndpoint);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        validEndpoint = resolveMandatoryEndpoint("mock:valid", MockEndpoint.class);
-        invalidEndpoint = resolveMandatoryEndpoint("mock:invalid", MockEndpoint.class);
-    }
-
+public class ValidationWithExceptionTest extends ValidationTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
+                exception(ValidationException.class).to("mock:invalid");
+
                 from("direct:start").
-                        tryBlock().
-                            process(validator).
-                            to("mock:valid").
-                        handle(ValidationException.class).to("mock:invalid");
+                        process(validator).
+                        to("mock:valid");
             }
         };
     }
-}
+}
\ No newline at end of file

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