You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/03/21 15:37:14 UTC

svn commit: r520900 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/impl/ camel-core/src/main/java/org/apache/camel/processor/ camel-core/src/main/resources/META-INF/services/org/...

Author: jstrachan
Date: Wed Mar 21 07:37:11 2007
New Revision: 520900

URL: http://svn.apache.org/viewvc?view=rev&rev=520900
Log:
added test cases showing the use of the errorHandler() DSL to configure error handlers for an entire set of routes or on a specific route. Also added a useful base class for test cases

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java   (with props)
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java   (with props)
    activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/pojo
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java   (with props)
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java   (with props)
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java   (contents, props changed)
      - copied, changed from r520860, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java
    activemq/camel/trunk/camel-core/src/test/resources/log4j.properties   (with props)
    activemq/camel/trunk/camel-jms/src/test/resources/
    activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties   (with props)
Removed:
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java
    activemq/camel/trunk/camel-core/src/test/resources/META-INF/
Modified:
    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/FromBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/InterceptorBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RecipientListBuilder.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/impl/DefaultCamelContext.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/Logger.java
    activemq/camel/trunk/camel-xbean/src/test/java/org/apache/camel/xbean/XBeanRouteBuilderTest.java

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?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- 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 Wed Mar 21 07:37:11 2007
@@ -16,9 +16,11 @@
  */
 package org.apache.camel.builder;
 
-import org.apache.camel.Expression;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
+import org.apache.camel.Expression;
+import org.apache.camel.processor.LoggingLevel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Base class for implementation inheritance
@@ -26,12 +28,17 @@
  * @version $Revision: $
  */
 public abstract class BuilderSupport<E extends Exchange> {
-
     private ErrorHandlerBuilder<E> errorHandlerBuilder;
-                                                    
+
     protected BuilderSupport() {
     }
 
+    protected BuilderSupport(BuilderSupport<E> parent) {
+        if (parent.errorHandlerBuilder != null) {
+            this.errorHandlerBuilder = parent.errorHandlerBuilder.copy();
+        }
+    }
+
     // Builder methods
     //-------------------------------------------------------------------------
 
@@ -75,16 +82,50 @@
         return new ValueBuilder<E>(expression);
     }
 
+    /**
+     * Creates a disabled error handler for removing the default error handler
+     */
+    public NoErrorHandlerBuilder<E> noErrorHandler() {
+        return new NoErrorHandlerBuilder<E>();
+    }
 
-    // Properties
-    //-------------------------------------------------------------------------
+    /**
+     * Creates an error handler which just logs errors
+     */
+    public LoggingErrorHandlerBuilder<E> loggingErrorHandler() {
+        return new LoggingErrorHandlerBuilder<E>();
+    }
 
-    protected BuilderSupport(BuilderSupport<E> parent) {
-        if (parent.errorHandlerBuilder != null) {
-            this.errorHandlerBuilder = parent.errorHandlerBuilder.copy();
-        }
+    /**
+     * Creates an error handler which just logs errors
+     */
+    public LoggingErrorHandlerBuilder<E> loggingErrorHandler(String log) {
+        return loggingErrorHandler(LogFactory.getLog(log));
     }
 
+    /**
+     * Creates an error handler which just logs errors
+     */
+    public LoggingErrorHandlerBuilder<E> loggingErrorHandler(Log log) {
+        return new LoggingErrorHandlerBuilder<E>(log);
+    }
+
+    /**
+     * Creates an error handler which just logs errors
+     */
+    public LoggingErrorHandlerBuilder<E> loggingErrorHandler(Log log, LoggingLevel level) {
+        return new LoggingErrorHandlerBuilder<E>(log, level);
+    }
+
+    /*
+    public DeadLetterChannelBuilder<E> deadLetterChannel() {
+        return new DeadLetterChannelBuilder<E>();
+    }
+    */
+
+    // Properties
+    //-------------------------------------------------------------------------
+
     public ErrorHandlerBuilder<E> getErrorHandlerBuilder() {
         if (errorHandlerBuilder == null) {
             errorHandlerBuilder = new DeadLetterChannelBuilder<E>();
@@ -98,5 +139,4 @@
     public void setErrorHandlerBuilder(ErrorHandlerBuilder<E> errorHandlerBuilder) {
         this.errorHandlerBuilder = errorHandlerBuilder;
     }
-
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java Wed Mar 21 07:37:11 2007
@@ -16,18 +16,19 @@
  */
 package org.apache.camel.builder;
 
-import org.apache.camel.processor.CompositeProcessor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.Processor;
+import org.apache.camel.processor.CompositeProcessor;
 import org.apache.camel.processor.InterceptorProcessor;
 import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.processor.Pipeline;
-import org.apache.camel.Predicate;
-import org.apache.camel.Processor;
+import org.apache.camel.processor.RecipientList;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.Collection;
+import java.util.List;
 
 /**
  * @version $Revision$
@@ -39,11 +40,13 @@
     private List<ProcessorFactory<E>> processFactories = new ArrayList<ProcessorFactory<E>>();
 
     public FromBuilder(RouteBuilder<E> builder, Endpoint<E> from) {
+        super(builder);
         this.builder = builder;
         this.from = from;
     }
 
     public FromBuilder(FromBuilder<E> parent) {
+        super(parent);
         this.builder = parent.getBuilder();
         this.from = parent.getFrom();
     }
@@ -71,7 +74,6 @@
         return endpoints;
     }
 
-
     /**
      * Sends the exchange to the given endpoint URI
      */
@@ -88,7 +90,6 @@
         return answer;
     }
 
-
     /**
      * Sends the exchange to a list of endpoints using the {@link MulticastProcessor} pattern
      */
@@ -103,7 +104,6 @@
         return to(endpoints(endpoints));
     }
 
-
     /**
      * Sends the exchange to a list of endpoint using the {@link MulticastProcessor} pattern
      */
@@ -144,8 +144,6 @@
         return answer;
     }
 
-
-
     /**
      * Creates a predicate which is applied and only if it is true then
      * the exchange is forwarded to the destination
@@ -158,7 +156,6 @@
         return answer;
     }
 
-
     /**
      * Creates a choice of one or more predicates with an otherwise clause
      *
@@ -172,8 +169,8 @@
 
     /**
      * Creates a dynamic <a href="http://activemq.apache.org/camel/recipient-list.html">Recipient List</a> pattern.
-     * 
-     * @param valueBuilder
+     *
+     * @param valueBuilder is the builder of the expression used in the {@link RecipientList} to decide the destinations
      */
     public RecipientListBuilder<E> recipientList(ValueBuilder<E> valueBuilder) {
         RecipientListBuilder<E> answer = new RecipientListBuilder<E>(this, valueBuilder);
@@ -189,11 +186,22 @@
      * @return the builder
      */
     public SplitterBuilder<E> splitter(ValueBuilder<E> valueBuilder) {
-              SplitterBuilder<E> answer = new SplitterBuilder<E>(this, valueBuilder);
+        SplitterBuilder<E> answer = new SplitterBuilder<E>(this, valueBuilder);
         addProcessBuilder(answer);
         return answer;
     }
 
+    /**
+     * Installs the given error handler builder
+     *
+     * @param errorHandlerBuilder the error handler to be used by default for all child routes
+     * @return the current builder with the error handler configured
+     */
+    public FromBuilder<E> errorHandler(ErrorHandlerBuilder errorHandlerBuilder) {
+        setErrorHandlerBuilder(errorHandlerBuilder);
+        return this;
+    }
+
     // Properties
     //-------------------------------------------------------------------------
     public RouteBuilder<E> getBuilder() {
@@ -246,16 +254,16 @@
         return processors;
     }
 
-	public InterceptorBuilder<E> intercept() {
-		InterceptorBuilder<E> answer = new InterceptorBuilder<E>(this);
+    public InterceptorBuilder<E> intercept() {
+        InterceptorBuilder<E> answer = new InterceptorBuilder<E>(this);
         addProcessBuilder(answer);
         return answer;
-	}
-	
-	public InterceptorBuilder<E> intercept(InterceptorProcessor<E> interceptor) {
-		InterceptorBuilder<E> answer = new InterceptorBuilder<E>(this);
-		answer.add(interceptor);
+    }
+
+    public InterceptorBuilder<E> intercept(InterceptorProcessor<E> interceptor) {
+        InterceptorBuilder<E> answer = new InterceptorBuilder<E>(this);
+        answer.add(interceptor);
         addProcessBuilder(answer);
         return answer;
-	}
+    }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/InterceptorBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/InterceptorBuilder.java?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/InterceptorBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/InterceptorBuilder.java Wed Mar 21 07:37:11 2007
@@ -34,7 +34,7 @@
 	private FromBuilder<E> target;
 
 	public InterceptorBuilder(FromBuilder<E> parent) {
-		this.parent = parent;
+        this.parent = parent;
 	}
 
 	public InterceptorBuilder<E> add(InterceptorProcessor<E> intercept) {

Added: 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=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,75 @@
+/**
+ *
+ * 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.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.processor.Logger;
+import org.apache.camel.processor.LoggingLevel;
+import org.apache.camel.processor.LoggingErrorHandler;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Uses the {@link Logger} as an error handler
+ * 
+ * @version $Revision$
+ */
+public class LoggingErrorHandlerBuilder<E extends Exchange> extends BuilderSupport<E> implements ErrorHandlerBuilder<E> {
+    private Log log = LogFactory.getLog(Logger.class);
+    private LoggingLevel level = LoggingLevel.INFO;
+
+    public LoggingErrorHandlerBuilder() {
+    }
+
+    public LoggingErrorHandlerBuilder(Log log) {
+        this.log = log;
+    }
+
+    public LoggingErrorHandlerBuilder(Log log, LoggingLevel level) {
+        this.log = log;
+        this.level = level;
+    }
+
+    public ErrorHandlerBuilder<E> copy() {
+        LoggingErrorHandlerBuilder<E> answer = new LoggingErrorHandlerBuilder<E>();
+        answer.setLog(getLog());
+        answer.setLevel(getLevel());
+        return answer;
+    }
+
+    public Processor<E> createErrorHandler(Processor<E> processor) {
+        return new LoggingErrorHandler<E>(processor, log, level);
+    }
+
+    public LoggingLevel getLevel() {
+        return level;
+    }
+
+    public void setLevel(LoggingLevel level) {
+        this.level = level;
+    }
+
+    public Log getLog() {
+        return log;
+    }
+
+    public void setLog(Log log) {
+        this.log = log;
+    }
+}

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

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 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=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,40 @@
+/**
+ *
+ * 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.Exchange;
+import org.apache.camel.Processor;
+
+/**
+ * A builder to disable the use of an error handler so that any exceptions are thrown.
+ * This not recommended in general, the
+ * <a href="http://activemq.apache.org/camel/dead-letter-channel.html">Dead Letter Channel</a> should be used
+ * if you are unsure; however it can be useful sometimes to disable an error handler inside a complex route
+ * so that exceptions bubble up to the parent {@link Processor}
+ *
+ * @version $Revision$
+ */
+public class NoErrorHandlerBuilder<E extends Exchange> extends BuilderSupport<E> implements ErrorHandlerBuilder<E> {
+    public ErrorHandlerBuilder<E> copy() {
+        return this;
+    }
+
+    public Processor<E> createErrorHandler(Processor<E> processor) {
+        return processor;
+    }
+}

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

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RecipientListBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RecipientListBuilder.java?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RecipientListBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/RecipientListBuilder.java Wed Mar 21 07:37:11 2007
@@ -30,8 +30,8 @@
 public class RecipientListBuilder<E extends Exchange> extends BuilderSupport<E> implements ProcessorFactory<E> {
     private final ValueBuilder<E> valueBuilder;
 
-    public RecipientListBuilder(FromBuilder<E> fromBuilder, ValueBuilder<E> valueBuilder) {
-        super();
+    public RecipientListBuilder(FromBuilder<E> parent, ValueBuilder<E> valueBuilder) {
+        super(parent);
         this.valueBuilder = valueBuilder;
     }
 

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=520900&r1=520899&r2=520900
==============================================================================
--- 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 Wed Mar 21 07:37:11 2007
@@ -35,7 +35,7 @@
  * @version $Revision$
  */
 public abstract class RouteBuilder<E extends Exchange> extends BuilderSupport<E> {
-    private CamelContext<E> container;
+    private CamelContext<E> context;
     private List<FromBuilder<E>> fromBuilders = new ArrayList<FromBuilder<E>>();
     private AtomicBoolean initalized = new AtomicBoolean(false);
     private Map<Endpoint<E>, Processor<E>> routeMap = new HashMap<Endpoint<E>, Processor<E>>();
@@ -43,8 +43,8 @@
     protected RouteBuilder() {
     }
 
-    protected RouteBuilder(CamelContext<E> container) {
-        this.container = container;
+    protected RouteBuilder(CamelContext<E> context) {
+        this.context = context;
     }
 
     /**
@@ -56,7 +56,7 @@
      * Resolves the given URI to an endpoint
      */
     public Endpoint<E> endpoint(String uri) {
-         CamelContext<E> c = getContainer();
+         CamelContext<E> c = getContext();
          EndpointResolver<E> er = c.getEndpointResolver();
          return er.resolveEndpoint(c, uri);
     }
@@ -71,19 +71,28 @@
         return answer;
     }
 
+    /**
+     * Installs the given error handler builder
+     * @param errorHandlerBuilder the error handler to be used by default for all child routes
+     * @return the current builder with the error handler configured
+     */
+    public RouteBuilder<E> errorHandler(ErrorHandlerBuilder errorHandlerBuilder) {
+        setErrorHandlerBuilder(errorHandlerBuilder);
+        return this;
+    }
 
     // Properties
     //-----------------------------------------------------------------------
 
-    public CamelContext<E> getContainer() {
-        if (container == null) {
-            container = createContainer();
+    public CamelContext<E> getContext() {
+        if (context == null) {
+            context = createContainer();
         }
-        return container;
+        return context;
     }
 
-    public void setContainer(CamelContext<E> container) {
-        this.container = container;
+    public void setContext(CamelContext<E> context) {
+        this.context = context;
     }
 
     /**

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?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- 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 Wed Mar 21 07:37:11 2007
@@ -147,7 +147,7 @@
 
     public void setRoutes(RouteBuilder<E> builder) {
         // lets now add the routes from the builder
-        builder.setContainer(this);
+        builder.setContext(this);
         setRoutes(builder.getRouteMap());
     }
 

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=520900&r1=520899&r2=520900
==============================================================================
--- 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 Wed Mar 21 07:37:11 2007
@@ -29,7 +29,7 @@
  *
  * @version $Revision$
  */
-public class DeadLetterChannel<E extends Exchange> implements Processor<E> {
+public class DeadLetterChannel<E extends Exchange> implements ErrorHandler<E> {
     public static final String REDELIVERY_COUNT_HEADER = "org.apache.camel.redeliveryCount";
 
     private static final transient Log log = LogFactory.getLog(DeadLetterChannel.class);

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,29 @@
+/**
+ *
+ * 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;
+
+/**
+ * An interface used to represent an error handler
+ *
+ * @version $Revision$
+ */
+public interface ErrorHandler<E extends Exchange> extends Processor<E> {
+}

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

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/ErrorHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java Wed Mar 21 07:37:11 2007
@@ -30,18 +30,24 @@
  */
 public class Logger<E extends Exchange> implements Processor<E> {
     private Log log;
-    private Level level = Level.INFO;
-
-    public static enum Level {
-        DEBUG, ERROR, FATAL, INFO, TRACE, WARN;
-    };
+    private LoggingLevel level;
 
     public Logger() {
         this(LogFactory.getLog(Logger.class));
     }
 
     public Logger(Log log) {
+        this(log, LoggingLevel.INFO);
+    }
+
+    public Logger(Log log, LoggingLevel level) {
         this.log = log;
+        this.level = level;
+    }
+
+    @Override
+    public String toString() {
+        return "Logger[" + log + "]";
     }
 
     public void onExchange(E exchange) {

Added: 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=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,127 @@
+/**
+ *
+ * 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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * An {@link ErrorHandler} which uses commons-logging to dump the error
+ *
+ * @version $Revision$
+ */
+public class LoggingErrorHandler<E extends Exchange> implements ErrorHandler<E> {
+    private Processor<E> output;
+    private Log log;
+    private LoggingLevel level;
+
+    public LoggingErrorHandler(Processor<E> output) {
+        this(output, LogFactory.getLog(LoggingErrorHandler.class), LoggingLevel.INFO);
+    }
+
+    public LoggingErrorHandler(Processor<E> output, Log log, LoggingLevel level) {
+        this.output = output;
+        this.log = log;
+        this.level = level;
+    }
+
+    @Override
+    public String toString() {
+        return "LoggingErrorHandler[" + output + "]";
+    }
+
+    public void onExchange(E exchange) {
+        try {
+            output.onExchange(exchange);
+        }
+        catch (RuntimeException e) {
+            logError(exchange, e);
+        }
+    }
+
+    // Properties
+    //-------------------------------------------------------------------------
+
+    /**
+     * Returns the output processor
+     */
+    public Processor<E> getOutput() {
+        return output;
+    }
+
+    public LoggingLevel getLevel() {
+        return level;
+    }
+
+    public void setLevel(LoggingLevel level) {
+        this.level = level;
+    }
+
+    public Log getLog() {
+        return log;
+    }
+
+    public void setLog(Log log) {
+        this.log = log;
+    }
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+    protected void logError(E exchange, RuntimeException e) {
+        switch (level) {
+            case DEBUG:
+                if (log.isDebugEnabled()) {
+                    log.debug(logMessage(exchange, e), e);
+                }
+                break;
+            case ERROR:
+                if (log.isErrorEnabled()) {
+                    log.error(logMessage(exchange, e), e);
+                }
+                break;
+            case FATAL:
+                if (log.isFatalEnabled()) {
+                    log.fatal(logMessage(exchange, e), e);
+                }
+                break;
+            case INFO:
+                if (log.isInfoEnabled()) {
+                    log.debug(logMessage(exchange, e), e);
+                }
+                break;
+            case TRACE:
+                if (log.isTraceEnabled()) {
+                    log.trace(logMessage(exchange, e), e);
+                }
+                break;
+            case WARN:
+                if (log.isWarnEnabled()) {
+                    log.warn(logMessage(exchange, e), e);
+                }
+                break;
+            default:
+                log.error("Unknown level: " + level + " when trying to log exchange: " + logMessage(exchange, e), e);
+        }
+    }
+
+    protected Object logMessage(E exchange, RuntimeException e) {
+        return e + " while processing exchange: " + exchange;
+    }
+}

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

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingErrorHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,27 @@
+/**
+ *
+ * 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;
+
+/**
+ * Used to configure the logging levels
+ *
+ * @version $Revision$
+*/
+public enum LoggingLevel {
+    DEBUG, ERROR, FATAL, INFO, TRACE, WARN;
+}

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

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/LoggingLevel.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/pojo
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/pojo?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/pojo (added)
+++ activemq/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/EndpointResolver/pojo Wed Mar 21 07:37:11 2007
@@ -0,0 +1 @@
+class=org.apache.camel.pojo.PojoEndpointResolver

Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,39 @@
+/**
+ *
+ * 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;
+
+import junit.framework.TestCase;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A bunch of useful testing methods
+ * 
+ * @version $Revision$
+ */
+public abstract class TestSupport extends TestCase {
+
+    protected transient Log log = LogFactory.getLog(getClass());
+
+    protected <T> T assertIsInstanceOf(Class<T> expectedType, Object value) {
+        assertNotNull("Expected an instance of type: " + expectedType.getName() + " but was null", value);
+        assertTrue("object should be a " + expectedType.getName() + " but was: " + value + " with type: " + value.getClass().getName(),
+                expectedType.isInstance(value));
+        return expectedType.cast(value);
+    }
+}

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

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/TestSupport.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java (added)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java Wed Mar 21 07:37:11 2007
@@ -0,0 +1,100 @@
+/**
+ *
+ * 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 junit.framework.TestCase;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.TestSupport;
+import org.apache.camel.processor.LoggingErrorHandler;
+import org.apache.camel.processor.SendProcessor;
+import org.apache.camel.processor.DeadLetterChannel;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @version $Revision$
+ */
+public class ErrorHandlerTest extends TestSupport {
+    public void testOverloadingTheDefaultErrorHandler() throws Exception {
+
+        // START SNIPPET: e1
+        RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+            public void configure() {
+                errorHandler(loggingErrorHandler("FOO.BAR"));
+
+                from("queue:a").to("queue:b");
+            }
+        };
+        // END SNIPPET: e1
+        RouteBuilder<Exchange> builder = builder1;
+
+        Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
+        Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
+        assertEquals("Number routes created", 1, routes.size());
+        for (Map.Entry<Endpoint<Exchange>, Processor<Exchange>> route : routes) {
+            Endpoint<Exchange> key = route.getKey();
+            assertEquals("From endpoint", "queue:a", key.getEndpointUri());
+            Processor processor = route.getValue();
+
+            LoggingErrorHandler loggingProcessor = assertIsInstanceOf(LoggingErrorHandler.class, processor);
+        }
+    }
+
+    public void testOverloadingTheHandlerOnASingleRoute() throws Exception {
+
+        // START SNIPPET: e2
+        RouteBuilder<Exchange> builder1 = new RouteBuilder<Exchange>() {
+            public void configure() {
+                from("queue:a").errorHandler(loggingErrorHandler("FOO.BAR")).to("queue:b");
+
+                // this route will use the default error handler, DeadLetterChannel
+                from("queue:b").to("queue:c");
+            }
+        };
+        // END SNIPPET: e2
+        RouteBuilder<Exchange> builder = builder1;
+
+        Map<Endpoint<Exchange>, Processor<Exchange>> routeMap = builder.getRouteMap();
+        log.info(routeMap);
+
+        Set<Map.Entry<Endpoint<Exchange>, Processor<Exchange>>> routes = routeMap.entrySet();
+        assertEquals("Number routes created", 2, routes.size());
+        for (Map.Entry<Endpoint<Exchange>, Processor<Exchange>> route : routes) {
+            Endpoint<Exchange> key = route.getKey();
+            String endpointUri = key.getEndpointUri();
+            Processor processor = route.getValue();
+
+            if (endpointUri.equals("queue:a")) {
+                LoggingErrorHandler loggingProcessor = assertIsInstanceOf(LoggingErrorHandler.class, processor);
+
+                Processor outputProcessor = loggingProcessor.getOutput();
+                SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, outputProcessor);
+            }
+            else {
+                assertEquals("From endpoint", "queue:b", endpointUri);
+
+                DeadLetterChannel deadLetterChannel = assertIsInstanceOf(DeadLetterChannel.class, processor);
+                Processor outputProcessor = deadLetterChannel.getOutput();
+                SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, outputProcessor);
+            }
+        }
+    }
+}

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

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java (from r520860, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java?view=diff&rev=520900&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java&r1=520860&p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/RouteBuilderTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java Wed Mar 21 07:37:11 2007
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel;
+package org.apache.camel.builder;
 
 import junit.framework.TestCase;
 import org.apache.camel.builder.RouteBuilder;
@@ -26,6 +26,10 @@
 import org.apache.camel.processor.Splitter;
 import org.apache.camel.processor.DeadLetterChannel;
 import org.apache.camel.processor.MulticastProcessor;
+import org.apache.camel.TestSupport;
+import org.apache.camel.Processor;
+import org.apache.camel.Exchange;
+import org.apache.camel.Endpoint;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,7 +39,7 @@
 /**
  * @version $Revision$
  */
-public class RouteBuilderTest extends TestCase {
+public class RouteBuilderTest extends TestSupport {
     protected Processor<Exchange> myProcessor = new Processor<Exchange>() {
         public void onExchange(Exchange exchange) {
             System.out.println("Called with exchange: " + exchange);
@@ -71,8 +75,7 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a SendProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof SendProcessor);
-            SendProcessor sendProcessor = (SendProcessor) processor;
+            SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, processor);
             assertEquals("Endpoint URI", "queue:b", sendProcessor.getDestination().getEndpointUri());
         }
     }
@@ -101,10 +104,8 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a FilterProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof FilterProcessor);
-            FilterProcessor filterProcessor = (FilterProcessor) processor;
-
-            SendProcessor sendProcessor = (SendProcessor) unwrapErrorHandler(filterProcessor.getProcessor());
+            FilterProcessor filterProcessor = assertIsInstanceOf(FilterProcessor.class, processor);
+    SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, unwrapErrorHandler(filterProcessor.getProcessor()));
             assertEquals("Endpoint URI", "queue:b", sendProcessor.getDestination().getEndpointUri());
         }
     }
@@ -137,9 +138,7 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a ChoiceProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof ChoiceProcessor);
-            ChoiceProcessor<Exchange> choiceProcessor = (ChoiceProcessor<Exchange>) processor;
-
+            ChoiceProcessor<Exchange> choiceProcessor = assertIsInstanceOf(ChoiceProcessor.class, processor);
             List<FilterProcessor<Exchange>> filters = choiceProcessor.getFilters();
             assertEquals("Should be two when clauses", 2, filters.size());
 
@@ -211,8 +210,7 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a FilterProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof FilterProcessor);
-            FilterProcessor filterProcessor = (FilterProcessor) processor;
+            FilterProcessor filterProcessor = assertIsInstanceOf(FilterProcessor.class, processor);
             assertEquals("Should be called with my processor", myProcessor, unwrapErrorHandler(filterProcessor.getProcessor()));
         }
     }
@@ -242,9 +240,7 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a MulticastProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof MulticastProcessor);
-            MulticastProcessor<Exchange> multicastProcessor = (MulticastProcessor<Exchange>) processor;
-
+            MulticastProcessor<Exchange> multicastProcessor = assertIsInstanceOf(MulticastProcessor.class, processor);
             List<Endpoint<Exchange>> endpoints = new ArrayList<Endpoint<Exchange>>(multicastProcessor.getEndpoints());
             assertEquals("Should have 2 endpoints", 2, endpoints.size());
 
@@ -293,12 +289,10 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a interceptor1 but was: " + processor + " with type: " + processor.getClass().getName(), processor==interceptor1);
-            InterceptorProcessor<Exchange> p1 = (InterceptorProcessor<Exchange>) processor;
-
+            InterceptorProcessor<Exchange> p1 = assertIsInstanceOf(InterceptorProcessor.class, processor);
             processor = p1.getNext();
-            assertTrue("Processor should be a interceptor2 but was: " + processor + " with type: " + processor.getClass().getName(), processor==interceptor2);
-            InterceptorProcessor<Exchange> p2 = (InterceptorProcessor<Exchange>) processor;
+
+            InterceptorProcessor<Exchange> p2 = assertIsInstanceOf(InterceptorProcessor.class, processor);
 
             assertSendTo(p2.getNext(), "queue:d");
         }
@@ -326,10 +320,9 @@
 
             System.out.println("processor: " + processor);
             /* TODO
-            assertTrue("Processor should be a FilterProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof FilterProcessor);
-            FilterProcessor filterProcessor = (FilterProcessor) processor;
+            FilterProcessor filterProcessor = assertIsInstanceOf(FilterProcessor.class, processor);
 
-            SendProcessor sendProcessor = (SendProcessor) filterProcessor.getProcessor();
+            SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, filterProcessor.getProcessor());
             assertEquals("Endpoint URI", "queue:b", sendProcessor.getDestination().getEndpointUri());
             */
         }
@@ -371,8 +364,7 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a RecipientList but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof RecipientList);
-            RecipientList<Exchange> p1 = (RecipientList<Exchange>) processor;
+            RecipientList<Exchange> p1 = assertIsInstanceOf(RecipientList.class, processor);
         }
     }
     protected RouteBuilder<Exchange> buildSplitter() {
@@ -400,17 +392,14 @@
             assertEquals("From endpoint", "queue:a", key.getEndpointUri());
             Processor processor = getProcessorWithoutErrorHandler(route);
 
-            assertTrue("Processor should be a Splitter but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof Splitter);
-            Splitter<Exchange> p1 = (Splitter<Exchange>) processor;
+            Splitter<Exchange> p1 = assertIsInstanceOf(Splitter.class, processor);
         }
     }
 
     protected void assertSendTo(Processor processor, String uri) {
         processor = unwrapErrorHandler(processor);
-        
-        assertTrue("Processor should be a SendProcessor but was: " + processor + " with type: " + processor.getClass().getName(), processor instanceof SendProcessor);
 
-        SendProcessor sendProcessor = (SendProcessor) processor;
+        SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, processor);
         assertEquals("Endpoint URI", uri, sendProcessor.getDestination().getEndpointUri());
     }
 

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

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: activemq/camel/trunk/camel-core/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/resources/log4j.properties?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/resources/log4j.properties (added)
+++ activemq/camel/trunk/camel-core/src/test/resources/log4j.properties Wed Mar 21 07:37:11 2007
@@ -0,0 +1,30 @@
+## ------------------------------------------------------------------------
+## 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.
+## ------------------------------------------------------------------------
+
+#
+# The logging properties used for eclipse testing, We want to see debug output on the console.
+#
+log4j.rootLogger=INFO, out
+
+#log4j.logger.org.apache.activemq=DEBUG
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

Propchange: activemq/camel/trunk/camel-core/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-core/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-core/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties?view=auto&rev=520900
==============================================================================
--- activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties (added)
+++ activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties Wed Mar 21 07:37:11 2007
@@ -0,0 +1,30 @@
+## ------------------------------------------------------------------------
+## 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.
+## ------------------------------------------------------------------------
+
+#
+# The logging properties used for eclipse testing, We want to see debug output on the console.
+#
+log4j.rootLogger=INFO, out
+
+#log4j.logger.org.apache.activemq=DEBUG
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

Propchange: activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: activemq/camel/trunk/camel-jms/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: activemq/camel/trunk/camel-xbean/src/test/java/org/apache/camel/xbean/XBeanRouteBuilderTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-xbean/src/test/java/org/apache/camel/xbean/XBeanRouteBuilderTest.java?view=diff&rev=520900&r1=520899&r2=520900
==============================================================================
--- activemq/camel/trunk/camel-xbean/src/test/java/org/apache/camel/xbean/XBeanRouteBuilderTest.java (original)
+++ activemq/camel/trunk/camel-xbean/src/test/java/org/apache/camel/xbean/XBeanRouteBuilderTest.java Wed Mar 21 07:37:11 2007
@@ -17,7 +17,7 @@
 package org.apache.camel.xbean;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.RouteBuilderTest;
+import org.apache.camel.builder.RouteBuilderTest;
 import org.apache.camel.builder.RouteBuilder;
 
 /**