CAMEL-6378: Add validation that onException must be configured on route scope level when using Java DSL.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9f527e43 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9f527e43 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9f527e43 Branch: refs/heads/master Commit: 9f527e431e4afe0f48a7da3dced6d2d4a778bc92 Parents: 6f489f1 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Aug 22 08:07:05 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Aug 22 09:13:49 2013 +0200 ---------------------------------------------------------------------- .../apache/camel/model/ProcessorDefinition.java | 30 ++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/9f527e43/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java index e2f06bf..9eaea62 100644 --- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java @@ -2357,10 +2357,17 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> * @return the exception builder to configure */ public OnExceptionDefinition onException(Class<? extends Throwable> exceptionType) { - OnExceptionDefinition answer = new OnExceptionDefinition(exceptionType); - answer.setRouteScoped(true); - addOutput(answer); - return answer; + // onException can only be added on the route-level and not nested in splitter/policy etc + // Camel 3.0 will fix this where we will have a RouteScopeDefinition where route scoped + // configuration must take place, and not from this generic ProcessorDefinition + if (this.getClass().isAssignableFrom(RouteDefinition.class)) { + OnExceptionDefinition answer = new OnExceptionDefinition(exceptionType); + answer.setRouteScoped(true); + addOutput(answer); + return answer; + } else { + throw new IllegalArgumentException("onException can only be added directly to the route. Try moving this onException to the top of the route: " + this); + } } /** @@ -2371,10 +2378,17 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> * @return the exception builder to configure */ public OnExceptionDefinition onException(Class<? extends Throwable>... exceptions) { - OnExceptionDefinition answer = new OnExceptionDefinition(Arrays.asList(exceptions)); - answer.setRouteScoped(true); - addOutput(answer); - return answer; + // onException can only be added on the route-level and not nested in splitter/policy etc + // Camel 3.0 will fix this where we will have a RouteScopeDefinition where route scoped + // configuration must take place, and not from this generic ProcessorDefinition + if (this.getClass().isAssignableFrom(RouteDefinition.class)) { + OnExceptionDefinition answer = new OnExceptionDefinition(Arrays.asList(exceptions)); + answer.setRouteScoped(true); + addOutput(answer); + return answer; + } else { + throw new IllegalArgumentException("onException can only be added directly to the route. Try moving this onException to the top of the route: " + this); + } } /**