Author: jstrachan
Date: Thu Jul 3 15:04:23 2008
New Revision: 673837
URL: http://svn.apache.org/viewvc?rev=673837&view=rev
Log:
applied fix for https://issues.apache.org/activemq/browse/CAMEL-662 to allow
error handlers to be customized on a <camelContext/> or a <pipeline> or other
<route> element
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
(with props)
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
(with props)
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
(with props)
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
- copied, changed from r673699,
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
Thu Jul 3 15:04:23 2008
@@ -18,6 +18,7 @@
import org.apache.camel.Expression;
import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
import org.apache.camel.processor.DeadLetterChannel;
import org.apache.camel.processor.ErrorHandlerSupport;
import org.apache.camel.processor.Logger;
@@ -61,7 +62,7 @@
return answer;
}
- public Processor createErrorHandler(Processor processor) throws Exception {
+ public Processor createErrorHandler(RouteContext routeContext, Processor
processor) throws Exception {
Processor deadLetter = getDeadLetterFactory().createProcessor();
DeadLetterChannel answer = new DeadLetterChannel(processor,
deadLetter, getRedeliveryPolicy(), getLogger(), getExceptionPolicyStrategy());
configure(answer);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilder.java
Thu Jul 3 15:04:23 2008
@@ -17,6 +17,7 @@
package org.apache.camel.builder;
import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
import org.apache.camel.model.ExceptionType;
/**
@@ -34,7 +35,7 @@
/**
* Creates the error handler interceptor
*/
- Processor createErrorHandler(Processor processor) throws Exception;
+ Processor createErrorHandler(RouteContext routeContext, Processor
processor) throws Exception;
/**
* Adds error handler for the given exception type
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java?rev=673837&view=auto
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
(added)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
Thu Jul 3 15:04:23 2008
@@ -0,0 +1,64 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder;
+
+import org.apache.camel.Processor;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.model.ExceptionType;
+import org.apache.camel.spi.RouteContext;
+
+import java.util.List;
+
+/**
+ * Represents a proxy to an error handler builder which is resolved by named
reference
+ *
+ * @version $Revision: 1.1 $
+ */
+public class ErrorHandlerBuilderRef extends ErrorHandlerBuilderSupport {
+ private final String ref;
+ private ErrorHandlerBuilder handler;
+
+ public ErrorHandlerBuilderRef(String ref) {
+ this.ref = ref;
+ }
+
+ public ErrorHandlerBuilder copy() {
+ return new ErrorHandlerBuilderRef(ref);
+ }
+
+ @Override
+ public void addErrorHandlers(ExceptionType exception) {
+ if (handler != null) {
+ handler.addErrorHandlers(exception);
+ }
+ super.addErrorHandlers(exception);
+ }
+
+ public Processor createErrorHandler(RouteContext routeContext, Processor
processor) throws Exception {
+ if (handler == null) {
+ System.out.println("Looking up error handler: " + ref);
+ handler = routeContext.lookup(ref, ErrorHandlerBuilder.class);
+ ObjectHelper.notNull(handler, "error handler '" + ref + "'");
+ List<ExceptionType> list = getExceptions();
+ for (ExceptionType exceptionType : list) {
+ handler.addErrorHandlers(exceptionType);
+ }
+ }
+ return handler.createErrorHandler(routeContext, processor);
+ }
+}
Propchange:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java
Thu Jul 3 15:04:23 2008
@@ -39,4 +39,8 @@
handler.addExceptionPolicy(exception);
}
}
+
+ public List<ExceptionType> getExceptions() {
+ return exceptions;
+ }
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/LoggingErrorHandlerBuilder.java
Thu Jul 3 15:04:23 2008
@@ -17,6 +17,7 @@
package org.apache.camel.builder;
import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
import org.apache.camel.processor.Logger;
import org.apache.camel.processor.LoggingErrorHandler;
import org.apache.camel.processor.LoggingLevel;
@@ -51,7 +52,7 @@
return answer;
}
- public Processor createErrorHandler(Processor processor) {
+ public Processor createErrorHandler(RouteContext routeContext, Processor
processor) {
LoggingErrorHandler handler = new LoggingErrorHandler(processor, log,
level);
configure(handler);
return handler;
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
Thu Jul 3 15:04:23 2008
@@ -17,6 +17,7 @@
package org.apache.camel.builder;
import org.apache.camel.Processor;
+import org.apache.camel.spi.RouteContext;
/**
* A builder to disable the use of an error handler so that any exceptions are
thrown.
@@ -32,7 +33,7 @@
return this;
}
- public Processor createErrorHandler(Processor processor) {
+ public Processor createErrorHandler(RouteContext routeContext, Processor
processor) {
return processor;
}
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
Thu Jul 3 15:04:23 2008
@@ -42,6 +42,7 @@
import org.apache.camel.spi.BrowsableEndpoint;
import org.apache.camel.util.ExpressionComparator;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.CamelContextHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -82,6 +83,18 @@
init();
}
+
+ /**
+ * A helper method to resolve the mock endpoint of the given URI on the
given context
+ *
+ * @param context the camel context to try resolve the mock endpoint from
+ * @param uri the uri of the endpoint to resolve
+ * @return the endpoint
+ */
+ public static MockEndpoint resolve(CamelContext context, String uri) {
+ return CamelContextHelper.getMandatoryEndpoint(context, uri,
MockEndpoint.class);
+ }
+
public static void assertWait(long timeout, TimeUnit unit, MockEndpoint...
endpoints) throws InterruptedException {
long start = System.currentTimeMillis();
long left = unit.toMillis(timeout);
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
Thu Jul 3 15:04:23 2008
@@ -38,6 +38,7 @@
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.Service;
import org.apache.camel.TypeConverter;
+import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.management.InstrumentationLifecycleStrategy;
import org.apache.camel.management.JmxSystemPropertyKeys;
@@ -89,6 +90,7 @@
private List<RouteType> routeDefinitions = new ArrayList<RouteType>();
private List<InterceptStrategy> interceptStrategies = new
ArrayList<InterceptStrategy>();
private Boolean trace;
+ private ErrorHandlerBuilder errorHandlerBuilder;
public DefaultCamelContext() {
name = NAME_PREFIX + ++nameSuffix;
@@ -467,6 +469,21 @@
this.trace = trace;
}
+ public <E extends Exchange> ProducerTemplate<E> createProducerTemplate() {
+ return new DefaultProducerTemplate<E>(this);
+ }
+
+ public ErrorHandlerBuilder getErrorHandlerBuilder() {
+ return errorHandlerBuilder;
+ }
+
+ /**
+ * Sets the default error handler builder which is inherited by the routes
+ */
+ public void setErrorHandlerBuilder(ErrorHandlerBuilder
errorHandlerBuilder) {
+ this.errorHandlerBuilder = errorHandlerBuilder;
+ }
+
// Implementation methods
// -----------------------------------------------------------------------
@@ -626,8 +643,5 @@
return isStarted() && !isStarting();
}
- public <E extends Exchange> ProducerTemplate<E> createProducerTemplate() {
- return new DefaultProducerTemplate<E>(this);
- }
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/management/InstrumentationErrorHandlerWrappingStrategy.java
Thu Jul 3 15:04:23 2008
@@ -21,6 +21,7 @@
import org.apache.camel.Processor;
import org.apache.camel.model.ProcessorType;
import org.apache.camel.spi.ErrorHandlerWrappingStrategy;
+import org.apache.camel.spi.RouteContext;
/**
* @version $Revision$
@@ -35,12 +36,12 @@
this.counterMap = counterMap;
}
- public Processor wrapProcessorInErrorHandler(ProcessorType processorType,
- Processor target) throws Exception {
+ public Processor wrapProcessorInErrorHandler(RouteContext routeContext,
ProcessorType processorType,
+ Processor target) throws
Exception {
// don't wrap our instrumentation interceptors
if (counterMap.containsKey(processorType)) {
- return
processorType.getErrorHandlerBuilder().createErrorHandler(target);
+ return
processorType.getErrorHandlerBuilder().createErrorHandler(routeContext, target);
}
return target;
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
Thu Jul 3 15:04:23 2008
@@ -43,6 +43,7 @@
import org.apache.camel.builder.DataFormatClause;
import org.apache.camel.builder.DeadLetterChannelBuilder;
import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderRef;
import org.apache.camel.builder.ExpressionClause;
import org.apache.camel.builder.NoErrorHandlerBuilder;
import org.apache.camel.builder.ProcessorBuilder;
@@ -79,6 +80,7 @@
private LinkedList<Block> blocks = new LinkedList<Block>();
private ProcessorType<? extends ProcessorType> parent;
private List<InterceptorType> interceptors = new
ArrayList<InterceptorType>();
+ private String errorHandlerRef;
// else to use an optional attribute in JAXB2
public abstract List<ProcessorType<?>> getOutputs();
@@ -1444,6 +1446,28 @@
this.errorHandlerBuilder = errorHandlerBuilder;
}
+ /**
+ * Sets the error handler if one is not already set
+ */
+ protected void setErrorHandlerBuilderIfNull(ErrorHandlerBuilder
errorHandlerBuilder) {
+ if (this.errorHandlerBuilder == null) {
+ setErrorHandlerBuilder(errorHandlerBuilder);
+ }
+ }
+
+ public String getErrorHandlerRef() {
+ return errorHandlerRef;
+ }
+
+ /**
+ * Sets the bean ref name of the error handler builder to use on this route
+ */
+ @XmlAttribute(required = false)
+ public void setErrorHandlerRef(String errorHandlerRef) {
+ this.errorHandlerRef = errorHandlerRef;
+ setErrorHandlerBuilder(new ErrorHandlerBuilderRef(errorHandlerRef));
+ }
+
@XmlTransient
public boolean isInheritErrorHandler() {
return isInheritErrorHandler(getInheritErrorHandlerFlag());
@@ -1562,13 +1586,16 @@
ErrorHandlerWrappingStrategy strategy =
routeContext.getErrorHandlerWrappingStrategy();
if (strategy != null) {
- return strategy.wrapProcessorInErrorHandler(this, target);
+ return strategy.wrapProcessorInErrorHandler(routeContext, this,
target);
}
- return getErrorHandlerBuilder().createErrorHandler(target);
+ return getErrorHandlerBuilder().createErrorHandler(routeContext,
target);
}
protected ErrorHandlerBuilder createErrorHandlerBuilder() {
+ if (errorHandlerRef != null) {
+ return new ErrorHandlerBuilderRef(errorHandlerRef);
+ }
if (isInheritErrorHandler()) {
return new DeadLetterChannelBuilder();
} else {
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteType.java
Thu Jul 3 15:04:23 2008
@@ -33,7 +33,9 @@
import org.apache.camel.Endpoint;
import org.apache.camel.NoSuchEndpointException;
import org.apache.camel.Route;
+import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.processor.interceptor.StreamCachingInterceptor;
import org.apache.camel.spi.RouteContext;
import org.apache.camel.util.CamelContextHelper;
@@ -76,11 +78,20 @@
public void addRoutes(CamelContext context, Collection<Route> routes)
throws Exception {
setCamelContext(context);
+ if (context instanceof DefaultCamelContext) {
+ DefaultCamelContext defaultCamelContext = (DefaultCamelContext)
context;
+ ErrorHandlerBuilder handler =
defaultCamelContext.getErrorHandlerBuilder();
+ if (handler != null) {
+ setErrorHandlerBuilderIfNull(handler);
+ }
+ }
+
for (FromType fromType : inputs) {
addRoutes(routes, fromType);
}
}
+
public Endpoint resolveEndpoint(String uri) throws NoSuchEndpointException
{
CamelContext context = getCamelContext();
if (context == null) {
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesType.java
Thu Jul 3 15:04:23 2008
@@ -202,8 +202,9 @@
//-------------------------------------------------------------------------
protected RouteType createRoute() {
RouteType route = new RouteType();
- if (isInheritErrorHandler()) {
- route.setErrorHandlerBuilder(getErrorHandlerBuilder());
+ ErrorHandlerBuilder handler = getErrorHandlerBuilder();
+ if (isInheritErrorHandler() && handler != null) {
+ route.setErrorHandlerBuilderIfNull(handler);
}
return route;
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ErrorHandlerWrappingStrategy.java
Thu Jul 3 15:04:23 2008
@@ -37,7 +37,7 @@
* @return processor wrapped with an interceptor or not wrapped
* @throws Exception
*/
- Processor wrapProcessorInErrorHandler(ProcessorType processorType,
- Processor target) throws Exception;
+ Processor wrapProcessorInErrorHandler(RouteContext routeContext,
ProcessorType processorType,
+ Processor target) throws Exception;
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CamelContextHelper.java
Thu Jul 3 15:04:23 2008
@@ -58,6 +58,15 @@
}
/**
+ * Returns the mandatory endpoint for the given URI and type or the
+ * [EMAIL PROTECTED] org.apache.camel.NoSuchEndpointException} is thrown
+ */
+ public static <T extends Endpoint> T getMandatoryEndpoint(CamelContext
camelContext, String uri, Class<T> type) {
+ Endpoint endpoint = getMandatoryEndpoint(camelContext, uri);
+ return ObjectHelper.cast(type, endpoint);
+ }
+
+ /**
* Returns a list of all endpoints of the given type
*
* @param camelContext
Modified:
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=673837&r1=673836&r2=673837&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
(original)
+++
activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
Thu Jul 3 15:04:23 2008
@@ -31,6 +31,7 @@
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilder;
import org.apache.camel.impl.DefaultLifecycleStrategy;
import org.apache.camel.management.DefaultInstrumentationAgent;
import org.apache.camel.management.InstrumentationLifecycleStrategy;
@@ -74,6 +75,8 @@
private Boolean autowireRouteBuilders = Boolean.TRUE;
@XmlAttribute(required = false)
private Boolean trace;
+ @XmlAttribute(required = false)
+ private String errorHandlerRef;
@XmlElement(name = "package", required = false)
private String[] packages = {};
@XmlElement(name = "jmxAgent", type = CamelJMXAgentType.class, required =
false)
@@ -364,6 +367,20 @@
this.autowireRouteBuilders = autowireRouteBuilders;
}
+ public String getErrorHandlerRef() {
+ return errorHandlerRef;
+ }
+
+ /**
+ * Sets the name of the error handler object used to default the error
handling strategy
+ *
+ * @param errorHandlerRef the Spring bean ref of the error handler
+ */
+ public void setErrorHandlerRef(String errorHandlerRef) {
+ this.errorHandlerRef = errorHandlerRef;
+ }
+
+
// Implementation methods
//
-------------------------------------------------------------------------
@@ -376,6 +393,13 @@
if (trace != null) {
ctx.setTrace(trace);
}
+ if (errorHandlerRef != null) {
+ ErrorHandlerBuilder errorHandlerBuilder = (ErrorHandlerBuilder)
getApplicationContext().getBean(errorHandlerRef, ErrorHandlerBuilder.class);
+ if (errorHandlerBuilder == null) {
+ throw new IllegalArgumentException("Could not find bean: " +
errorHandlerRef);
+ }
+ ctx.setErrorHandlerBuilder(errorHandlerBuilder);
+ }
return ctx;
}
Added:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java?rev=673837&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
(added)
+++
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
Thu Jul 3 15:04:23 2008
@@ -0,0 +1,59 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.config;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.ErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilderSupport;
+import org.apache.camel.processor.DelegateProcessor;
+import org.apache.camel.spi.RouteContext;
+import org.springframework.beans.factory.BeanNameAware;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class DummyErrorHandlerBuilder extends ErrorHandlerBuilderSupport
implements BeanNameAware {
+ public static final String PROPERTY_NAME = "DummyErrorHandler";
+ private String beanName;
+
+ public DummyErrorHandlerBuilder() {
+ }
+
+ public DummyErrorHandlerBuilder(String beanName) {
+ this.beanName = beanName;
+ }
+
+ public void setBeanName(String beanName) {
+ this.beanName = beanName;
+ }
+
+ public ErrorHandlerBuilder copy() {
+ return new DummyErrorHandlerBuilder(beanName);
+ }
+
+ public Processor createErrorHandler(RouteContext routeContext, Processor
processor) throws Exception {
+ return new DelegateProcessor(processor) {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.setProperty(PROPERTY_NAME, beanName);
+ super.process(exchange);
+ }
+ };
+ }
+}
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java?rev=673837&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
(added)
+++
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
Thu Jul 3 15:04:23 2008
@@ -0,0 +1,57 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.config;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import
org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests;
+
+/**
+ * @version $Revision: 1.1 $
+ */
[EMAIL PROTECTED]
+public class ErrorHandlerConfigTest extends AbstractJUnit38SpringContextTests {
+
+ @Autowired
+ protected ProducerTemplate template;
+
+ @Autowired
+ protected CamelContext context;
+
+ protected Object expectedBody = "<hello>world!</hello>";
+
+ public void testRouteInheritsConfiguredErrorHandler() throws Exception {
+ assertReceivedMessageWithErrorHandlerValue("defaultErrorHandler",
"defaultErrorHandler");
+ }
+
+ public void testRouteConfiguredErrorHandler() throws Exception {
+ assertReceivedMessageWithErrorHandlerValue("customErrorHandler",
"customErrorHandler");
+ }
+
+ protected void assertReceivedMessageWithErrorHandlerValue(String name,
String value) throws InterruptedException {
+ template.sendBody("direct:" + name, expectedBody);
+
+ MockEndpoint endpoint = MockEndpoint.resolve(context, "mock:" + name);
+ endpoint.expectedMessageCount(1);
+
endpoint.message(0).header(DummyErrorHandlerBuilder.PROPERTY_NAME).isEqualTo(value);
+ endpoint.assertIsSatisfied();
+ }
+}
\ No newline at end of file
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerConfigTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
(from r673699,
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml?p2=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml&p1=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml&r1=673699&r2=673837&rev=673837&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/DependencyInjectCamelTemplateTest-context.xml
(original)
+++
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/config/ErrorHandlerConfigTest-context.xml
Thu Jul 3 15:04:23 2008
@@ -22,13 +22,19 @@
http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
">
+ <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"
errorHandlerRef="defaultErrorHandler">
+ <template id="myTemplate"/>
-
- <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
- <template id="myTemplate" defaultEndpoint="mock:results"/>
+ <route>
+ <from uri="direct:defaultErrorHandler"/>
+ <to uri="mock:defaultErrorHandler"/>
+ </route>
+ <route errorHandlerRef="customErrorHandler">
+ <from uri="direct:customErrorHandler"/>
+ <to uri="mock:customErrorHandler"/>
+ </route>
</camelContext>
- <bean id="myBean" class="org.apache.camel.spring.config.TemplateUsingBean">
- <property name="template" ref="myTemplate"/>
- </bean>
+ <bean id="defaultErrorHandler"
class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
+ <bean id="customErrorHandler"
class="org.apache.camel.spring.config.DummyErrorHandlerBuilder"/>
</beans>