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 2009/03/14 16:19:27 UTC

svn commit: r754461 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/component/bean/ camel-core/src/main/java/org/apache/camel/component/file/ camel-core/src/main/java/org/apache/camel/impl/ camel-...

Author: davsclaus
Date: Sat Mar 14 15:19:25 2009
New Revision: 754461

URL: http://svn.apache.org/viewvc?rev=754461&view=rev
Log:
CAMEL-1458: FactoryFinder as SPI. Removed bad tangle moving MainSupport to impl from util, so util can be clean. Removed some unused code.

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java   (contents, props changed)
      - copied, changed from r753606, camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java   (contents, props changed)
      - copied, changed from r753606, camel/trunk/camel-core/src/main/java/org/apache/camel/util/MainSupport.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinder.java   (with props)
    camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java   (with props)
Removed:
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/MainSupport.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultLanguageResolver.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
    camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java
    camel/trunk/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactory.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactoryBean.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiComponentResolver.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiFactoryFinder.java
    camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java
    camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTypeConverterTest.scala
    camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Sat Mar 14 15:19:25 2009
@@ -26,6 +26,8 @@
 import org.apache.camel.model.dataformat.DataFormatDefinition;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.ExchangeConverter;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.Language;
@@ -33,7 +35,6 @@
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.util.FactoryFinder;
 
 /**
  * Interface used to represent the context used to configure routes and the
@@ -355,17 +356,26 @@
     Map<String, String> getProperties();
     
     /**
-     * Create a FactoryFinder which will be used for the loading the factory class from META-INF
-     * @return the factory finder
+     * Gets the default FactoryFinder which will be used for the loading the factory class from META-INF
+     *
+     * @return the default factory finder
      */
-    FactoryFinder createFactoryFinder();
+    FactoryFinder getDefaultFactoryFinder();
+
+    /**
+     * Sets the factory finder resolver to use.
+     *
+     * @param resolver the factory finder resolver
+     */
+    void setFactoryFinderResolver(FactoryFinderResolver resolver);
     
     /**
-     * Create a FactoryFinder which will be used for the loading the factory class from META-INF
+     * Gets the FactoryFinder which will be used for the loading the factory class from META-INF in the given path
+     *
      * @param path the META-INF path
      * @return the factory finder
      */
-    FactoryFinder createFactoryFinder(String path);
+    FactoryFinder getFactoryFinder(String path) throws NoFactoryAvailableException;
 
     /**
      * Returns the current status of the given route

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Sat Mar 14 15:19:25 2009
@@ -345,7 +345,7 @@
     @SuppressWarnings("unchecked")
     private MethodInfo chooseBestPossibleMethodInfo(Exchange exchange, Collection<MethodInfo> operationList, Object body,
                                                     List<MethodInfo> possibles, List<MethodInfo> possiblesWithException)
-            throws AmbiguousMethodCallException {
+        throws AmbiguousMethodCallException {
 
         Exception exception = ExpressionBuilder.exchangeExceptionExpression().evaluate(exchange, Exception.class);
         if (exception != null && possiblesWithException.size() == 1) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java Sat Mar 14 15:19:25 2009
@@ -30,9 +30,9 @@
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledPollEndpoint;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.spi.Language;
-import org.apache.camel.util.FactoryFinder;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.UuidGenerator;
@@ -124,7 +124,7 @@
     protected GenericFileProcessStrategy<T> createGenericFileStrategy() {
         Class<?> factory = null;
         try {
-            FactoryFinder finder = getCamelContext().createFactoryFinder("META-INF/services/org/apache/camel/component/");
+            FactoryFinder finder = getCamelContext().getFactoryFinder("META-INF/services/org/apache/camel/component/");
             factory = finder.findClass(getScheme(), "strategy.factory.");
         } catch (ClassNotFoundException e) {
             log.debug("'strategy.factory.class' not found", e);

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Sat Mar 14 15:19:25 2009
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.impl;
 
-import java.io.IOException;
-import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -53,6 +51,8 @@
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.ExchangeConverter;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.Language;
@@ -62,13 +62,11 @@
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.util.FactoryFinder;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ReflectionInjector;
 import org.apache.camel.util.SystemHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import static org.apache.camel.util.ServiceHelper.startServices;
 import static org.apache.camel.util.ServiceHelper.stopServices;
 
@@ -104,7 +102,9 @@
     private ErrorHandlerBuilder errorHandlerBuilder;
     private Map<String, DataFormatDefinition> dataFormats = new HashMap<String, DataFormatDefinition>();
     private Map<String, String> properties = new HashMap<String, String>();
-    private Class<? extends FactoryFinder> factoryFinderClass = FactoryFinder.class;
+    private FactoryFinderResolver factoryFinderResolver = new DefaultFactoryFinder();
+    private FactoryFinder factoryFinder;
+    private final Map<String, FactoryFinder> factories = new HashMap<String, FactoryFinder>();
     private final Map<String, RouteService> routeServices = new HashMap<String, RouteService>();
     private ClassResolver classResolver;
     private PackageScanClassResolver packageScanClassResolver;
@@ -341,6 +341,8 @@
     }
 
     public Endpoint getEndpoint(String uri) {
+        ObjectHelper.notEmpty(uri, "uri");
+
         Endpoint answer;
         synchronized (endpoints) {
             answer = endpoints.get(uri);
@@ -841,7 +843,7 @@
      * Lazily create a default implementation
      */
     protected TypeConverter createTypeConverter() {
-        DefaultTypeConverter answer = new DefaultTypeConverter(packageScanClassResolver, getInjector());
+        DefaultTypeConverter answer = new DefaultTypeConverter(packageScanClassResolver, getInjector(), getDefaultFactoryFinder());
         typeConverterRegistry = answer;
         return answer;
     }
@@ -850,20 +852,12 @@
      * Lazily create a default implementation
      */
     protected Injector createInjector() {
-        FactoryFinder finder = createFactoryFinder();
+        FactoryFinder finder = getDefaultFactoryFinder();
         try {
             return (Injector) finder.newInstance("Injector");
         } catch (NoFactoryAvailableException e) {
             // lets use the default
             return new ReflectionInjector();
-        } catch (IllegalAccessException e) {
-            throw new RuntimeCamelException(e);
-        } catch (InstantiationException e) {
-            throw new RuntimeCamelException(e);
-        } catch (IOException e) {
-            throw new RuntimeCamelException(e);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeCamelException(e);
         }
     }
 
@@ -929,10 +923,6 @@
         return dataFormats;
     }
 
-    public void setFactoryFinderClass(Class<? extends FactoryFinder> finderClass) {
-        factoryFinderClass = finderClass;
-    }
-    
     public Map<String, String> getProperties() {
         return properties;
     }
@@ -941,21 +931,25 @@
         this.properties = properties;        
     }
 
-    public FactoryFinder createFactoryFinder() {
-        try {
-            return factoryFinderClass.newInstance();
-        } catch (Exception e) {
-            throw new RuntimeCamelException(e);
+    public FactoryFinder getDefaultFactoryFinder() {
+        if (factoryFinder == null) {
+            factoryFinder = factoryFinderResolver.resolveDefaultFactoryFinder();
         }
+        return factoryFinder;
     }
 
-    public FactoryFinder createFactoryFinder(String path) {
-        try {
-            Constructor<? extends FactoryFinder> constructor;
-            constructor = factoryFinderClass.getConstructor(String.class);
-            return constructor.newInstance(path);
-        } catch (Exception e) {
-            throw new RuntimeCamelException(e);
+    public void setFactoryFinderResolver(FactoryFinderResolver resolver) {
+        this.factoryFinderResolver = resolver;
+    }
+
+    public FactoryFinder getFactoryFinder(String path) throws NoFactoryAvailableException {
+        synchronized (factories) {
+            FactoryFinder answer = factories.get(path);
+            if (answer == null) {
+                answer = new DefaultFactoryFinder(path);
+                factories.put(path, answer);
+            }
+            return answer;
         }
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponentResolver.java Sat Mar 14 15:19:25 2009
@@ -16,11 +16,13 @@
  */
 package org.apache.camel.impl;
 
+import java.io.IOException;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.util.FactoryFinder;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -33,20 +35,22 @@
  * @version $Revision$
  */
 public class DefaultComponentResolver implements ComponentResolver {
-    protected static final FactoryFinder COMPONENT_FACTORY =
-            new FactoryFinder("META-INF/services/org/apache/camel/component/");
+
+    public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/component/";
     private static final transient Log LOG = LogFactory.getLog(DefaultComponentResolver.class);
+    private FactoryFinder factoryFinder;
 
     @SuppressWarnings("unchecked")
     public Component resolveComponent(String name, CamelContext context) {
+        // lookup in registry first
         Object bean = null;
         try {
             bean = context.getRegistry().lookup(name);
-            if (bean != null && LOG.isDebugEnabled()) {
-                LOG.debug("Found component: " + name + " in registry: " + bean);
+            if (bean != null && getLog().isDebugEnabled()) {
+                getLog().debug("Found component: " + name + " in registry: " + bean);
             }
         } catch (Exception e) {
-            LOG.debug("Ignored error looking up bean: " + name, e);
+            getLog().debug("Ignored error looking up bean: " + name, e);
         }
         if (bean != null) {
             if (bean instanceof Component) {
@@ -54,24 +58,42 @@
             }
             // we do not throw the exception here and try to auto create a component
         }
+
+        // not in registry then use component factory
         Class type;
         try {
-            type = COMPONENT_FACTORY.findClass(name);
+            type = findComponent(name, context);
+            if (type == null) {
+                // not found
+                return null;
+            }
         } catch (NoFactoryAvailableException e) {
             return null;
         } catch (Exception e) {
             throw new IllegalArgumentException("Invalid URI, no Component registered for scheme: " + name, e);
         }
-        if (type == null) {
-            return null;
-        }
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Found component: " + name + " via type: " + type.getName() + " via: " + COMPONENT_FACTORY.getPath() + name);
+
+        if (getLog().isDebugEnabled()) {
+            getLog().debug("Found component: " + name + " via type: " + type.getName() + " via: " + factoryFinder.getResourcePath() + name);
         }
+
+        // create the component
         if (Component.class.isAssignableFrom(type)) {
             return (Component) context.getInjector().newInstance(type);
         } else {
             throw new IllegalArgumentException("Type is not a Component implementation. Found: " + type.getName());
         }
     }
+
+    private Class findComponent(String name, CamelContext context) throws ClassNotFoundException, IOException {
+        if (factoryFinder == null) {
+            factoryFinder = context.getFactoryFinder(RESOURCE_PATH);
+        }
+        return factoryFinder.findClass(name);
+    }
+
+    protected Log getLog() {
+        return LOG;
+    }
+
 }

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java (from r753606, camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java&r1=753606&r2=754461&rev=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java Sat Mar 14 15:19:25 2009
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.impl;
 
 import java.io.BufferedInputStream;
 import java.io.IOException;
@@ -26,71 +26,50 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.camel.NoFactoryAvailableException;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.FactoryFinderResolver;
 import org.apache.camel.spi.Injector;
+import org.apache.camel.util.ObjectHelper;
 
 /**
- * Finder to find factories from the resource classpath, usually <b>META-INF/services/org/apache/camel/</b>.
+ * Default factory finder.
  */
-public class FactoryFinder {
-    // TODO: Extract interface to SPI
+public class DefaultFactoryFinder implements FactoryFinder, FactoryFinderResolver {
 
-    protected final ConcurrentHashMap<String, Class> classMap = new ConcurrentHashMap<String, Class>();
-    private final String path;    
-
-    public FactoryFinder() {
-        this("META-INF/services/org/apache/camel/");
-    }
+    public static final transient String DEFAULT_RESOURCE_PATH = "META-INF/services/org/apache/camel/";
 
-    public FactoryFinder(String path) {
-        this.path = path;
-    }
+    protected final ConcurrentHashMap<String, Class> classMap = new ConcurrentHashMap<String, Class>();
+    private String path;
 
-    /**
-     * Creates a new instance of the given key
-     *
-     * @param key is the key to add to the path to find a text file containing
-     *            the factory name
-     * @return a newly created instance
-     */
-    public Object newInstance(String key) throws IllegalAccessException, InstantiationException, IOException,
-        ClassNotFoundException {
-        return newInstance(key, (String)null);
+    public DefaultFactoryFinder() {
+        this(DEFAULT_RESOURCE_PATH);
     }
 
-    public Object newInstance(String key, String propertyPrefix) throws IllegalAccessException,
-        InstantiationException, IOException, ClassNotFoundException {
-        Class clazz = findClass(key, propertyPrefix);
-        return clazz.newInstance();
+    public DefaultFactoryFinder(String resourcePath) {
+        this.path = resourcePath;
     }
 
-    public Object newInstance(String key, Injector injector) throws IOException, ClassNotFoundException {
-        return newInstance(key, injector, (String)null);
+    public FactoryFinder resolveDefaultFactoryFinder() {
+        return new DefaultFactoryFinder();
     }
 
-    public Object newInstance(String key, Injector injector, String propertyPrefix) throws IOException,
-        ClassNotFoundException {
-        Class<?> type = findClass(key, propertyPrefix);
-        return injector.newInstance(type);
+    public FactoryFinder resolveFactoryFinder(String path) {
+        return new DefaultFactoryFinder(path);
     }
 
-    public <T> T newInstance(String key, Injector injector, Class<T> expectedType) throws IOException,
-        ClassNotFoundException {
-        return newInstance(key, injector, null, expectedType);
+    public String getResourcePath() {
+        return path;
     }
 
-    public <T> T newInstance(String key, Injector injector, String propertyPrefix, Class<T> expectedType)
-        throws IOException, ClassNotFoundException {
-        Class<?> type = findClass(key, propertyPrefix);
-        Object value = injector.newInstance(type);
-        if (expectedType.isInstance(value)) {
-            return expectedType.cast(value);
-        } else {
-            throw new ClassCastException("Not instanceof " + expectedType.getName() + " value: " + value);
+    public Object newInstance(String key) throws NoFactoryAvailableException {
+        try {
+            return newInstance(key, null);
+        } catch (Exception e) {
+            throw new NoFactoryAvailableException(key);
         }
     }
 
-    public <T> List<T> newInstances(String key, Injector injector, Class<T> type) throws IOException,
-        ClassNotFoundException {
+    public <T> List<T> newInstances(String key, Injector injector, Class<T> type) throws ClassNotFoundException, IOException {
         List<Class> list = findClasses(key);
         List<T> answer = new ArrayList<T>(list.size());
         answer.add(newInstance(key, injector, type));
@@ -116,20 +95,38 @@
         return clazz;
     }
 
-    public List<Class> findClasses(String key) throws ClassNotFoundException, IOException {
+    private Object newInstance(String key, String propertyPrefix) throws IllegalAccessException,
+        InstantiationException, IOException, ClassNotFoundException {
+        Class clazz = findClass(key, propertyPrefix);
+        return clazz.newInstance();
+    }
+
+    private <T> T newInstance(String key, Injector injector, Class<T> expectedType) throws IOException,
+        ClassNotFoundException {
+        return newInstance(key, injector, null, expectedType);
+    }
+
+    private <T> T newInstance(String key, Injector injector, String propertyPrefix, Class<T> expectedType)
+        throws IOException, ClassNotFoundException {
+        Class<?> type = findClass(key, propertyPrefix);
+        Object value = injector.newInstance(type);
+        if (expectedType.isInstance(value)) {
+            return expectedType.cast(value);
+        } else {
+            throw new ClassCastException("Not instanceof " + expectedType.getName() + " value: " + value);
+        }
+    }
+
+    private List<Class> findClasses(String key) throws ClassNotFoundException, IOException {
         return findClasses(key, null);
     }
 
-    public List<Class> findClasses(String key, String propertyPrefix) throws ClassNotFoundException, IOException {
+    private List<Class> findClasses(String key, String propertyPrefix) throws ClassNotFoundException, IOException {
         // TODO change to support finding multiple classes on the classpath!
         Class type = findClass(key, propertyPrefix);
         return Collections.singletonList(type);
     }
 
-    public String getPath() {
-        return path;
-    }
-
     private Class newInstance(Properties properties, String propertyPrefix) throws ClassNotFoundException, IOException {
         String className = properties.getProperty(propertyPrefix + "class");
         if (className == null) {
@@ -163,5 +160,6 @@
             ObjectHelper.close(in, key, null);
         }
     }
-    
+
+
 }

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

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

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultLanguageResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultLanguageResolver.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultLanguageResolver.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultLanguageResolver.java Sat Mar 14 15:19:25 2009
@@ -16,14 +16,12 @@
  */
 package org.apache.camel.impl;
 
-import java.io.IOException;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoSuchLanguageException;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LanguageResolver;
-import org.apache.camel.util.FactoryFinder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -33,17 +31,18 @@
  *
  * @version $Revision$
  */
-public class DefaultLanguageResolver implements LanguageResolver {    
-    protected static final FactoryFinder LANGUAGE_FACTORY = new FactoryFinder("META-INF/services/org/apache/camel/language/");
-    protected static final FactoryFinder LANGUAGE_RESOLVER = new FactoryFinder("META-INF/services/org/apache/camel/language/resolver/");
+public class DefaultLanguageResolver implements LanguageResolver {
+    public static final String LANGUAGE_RESOURCE_PATH = "META-INF/services/org/apache/camel/language/";
+    public static final String LANGUAGE_RESOLVER_RESOURCE_PATH = LANGUAGE_RESOURCE_PATH + "resolver/";
+
     private static final transient Log LOG = LogFactory.getLog(DefaultLanguageResolver.class);
-    
-    protected Log getLog() {
-        return LOG;
-    }
+
+    protected FactoryFinder languageFactory;
+    protected FactoryFinder languageResolver;
 
     @SuppressWarnings("unchecked")
     public Language resolveLanguage(String name, CamelContext context) {
+        // lookup in registry first
         Object bean = null;
         try {
             bean = context.getRegistry().lookup(name);
@@ -59,29 +58,33 @@
             }
             // we do not throw the exception here and try to auto create a Language from META-INF
         }
+
         Class type = null;
         try {
-            type = findLanguage(name);
+            type = findLanguage(name, context);
         } catch (NoFactoryAvailableException e) {
             // ignore
         } catch (Exception e) {
             throw new IllegalArgumentException("Invalid URI, no Language registered for scheme: " + name, e);
         }
+
         if (type != null) {
             if (Language.class.isAssignableFrom(type)) {
                 return (Language)context.getInjector().newInstance(type);
             } else {
                 throw new IllegalArgumentException("Type is not a Language implementation. Found: " + type.getName());
             }
+        } else {
+            // no specific language found then try fallback
+            return noSpecificLanguageFound(name, context);
         }
-        return noSpecificLanguageFound(name, context);
     }
 
     @SuppressWarnings("unchecked")
     protected Language noSpecificLanguageFound(String name, CamelContext context) {
         Class type = null;
         try {
-            type = findLanguageResolver("default");
+            type = findLanguageResolver("default", context);
         } catch (NoFactoryAvailableException e) {
             // ignore
         } catch (Exception e) {
@@ -98,11 +101,21 @@
         throw new NoSuchLanguageException(name);
     }
     
-    protected Class findLanguage(String name) throws Exception {
-        return LANGUAGE_FACTORY.findClass(name);
+    protected Class findLanguage(String name, CamelContext context) throws Exception {
+        if (languageFactory == null) {
+            languageFactory = context.getFactoryFinder(LANGUAGE_RESOURCE_PATH);
+        }
+        return languageFactory.findClass(name);
     }
     
-    protected Class findLanguageResolver(String name) throws Exception {
-        return LANGUAGE_RESOLVER.findClass("default");
+    protected Class findLanguageResolver(String name, CamelContext context) throws Exception {
+        if (languageResolver == null) {
+            languageResolver = context.getFactoryFinder(LANGUAGE_RESOLVER_RESOURCE_PATH);
+        }
+        return languageResolver.findClass(name);
+    }
+
+    protected Log getLog() {
+        return LOG;
     }
 }

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java (from r753606, camel/trunk/camel-core/src/main/java/org/apache/camel/util/MainSupport.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/util/MainSupport.java&r1=753606&r2=754461&rev=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/MainSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/MainSupport.java Sat Mar 14 15:19:25 2009
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.util;
+package org.apache.camel.impl;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -32,10 +32,9 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.processor.interceptor.Debugger;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.view.ModelFileGenerator;
 import org.apache.camel.view.RouteDotGenerator;
 import org.apache.commons.logging.Log;
@@ -392,7 +391,7 @@
         if (camelContexts.size() == 1) {
             return camelContexts.get(0);
         } else {
-            DefaultCamelContext answer = new DefaultCamelContext();
+            CamelContext answer = new DefaultCamelContext();
             for (CamelContext camelContext : camelContexts) {
                 answer.addRouteDefinitions(camelContext.getRouteDefinitions());
             }

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

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

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Sat Mar 14 15:19:25 2009
@@ -29,15 +29,14 @@
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.TypeConverterAware;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.util.FactoryFinder;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-
 import static org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException;
 
 
@@ -51,13 +50,15 @@
     private static final transient Log LOG = LogFactory.getLog(DefaultTypeConverter.class);
     private final Map<TypeMapping, TypeConverter> typeMappings = new ConcurrentHashMap<TypeMapping, TypeConverter>();
     private final Map<TypeMapping, TypeMapping> misses = new ConcurrentHashMap<TypeMapping, TypeMapping>();
-    private Injector injector;
     private final List<TypeConverterLoader> typeConverterLoaders = new ArrayList<TypeConverterLoader>();
     private final List<TypeConverter> fallbackConverters = new ArrayList<TypeConverter>();
+    private Injector injector;
+    private final FactoryFinder factoryFinder;
     private boolean loaded;
 
-    public DefaultTypeConverter(PackageScanClassResolver resolver, Injector injector) {
+    public DefaultTypeConverter(PackageScanClassResolver resolver, Injector injector, FactoryFinder factoryFinder) {
         this.injector = injector;
+        this.factoryFinder = factoryFinder;
 
         typeConverterLoaders.add(new AnnotationTypeConverterLoader(resolver));
 
@@ -338,8 +339,7 @@
     }
 
     protected void loadFallbackTypeConverters() throws IOException, ClassNotFoundException {
-        FactoryFinder finder = new FactoryFinder();
-        List<TypeConverter> converters = finder.newInstances("FallbackTypeConverter", getInjector(), TypeConverter.class);
+        List<TypeConverter> converters = factoryFinder.newInstances("FallbackTypeConverter", getInjector(), TypeConverter.class);
         for (TypeConverter converter : converters) {
             addFallbackTypeConverter(converter);
         }

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinder.java?rev=754461&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinder.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinder.java Sat Mar 14 15:19:25 2009
@@ -0,0 +1,79 @@
+/**
+ * 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.spi;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.camel.NoFactoryAvailableException;
+
+/**
+ * Finder to find factories from the resource classpath, usually <b>META-INF/services/org/apache/camel/</b>.
+ *
+ * @version $Revision$
+ */
+public interface FactoryFinder {
+
+    /**
+     * Gets the resource classpath.
+     *
+     * @return the resource classpath.
+     */
+    String getResourcePath();
+
+    /**
+     * Creates a new class instance using the key to lookup
+     *
+     * @param key is the key to add to the path to find a text file containing the factory name
+     * @return a newly created instance
+     * @throws org.apache.camel.NoFactoryAvailableException is thrown if no factories exist for the given key
+     */
+    Object newInstance(String key) throws NoFactoryAvailableException;
+
+    /**
+     * Creates a new class instance using the key to lookup
+     *
+     * @param key is the key to add to the path to find a text file containing the factory name
+     * @param injector injector to use
+     * @param type expected type
+     * @return a newly created instance as the expected type
+     * @throws ClassNotFoundException is thrown if not found
+     * @throws java.io.IOException is thrown if loading the class or META-INF file not found
+     */
+    <T> List<T> newInstances(String key, Injector injector, Class<T> type) throws ClassNotFoundException, IOException;
+
+    /**
+     * Finds the given factory class using the the key to lookup.
+     *
+     * @param key is the key to add to the path to find a text file containing the factory name
+     * @return the factory class
+     * @throws ClassNotFoundException is thrown if class not found
+     * @throws java.io.IOException is thrown if loading the class or META-INF file not found
+     */
+    Class findClass(String key) throws ClassNotFoundException, IOException;
+
+    /**
+     * Finds the given factory class using the the key to lookup.
+     *
+     * @param key is the key to add to the path to find a text file containing the factory name
+     * @param propertyPrefix prefix on key
+     * @return the factory class
+     * @throws ClassNotFoundException is thrown if not found
+     * @throws java.io.IOException is thrown if loading the class or META-INF file not found
+     */
+    Class findClass(String key, String propertyPrefix) throws ClassNotFoundException, IOException;
+}

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

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

Added: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java?rev=754461&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java (added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java Sat Mar 14 15:19:25 2009
@@ -0,0 +1,41 @@
+/**
+ * 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.spi;
+
+/**
+ * Represents a resolver of FactoryFinder to
+ *
+ * @version $Revision$
+ */
+public interface FactoryFinderResolver {
+
+    /**
+     * Creates a new defaut factory finder.
+     *
+     * @return a factory finder.
+     */
+    FactoryFinder resolveDefaultFactoryFinder();
+
+    /**
+     * Creates a new factory finder.
+     *
+     * @param path the resource path
+     * @return a factory finder.
+     */
+    FactoryFinder resolveFactoryFinder(String path);
+
+}

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

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

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/ConverterTest.java Sat Mar 14 15:19:25 2009
@@ -27,12 +27,12 @@
 import java.util.Set;
 
 import junit.framework.TestCase;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.impl.DefaultFactoryFinder;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.IntrospectionSupport;
@@ -46,7 +46,8 @@
 public class ConverterTest extends TestCase {
     private static final transient Log LOG = LogFactory.getLog(ConverterTest.class);
 
-    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(), new ReflectionInjector());
+    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(),
+            new ReflectionInjector(), new DefaultFactoryFinder());
 
     public static class IntegerPropertyEditor extends PropertyEditorSupport {
         public void setAsText(String text) throws IllegalArgumentException {

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/JaxpTest.java Sat Mar 14 15:19:25 2009
@@ -28,6 +28,7 @@
 
 import junit.framework.TestCase;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.impl.DefaultFactoryFinder;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.ReflectionInjector;
@@ -40,7 +41,8 @@
  */
 public class JaxpTest extends TestCase {
     private static final transient Log LOG = LogFactory.getLog(JaxpTest.class);
-    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(), new ReflectionInjector());
+    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(),
+            new ReflectionInjector(), new DefaultFactoryFinder());
 
     public void testConvertToDocument() throws Exception {
         Document document = converter

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/converter/StringSourceTest.java Sat Mar 14 15:19:25 2009
@@ -24,6 +24,7 @@
 import junit.framework.TestCase;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.converter.jaxp.StringSource;
+import org.apache.camel.impl.DefaultFactoryFinder;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.ReflectionInjector;
@@ -32,7 +33,8 @@
  * @version $Revision$
  */
 public class StringSourceTest extends TestCase {
-    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(), new ReflectionInjector());
+    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(),
+            new ReflectionInjector(), new DefaultFactoryFinder());
     protected String expectedBody = "<hello>world!</hello>";
 
     public void testSerialization() throws Exception {

Modified: camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java (original)
+++ camel/trunk/components/camel-guice/src/main/java/org/apache/camel/guice/Main.java Sat Mar 14 15:19:25 2009
@@ -31,7 +31,7 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.util.MainSupport;
+import org.apache.camel.impl.MainSupport;
 import org.apache.camel.view.ModelFileGenerator;
 import org.guiceyfruit.Injectors;
 

Modified: camel/trunk/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java (original)
+++ camel/trunk/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConverterTest.java Sat Mar 14 15:19:25 2009
@@ -22,6 +22,7 @@
 
 import junit.framework.TestCase;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.impl.DefaultFactoryFinder;
 import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
 import org.apache.camel.util.ReflectionInjector;
@@ -35,7 +36,8 @@
  */
 public class JcrConverterTest extends TestCase {
 
-    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(), new ReflectionInjector());
+    protected TypeConverter converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(),
+            new ReflectionInjector(), new DefaultFactoryFinder());
 
     public void testBooleanValueConverter() throws Exception {
         assertJcrConverterAvailable(BooleanValue.class, Boolean.TRUE);

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactory.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactory.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactory.java Sat Mar 14 15:19:25 2009
@@ -53,7 +53,7 @@
             context.setComponentResolver(new OsgiComponentResolver());
             context.setLanguageResolver(new OsgiLanguageResolver());
             addOsgiAnnotationTypeConverterLoader(context, bundleContext);
-            context.setFactoryFinderClass(OsgiFactoryFinder.class);
+            context.setFactoryFinderResolver(new OsgiFactoryFinder());
         }
         
         return context;

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactoryBean.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/CamelContextFactoryBean.java Sat Mar 14 15:19:25 2009
@@ -50,7 +50,7 @@
             context.setPackageScanClassResolver(new OsgiPackageScanClassResolver(bundleContext));
             context.setComponentResolver(new OsgiComponentResolver());
             context.setLanguageResolver(new OsgiLanguageResolver());
-            context.setFactoryFinderClass(OsgiFactoryFinder.class);
+            context.setFactoryFinderResolver(new OsgiFactoryFinder());
             addOsgiAnnotationTypeConverterLoader(context);
         }
         

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiComponentResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiComponentResolver.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiComponentResolver.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiComponentResolver.java Sat Mar 14 15:19:25 2009
@@ -38,10 +38,7 @@
     
     private static final transient Log LOG = LogFactory.getLog(OsgiComponentResolver.class);
 
-    protected Class getComponent(String name) throws Exception {
-        return Activator.getComponent(name);       
-    }
-
+    @SuppressWarnings("unchecked")
     public Component resolveComponent(String name, CamelContext context) throws Exception {
         Object bean = null;
         try {
@@ -58,8 +55,9 @@
             }
             // we do not throw the exception here and try to auto create a component
         }
-        // Check in OSGi bundles        
-        Class type = null;
+
+        // Check in OSGi bundles
+        Class type;
         try {
             type = getComponent(name);
         } catch (Throwable e) {
@@ -68,12 +66,16 @@
         if (type == null) {
             return null;
         }
+
         if (Component.class.isAssignableFrom(type)) {
             return (Component)context.getInjector().newInstance(type);
         } else {
-            throw new IllegalArgumentException("Type is not a Component implementation. Found: "
-                                               + type.getName());
+            throw new IllegalArgumentException("Type is not a Component implementation. Found: " + type.getName());
         }
     }
 
+    protected Class getComponent(String name) throws Exception {
+        return Activator.getComponent(name);
+    }
+
 }

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiFactoryFinder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiFactoryFinder.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiFactoryFinder.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiFactoryFinder.java Sat Mar 14 15:19:25 2009
@@ -23,33 +23,44 @@
 import java.util.Properties;
 
 import org.apache.camel.NoFactoryAvailableException;
-import org.apache.camel.util.FactoryFinder;
+import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.util.ObjectHelper;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
-public class OsgiFactoryFinder extends FactoryFinder {
+public class OsgiFactoryFinder extends DefaultFactoryFinder {
     
     private class BundleEntry {
         URL url;
         Bundle bundle;
     }
-    
+
     public OsgiFactoryFinder() {
         super();
     }
-    
+
     public OsgiFactoryFinder(String path) {
         super(path);
     }
-    
+
+    @Override
+    public FactoryFinder resolveDefaultFactoryFinder() {
+        return new OsgiFactoryFinder();
+    }
+
+    @Override
+    public FactoryFinder resolveFactoryFinder(String path) {
+        return new OsgiFactoryFinder(path);
+    }
+
+    @Override
     public Class findClass(String key, String propertyPrefix) throws ClassNotFoundException, IOException {
         if (propertyPrefix == null) {
             propertyPrefix = "";
         }
 
-        Class clazz = (Class)classMap.get(propertyPrefix + key);
-        Properties properties = null;
+        Class clazz = classMap.get(propertyPrefix + key);
         if (clazz == null) {
             BundleEntry entry = getResource(key);
             if (entry != null) {
@@ -59,7 +70,7 @@
                 BufferedInputStream reader = null;
                 try {
                     reader = new BufferedInputStream(in);
-                    properties = new Properties();
+                    Properties properties = new Properties();
                     properties.load(reader);
                     String className = properties.getProperty(propertyPrefix + "class");
                     if (className == null) {
@@ -75,16 +86,18 @@
                 throw new NoFactoryAvailableException(propertyPrefix + key);
             }           
         }
+
         return clazz;
     }
     
        
     public BundleEntry getResource(String name) {
-        URL url = null;
         BundleEntry entry = null;
         BundleContext bundleContext =  Activator.getBundle().getBundleContext();
-        for (Bundle bundle : bundleContext.getBundles()) {            
-            url = bundle.getEntry(getPath() + name);
+
+        URL url;
+        for (Bundle bundle : bundleContext.getBundles()) {
+            url = bundle.getEntry(getResourcePath() + name);
             if (url != null) {
                 entry = new BundleEntry();
                 entry.url = url;
@@ -92,6 +105,7 @@
                 break;
             }
         }
+
         return entry;
     }
 

Modified: camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java (original)
+++ camel/trunk/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java Sat Mar 14 15:19:25 2009
@@ -17,29 +17,25 @@
 package org.apache.camel.osgi;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.NoFactoryAvailableException;
-import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.impl.DefaultLanguageResolver;
-import org.apache.camel.spi.Language;
-import org.apache.camel.spi.LanguageResolver;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 public class OsgiLanguageResolver extends DefaultLanguageResolver {
     private static final transient Log LOG = LogFactory.getLog(OsgiLanguageResolver.class);
+
     @Override
     protected Log getLog() {
         return LOG;
     }
     
     @Override
-    protected Class findLanguage(String name) throws Exception {
+    protected Class findLanguage(String name, CamelContext context) throws Exception {
         return Activator.getLanguage(name);
     }
     
     @Override
-    protected Class findLanguageResolver(String name) throws Exception {
+    protected Class findLanguageResolver(String name, CamelContext context) throws Exception {
         return Activator.getLanguageResolver(name);
     }
 

Modified: camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTypeConverterTest.scala
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTypeConverterTest.scala?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTypeConverterTest.scala (original)
+++ camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/ScalaTypeConverterTest.scala Sat Mar 14 15:19:25 2009
@@ -19,6 +19,7 @@
 import junit.framework.TestCase
 import junit.framework.Assert._
 
+import org.apache.camel.impl.DefaultFactoryFinder
 import org.apache.camel.impl.DefaultPackageScanClassResolver
 import org.apache.camel.impl.converter.DefaultTypeConverter
 import org.apache.camel.util.ReflectionInjector
@@ -30,7 +31,8 @@
  */
 class ScalaTypeConverterTest extends TestCase {
   
-  val converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(), new ReflectionInjector())
+  val converter = new DefaultTypeConverter(new DefaultPackageScanClassResolver(),
+      new ReflectionInjector(), new DefaultFactoryFinder())
   
   def testDocumentConverter = {
     val result = converter.convertTo(classOf[Document], <persons/>)

Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java?rev=754461&r1=754460&r2=754461&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java (original)
+++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java Sat Mar 14 15:19:25 2009
@@ -24,8 +24,8 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.impl.MainSupport;
 import org.apache.camel.spring.handler.CamelNamespaceHandler;
-import org.apache.camel.util.MainSupport;
 import org.apache.camel.view.ModelFileGenerator;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;