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;