You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/01/18 11:39:39 UTC

svn commit: r1060291 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/impl/converter/ camel-core/src/main/java/org/apache/camel/impl/osgi/ camel-core/src/main/java/org/apache/camel/spi/ components/...

Author: davsclaus
Date: Tue Jan 18 10:39:39 2011
New Revision: 1060291

URL: http://svn.apache.org/viewvc?rev=1060291&view=rev
Log:
CAMEL-3550: Camel fail on startup if type converters cannot by loaded by the classpath scanning using AnnotationTypeConverterLoader.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java   (contents, props changed)
      - copied, changed from r1060195, camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToStartRouteException.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java   (contents, props changed)
      - copied, changed from r1060195, camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java
Removed:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
    camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java (from r1060195, camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToStartRouteException.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToStartRouteException.java&r1=1060195&r2=1060291&rev=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/FailedToStartRouteException.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java Tue Jan 18 10:39:39 2011
@@ -17,19 +17,19 @@
 package org.apache.camel;
 
 /**
- * Exception when failing to start a {@link Route}.
+ * Exception when failing to load type converters.
  *
  * @version $Revision$
  */
-public class FailedToStartRouteException extends CamelException {
-    private static final long serialVersionUID = -6118520819865759888L;
+public class TypeConverterLoaderException extends CamelException {
+    private static final long serialVersionUID = -6118520819865759887L;
 
-    public FailedToStartRouteException(String routeId, String message) {
-        super("Failed to start route " + routeId + " because of " + message);
+    public TypeConverterLoaderException(String message) {
+        super("Failed to load type converters because of: " + message);
     }
 
-    public FailedToStartRouteException(Throwable cause) {
-        super(cause);
+    public TypeConverterLoaderException(String message, Throwable cause) {
+        super("Failed to load type converters because of: " + message, cause);
     }
 }
 

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

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverterLoaderException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java?rev=1060291&r1=1060290&r2=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java Tue Jan 18 10:39:39 2011
@@ -20,8 +20,8 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.lang.reflect.Method;
-
 import java.net.URL;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
@@ -34,7 +34,9 @@ import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.FallbackConverter;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.TypeConverterLoaderException;
 import org.apache.camel.spi.PackageScanClassResolver;
+import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.util.CastUtils;
 import org.apache.camel.util.IOHelper;
@@ -59,9 +61,21 @@ public class AnnotationTypeConverterLoad
         this.resolver = resolver;
     }
 
-    public void load(TypeConverterRegistry registry) throws Exception {
-        String[] packageNames = findPackageNames();
+    public void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {
+        String[] packageNames;
+        try {
+            packageNames = findPackageNames();
+            if (packageNames == null || packageNames.length == 0) {
+                throw new TypeConverterLoaderException("Cannot find package names to be used for classpath scanning for annotated type converters.");
+            }
+        } catch (Exception e) {
+            throw new TypeConverterLoaderException("Cannot find package names to be used for classpath scanning for annotated type converters.", e);
+        }
+
         Set<Class<?>> classes = resolver.findAnnotated(Converter.class, packageNames);
+        if (classes == null || classes.isEmpty()) {
+            throw new TypeConverterLoaderException("Cannot find any type converter classes from the following packages: " + Arrays.asList(packageNames));
+        }
 
         LOG.info("Found " + packageNames.length + " packages with " + classes.size() + " @Converter classes to load");
 
@@ -231,7 +245,7 @@ public class AnnotationTypeConverterLoad
     }
 
     protected void registerTypeConverter(TypeConverterRegistry registry,
-            Method method, Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
+                                         Method method, Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
         registry.addTypeConverter(toType, fromType, typeConverter);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java?rev=1060291&r1=1060290&r2=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java Tue Jan 18 10:39:39 2011
@@ -36,6 +36,7 @@ import org.apache.camel.spi.FactoryFinde
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.TypeConverterAware;
+import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java?rev=1060291&r1=1060290&r2=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/osgi/Activator.java Tue Jan 18 10:39:39 2011
@@ -40,8 +40,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Converter;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.TypeConverterLoaderException;
 import org.apache.camel.impl.converter.AnnotationTypeConverterLoader;
-import org.apache.camel.impl.converter.TypeConverterLoader;
 import org.apache.camel.impl.osgi.tracker.BundleTracker;
 import org.apache.camel.impl.osgi.tracker.BundleTrackerCustomizer;
 import org.apache.camel.impl.scan.AnnotatedWithPackageScanFilter;
@@ -53,6 +53,7 @@ import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.spi.PackageScanFilter;
+import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -273,15 +274,22 @@ public class Activator implements Bundle
     protected static class BundleTypeConverterLoader extends BaseResolver<TypeConverter> implements TypeConverterLoader {
 
         private final AnnotationTypeConverterLoader loader = new Loader();
+        private final Bundle bundle;
 
         public BundleTypeConverterLoader(Bundle bundle) {
             super(bundle, TypeConverter.class);
+            ObjectHelper.notNull(bundle, "bundle");
+            this.bundle = bundle;
         }
 
-        public synchronized void load(TypeConverterRegistry registry) throws Exception {
+        public synchronized void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {
             // must be synchronized to ensure we don't load type converters concurrently
             // which cause Camel apps to fails in OSGi thereafter
-            loader.load(registry);
+            try {
+                loader.load(registry);
+            } catch (Exception e) {
+                throw new TypeConverterLoaderException("Cannot load type converters using OSGi bundle: " + bundle.getBundleId(), e);
+            }
         }
 
         public void register() {
@@ -295,7 +303,7 @@ public class Activator implements Bundle
             }
 
             @SuppressWarnings("unchecked")
-            public void load(TypeConverterRegistry registry) throws Exception {
+            public void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {
                 PackageScanFilter test = new AnnotatedWithPackageScanFilter(Converter.class, true);
                 Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
                 Set<String> packages = getConverterPackages(bundle.getEntry(META_INF_TYPE_CONVERTER));

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java (from r1060195, camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java&r1=1060195&r2=1060291&rev=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java Tue Jan 18 10:39:39 2011
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.converter;
+package org.apache.camel.spi;
 
-import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.TypeConverterLoaderException;
 
 /**
- * A pluggable strategy to load type converters into a registry from some kind of mechanism
+ * A pluggable strategy to load type converters into a
+ * {@link TypeConverterRegistry} from some kind of mechanism.
  *
  * @version $Revision$
  */
@@ -29,7 +30,7 @@ public interface TypeConverterLoader {
      * A pluggable strategy to load type converters into a registry from some kind of mechanism
      *
      * @param registry the registry to load the type converters into
-     * @throws Exception if the type converters could not be loaded
+     * @throws org.apache.camel.TypeConverterLoaderException if the type converters could not be loaded
      */
-    void load(TypeConverterRegistry registry) throws Exception;
+    void load(TypeConverterRegistry registry) throws TypeConverterLoaderException;
 }

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterLoader.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java?rev=1060291&r1=1060290&r2=1060291&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java Tue Jan 18 10:39:39 2011
@@ -52,7 +52,7 @@ public interface TypeConverterRegistry {
     TypeConverter lookup(Class<?> toType, Class<?> fromType);
 
     /**
-     * Sets the injector to be used for creating new instances during type convertions.
+     * Sets the injector to be used for creating new instances during type conversions.
      *
      * @param injector the injector
      */

Modified: camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java?rev=1060291&r1=1060290&r2=1060291&view=diff
==============================================================================
--- camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java (original)
+++ camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiTypeConverter.java Tue Jan 18 10:39:39 2011
@@ -25,8 +25,8 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
-import org.apache.camel.impl.converter.TypeConverterLoader;
 import org.apache.camel.spi.Injector;
+import org.apache.camel.spi.TypeConverterLoader;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;