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;