Author: davsclaus
Date: Sat Mar 14 15:53:11 2009
New Revision: 754465
URL: http://svn.apache.org/viewvc?rev=754465&view=rev
Log:
CAMEL-1458: Refinement to FactoryFinder to be able to easy config from spring
XML.
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
(with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.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-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
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=754465&r1=754464&r2=754465&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:53:11 2009
@@ -102,8 +102,8 @@
private ErrorHandlerBuilder errorHandlerBuilder;
private Map<String, DataFormatDefinition> dataFormats = new
HashMap<String, DataFormatDefinition>();
private Map<String, String> properties = new HashMap<String, String>();
- private FactoryFinderResolver factoryFinderResolver = new
DefaultFactoryFinder();
- private FactoryFinder factoryFinder;
+ private FactoryFinderResolver factoryFinderResolver = new
DefaultFactoryFinderResolver();
+ private FactoryFinder defaultFactoryFinder;
private final Map<String, FactoryFinder> factories = new HashMap<String,
FactoryFinder>();
private final Map<String, RouteService> routeServices = new
HashMap<String, RouteService>();
private ClassResolver classResolver;
@@ -932,10 +932,10 @@
}
public FactoryFinder getDefaultFactoryFinder() {
- if (factoryFinder == null) {
- factoryFinder =
factoryFinderResolver.resolveDefaultFactoryFinder();
+ if (defaultFactoryFinder == null) {
+ defaultFactoryFinder =
factoryFinderResolver.resolveDefaultFactoryFinder(getClassResolver());
}
- return factoryFinder;
+ return defaultFactoryFinder;
}
public void setFactoryFinderResolver(FactoryFinderResolver resolver) {
@@ -946,7 +946,7 @@
synchronized (factories) {
FactoryFinder answer = factories.get(path);
if (answer == null) {
- answer = new DefaultFactoryFinder(path);
+ answer =
factoryFinderResolver.resolveFactoryFinder(getClassResolver(), path);
factories.put(path, answer);
}
return answer;
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultClassResolver.java
Sat Mar 14 15:53:11 2009
@@ -16,6 +16,8 @@
*/
package org.apache.camel.impl;
+import java.io.InputStream;
+
import org.apache.camel.spi.ClassResolver;
import org.apache.camel.util.ObjectHelper;
@@ -76,6 +78,11 @@
return answer;
}
+ public InputStream loadResourceAsStream(String uri) {
+ ObjectHelper.notEmpty(uri, "uri");
+ return ObjectHelper.loadResourceAsStream(uri);
+ }
+
protected Class loadClass(String name, ClassLoader loader) {
ObjectHelper.notEmpty(name, "name");
return ObjectHelper.loadClass(name, loader);
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinder.java
Sat Mar 14 15:53:11 2009
@@ -26,37 +26,25 @@
import java.util.concurrent.ConcurrentHashMap;
import org.apache.camel.NoFactoryAvailableException;
+import org.apache.camel.spi.ClassResolver;
import org.apache.camel.spi.FactoryFinder;
-import org.apache.camel.spi.FactoryFinderResolver;
import org.apache.camel.spi.Injector;
import org.apache.camel.util.ObjectHelper;
/**
* Default factory finder.
*/
-public class DefaultFactoryFinder implements FactoryFinder,
FactoryFinderResolver {
-
- public static final transient String DEFAULT_RESOURCE_PATH =
"META-INF/services/org/apache/camel/";
+public class DefaultFactoryFinder implements FactoryFinder {
protected final ConcurrentHashMap<String, Class> classMap = new
ConcurrentHashMap<String, Class>();
+ private ClassResolver classResolver;
private String path;
- public DefaultFactoryFinder() {
- this(DEFAULT_RESOURCE_PATH);
- }
-
- public DefaultFactoryFinder(String resourcePath) {
+ public DefaultFactoryFinder(ClassResolver classResolver, String
resourcePath) {
+ this.classResolver = classResolver;
this.path = resourcePath;
}
- public FactoryFinder resolveDefaultFactoryFinder() {
- return new DefaultFactoryFinder();
- }
-
- public FactoryFinder resolveFactoryFinder(String path) {
- return new DefaultFactoryFinder(path);
- }
-
public String getResourcePath() {
return path;
}
@@ -133,7 +121,7 @@
throw new IOException("Expected property is missing: " +
propertyPrefix + "class");
}
- Class clazz = ObjectHelper.loadClass(className);
+ Class clazz = classResolver.resolveClass(className);
if (clazz == null) {
throw new ClassNotFoundException(className);
}
@@ -143,7 +131,7 @@
private Properties doFindFactoryProperties(String key) throws IOException {
String uri = path + key;
- InputStream in = ObjectHelper.loadResourceAsStream(uri);
+ InputStream in = classResolver.loadResourceAsStream(uri);
if (in == null) {
throw new NoFactoryAvailableException(uri);
}
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java?rev=754465&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
Sat Mar 14 15:53:11 2009
@@ -0,0 +1,40 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.FactoryFinderResolver;
+
+/**
+ * Default factory finder.
+ *
+ * @version $Revision$
+ */
+public class DefaultFactoryFinderResolver implements FactoryFinderResolver {
+
+ public static final transient String DEFAULT_RESOURCE_PATH =
"META-INF/services/org/apache/camel/";
+
+ public FactoryFinder resolveDefaultFactoryFinder(ClassResolver
classResolver) {
+ return new DefaultFactoryFinder(classResolver, DEFAULT_RESOURCE_PATH);
+ }
+
+ public FactoryFinder resolveFactoryFinder(ClassResolver classResolver,
String resourcePath) {
+ return new DefaultFactoryFinder(classResolver, resourcePath);
+ }
+
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultFactoryFinderResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ClassResolver.java
Sat Mar 14 15:53:11 2009
@@ -16,6 +16,8 @@
*/
package org.apache.camel.spi;
+import java.io.InputStream;
+
/**
* A class resolver for loading classes in a loosly coupled manner to cater
for different platforms such
* as standalone, web container, j2ee container and OSGi platforms.
@@ -98,4 +100,11 @@
*/
<T> Class<T> resolveMandatoryClass(String name, Class<T> type, ClassLoader
loader) throws ClassNotFoundException;
+ /**
+ * Loads the given resource as a stream
+ * @param uri the uri of the resource
+ * @return as a stream
+ */
+ InputStream loadResourceAsStream(String uri);
+
}
Modified:
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=754465&r1=754464&r2=754465&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/FactoryFinderResolver.java
Sat Mar 14 15:53:11 2009
@@ -24,18 +24,20 @@
public interface FactoryFinderResolver {
/**
- * Creates a new defaut factory finder.
+ * Creates a new defaut factory finder using a default resource path.
*
+ * @param classResolver the class resolcer to use
* @return a factory finder.
*/
- FactoryFinder resolveDefaultFactoryFinder();
+ FactoryFinder resolveDefaultFactoryFinder(ClassResolver classResolver);
/**
* Creates a new factory finder.
*
- * @param path the resource path
+ * @param classResolver the class resolcer to use
+ * @param resourcePath the resource path as base to lookup files within
* @return a factory finder.
*/
- FactoryFinder resolveFactoryFinder(String path);
+ FactoryFinder resolveFactoryFinder(ClassResolver classResolver, String
resourcePath);
}
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=754465&r1=754464&r2=754465&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:53:11 2009
@@ -31,8 +31,9 @@
import org.apache.camel.Exchange;
import org.apache.camel.TypeConverter;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultClassResolver;
import org.apache.camel.impl.DefaultExchange;
-import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
import org.apache.camel.impl.DefaultPackageScanClassResolver;
import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.util.IntrospectionSupport;
@@ -47,7 +48,7 @@
private static final transient Log LOG =
LogFactory.getLog(ConverterTest.class);
protected TypeConverter converter = new DefaultTypeConverter(new
DefaultPackageScanClassResolver(),
- new ReflectionInjector(), new DefaultFactoryFinder());
+ new ReflectionInjector(), new
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new
DefaultClassResolver()));
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=754465&r1=754464&r2=754465&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:53:11 2009
@@ -18,7 +18,6 @@
import java.io.InputStream;
import java.io.StringReader;
-
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
@@ -28,7 +27,8 @@
import junit.framework.TestCase;
import org.apache.camel.TypeConverter;
-import org.apache.camel.impl.DefaultFactoryFinder;
+import org.apache.camel.impl.DefaultClassResolver;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
import org.apache.camel.impl.DefaultPackageScanClassResolver;
import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.util.ReflectionInjector;
@@ -42,7 +42,7 @@
public class JaxpTest extends TestCase {
private static final transient Log LOG = LogFactory.getLog(JaxpTest.class);
protected TypeConverter converter = new DefaultTypeConverter(new
DefaultPackageScanClassResolver(),
- new ReflectionInjector(), new DefaultFactoryFinder());
+ new ReflectionInjector(), new
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new
DefaultClassResolver()));
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=754465&r1=754464&r2=754465&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:53:11 2009
@@ -24,7 +24,8 @@
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.DefaultClassResolver;
+import org.apache.camel.impl.DefaultFactoryFinderResolver;
import org.apache.camel.impl.DefaultPackageScanClassResolver;
import org.apache.camel.impl.converter.DefaultTypeConverter;
import org.apache.camel.util.ReflectionInjector;
@@ -34,7 +35,7 @@
*/
public class StringSourceTest extends TestCase {
protected TypeConverter converter = new DefaultTypeConverter(new
DefaultPackageScanClassResolver(),
- new ReflectionInjector(), new DefaultFactoryFinder());
+ new ReflectionInjector(), new
DefaultFactoryFinderResolver().resolveDefaultFactoryFinder(new
DefaultClassResolver()));
protected String expectedBody = "<hello>world!</hello>";
public void testSerialization() throws Exception {
Modified:
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=754465&r1=754464&r2=754465&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
(original)
+++
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
Sat Mar 14 15:53:11 2009
@@ -49,6 +49,7 @@
import org.apache.camel.processor.interceptor.TraceFormatter;
import org.apache.camel.processor.interceptor.Tracer;
import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.FactoryFinderResolver;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.PackageScanClassResolver;
import org.apache.camel.spi.Registry;
@@ -166,6 +167,10 @@
if (classResolver != null) {
getContext().setClassResolver(classResolver);
}
+ FactoryFinderResolver factoryFinderResolver =
getBeanForType(FactoryFinderResolver.class);
+ if (factoryFinderResolver != null) {
+ getContext().setFactoryFinderResolver(factoryFinderResolver);
+ }
Debugger debugger = getBeanForType(Debugger.class);
if (debugger != null) {