Author: davsclaus
Date: Sun Jul 24 09:54:46 2011
New Revision: 1150311

URL: http://svn.apache.org/viewvc?rev=1150311&view=rev
Log:
CAMEL-4092: Use Camels class resolver to load classes configured in the DSL.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java?rev=1150311&r1=1150310&r2=1150311&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
 Sun Jul 24 09:54:46 2011
@@ -38,6 +38,7 @@ import org.apache.camel.builder.Expressi
 import org.apache.camel.processor.CatchProcessor;
 import org.apache.camel.processor.FatalFallbackErrorHandler;
 import org.apache.camel.processor.RedeliveryPolicy;
+import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.CastUtils;
@@ -159,6 +160,11 @@ public class OnExceptionDefinition exten
         setRetryWhileFromExpressionType(routeContext);
         setOnRedeliveryFromRedeliveryRef(routeContext);
 
+        // load exception classes
+        if (exceptions != null && !exceptions.isEmpty()) {
+            exceptionClasses = 
createExceptionClasses(routeContext.getCamelContext().getClassResolver());
+        }
+
         // must validate configuration before creating processor
         validateConfiguration();
 
@@ -179,11 +185,14 @@ public class OnExceptionDefinition exten
 
     @Override
     public CatchProcessor createProcessor(RouteContext routeContext) throws 
Exception {
+        // load exception classes
+        if (exceptions != null && !exceptions.isEmpty()) {
+            exceptionClasses = 
createExceptionClasses(routeContext.getCamelContext().getClassResolver());
+        }
+
         // must validate configuration before creating processor
         validateConfiguration();
 
-        // TODO: the exceptions list should use classresolver to load
-
         Processor childProcessor = this.createChildProcessor(routeContext, 
false);
 
         Predicate when = null;
@@ -205,7 +214,7 @@ public class OnExceptionDefinition exten
         }
 
         List<Class> exceptions = getExceptionClasses();
-        if (exceptions.isEmpty()) {
+        if (exceptions == null || exceptions.isEmpty()) {
             throw new IllegalArgumentException("At least one exception must be 
configured on " + this);
         }
 
@@ -716,9 +725,6 @@ public class OnExceptionDefinition exten
     }
 
     public List<Class> getExceptionClasses() {
-        if (exceptionClasses == null) {
-            exceptionClasses = createExceptionClasses();
-        }
         return exceptionClasses;
     }
 
@@ -855,12 +861,12 @@ public class OnExceptionDefinition exten
         return redeliveryPolicy;
     }
 
-    protected List<Class> createExceptionClasses() {
+    protected List<Class> createExceptionClasses(ClassResolver resolver) 
throws ClassNotFoundException {
         List<String> list = getExceptions();
         List<Class> answer = new ArrayList<Class>(list.size());
         for (String name : list) {
-            Class<Throwable> type = 
CastUtils.cast(ObjectHelper.loadClass(name, getClass().getClassLoader()), 
Throwable.class);
-            answer.add(type);
+            Class<?> type = resolver.resolveMandatoryClass(name);
+            answer.add(CastUtils.cast(type, Throwable.class));
         }
         return answer;
     }


Reply via email to