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 2008/11/14 09:33:40 UTC
svn commit: r713950 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/ main/java/org/apache/camel/impl/
main/java/org/apache/camel/impl/converter/
main/java/org/apache/camel/model/ main/java/org/apache/camel/spi/
test/java/org/apach...
Author: davsclaus
Date: Fri Nov 14 00:33:39 2008
New Revision: 713950
URL: http://svn.apache.org/viewvc?rev=713950&view=rev
Log:
CAMEL-1042: TypeConverterRegistry is now exposed in the spi package. Also end users can get access to this registry from CamelContext.
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java (contents, props changed)
- copied, changed from r713793, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java (contents, props changed)
- copied, changed from r713793, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
Removed:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterLoader.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterRegistry.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/CachingInjector.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.java Fri Nov 14 00:33:39 2008
@@ -30,6 +30,7 @@
import org.apache.camel.spi.Language;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.TypeConverterRegistry;
/**
* Interface used to represent the context used to configure routes and the
@@ -222,6 +223,13 @@
TypeConverter getTypeConverter();
/**
+ * Returns the type converter registry where type converters can be added or looked up
+ *
+ * @return the type converter registry
+ */
+ TypeConverterRegistry getTypeConverterRegistry();
+
+ /**
* Returns the registry used to lookup components by name and type such as the Spring ApplicationContext,
* JNDI or the OSGi Service Registry
*
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/TypeConverter.java Fri Nov 14 00:33:39 2008
@@ -33,7 +33,7 @@
* @param type the requested type
* @param value the value to be converted
* @return the converted value
- * @throws {@link NoTypeConversionAvailableException} if conversion not possible
+ * @throws NoTypeConversionAvailableException if conversion not possible
*/
<T> T convertTo(Class<T> type, Object value);
@@ -47,7 +47,7 @@
* @param exchange the current exchange
* @param value the value to be converted
* @return the converted value
- * @throws {@link NoTypeConversionAvailableException} if conversion not possible
+ * @throws NoTypeConversionAvailableException} if conversion not possible
*/
<T> T convertTo(Class<T> type, Exchange exchange, Object value);
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Fri Nov 14 00:33:39 2008
@@ -55,6 +55,7 @@
import org.apache.camel.spi.LanguageResolver;
import org.apache.camel.spi.LifecycleStrategy;
import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.FactoryFinder;
import org.apache.camel.util.NoFactoryAvailableException;
@@ -84,6 +85,7 @@
private List<Route> routes;
private List<Service> servicesToClose = new ArrayList<Service>();
private TypeConverter typeConverter;
+ private TypeConverterRegistry typeConverterRegistry;
private ExchangeConverter exchangeConverter;
private Injector injector;
private ComponentResolver componentResolver;
@@ -454,6 +456,24 @@
this.typeConverter = typeConverter;
}
+ public TypeConverterRegistry getTypeConverterRegistry() {
+ if (typeConverterRegistry == null) {
+ // init type converter as its lazy
+ if (typeConverter == null) {
+ getTypeConverter();
+ }
+ // type converter is usually the default one that also is the registry
+ if (typeConverter instanceof DefaultTypeConverter) {
+ typeConverterRegistry = (DefaultTypeConverter) typeConverter;
+ }
+ }
+ return typeConverterRegistry;
+ }
+
+ public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) {
+ this.typeConverterRegistry = typeConverterRegistry;
+ }
+
public Injector getInjector() {
if (injector == null) {
injector = createInjector();
@@ -684,7 +704,9 @@
* Lazily create a default implementation
*/
protected TypeConverter createTypeConverter() {
- return new DefaultTypeConverter(getInjector());
+ DefaultTypeConverter answer = new DefaultTypeConverter(getInjector());
+ typeConverterRegistry = answer;
+ return answer;
}
/**
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterLoader.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterLoader.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterLoader.java Fri Nov 14 00:33:39 2008
@@ -23,8 +23,8 @@
import java.util.List;
import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.impl.converter.AnnotationTypeConverterLoader;
-import org.apache.camel.impl.converter.TypeConverterRegistry;
import org.apache.camel.util.ObjectHelper;
/**
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterRegistry.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterRegistry.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterRegistry.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ReportingTypeConverterRegistry.java Fri Nov 14 00:33:39 2008
@@ -20,7 +20,7 @@
import java.util.List;
import org.apache.camel.TypeConverter;
-import org.apache.camel.impl.converter.TypeConverterRegistry;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.spi.Injector;
/**
@@ -41,6 +41,19 @@
}
}
+ public TypeConverter lookup(Class toType, Class fromType) {
+ if (errors.size() == 0) {
+ errors.add("Method should not be invoked.");
+ }
+ return null;
+ }
+
+ public void setInjector(Injector injector) {
+ if (errors.size() == 0) {
+ errors.add("Method should not be invoked.");
+ }
+ }
+
public Injector getInjector() {
return null;
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java Fri Nov 14 00:33:39 2008
@@ -20,7 +20,6 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
@@ -35,6 +34,7 @@
import org.apache.camel.Converter;
import org.apache.camel.Exchange;
import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.ResolverUtil;
import org.apache.camel.util.WebSphereResolverUtil;
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/CachingInjector.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/CachingInjector.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/CachingInjector.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/CachingInjector.java Fri Nov 14 00:33:39 2008
@@ -16,6 +16,8 @@
*/
package org.apache.camel.impl.converter;
+import org.apache.camel.spi.TypeConverterRegistry;
+
/**
* A caching proxy
*
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/DefaultTypeConverter.java Fri Nov 14 00:33:39 2008
@@ -28,6 +28,7 @@
import org.apache.camel.TypeConverter;
import org.apache.camel.spi.Injector;
import org.apache.camel.spi.TypeConverterAware;
+import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.util.FactoryFinder;
import org.apache.camel.util.NoFactoryAvailableException;
import org.apache.camel.util.ObjectHelper;
@@ -159,7 +160,7 @@
synchronized (typeMappings) {
converter = typeMappings.get(key);
if (converter == null) {
- converter = findTypeConverter(toType, fromType, value);
+ converter = lookup(toType, fromType);
if (converter != null) {
typeMappings.put(key, converter);
}
@@ -168,10 +169,10 @@
return converter;
}
- /**
- * Tries to auto-discover any available type converters
- */
- protected TypeConverter findTypeConverter(Class toType, Class fromType, Object value) {
+ public TypeConverter lookup(Class toType, Class fromType) {
+ // make sure we have loaded the converters
+ checkLoaded();
+
// lets try the super classes of the from type
if (fromType != null) {
Class fromSuperClass = fromType.getSuperclass();
@@ -179,7 +180,7 @@
TypeConverter converter = getTypeConverter(toType, fromSuperClass);
if (converter == null) {
- converter = findTypeConverter(toType, fromSuperClass, value);
+ converter = lookup(toType, fromSuperClass);
}
if (converter != null) {
return converter;
@@ -200,7 +201,7 @@
TypeConverter converter = getTypeConverter(toType, fromSuperClass);
if (converter == null) {
- converter = findTypeConverter(toType, fromSuperClass, value);
+ converter = lookup(toType, fromSuperClass);
}
if (converter != null) {
return converter;
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterLoader.java Fri Nov 14 00:33:39 2008
@@ -16,6 +16,8 @@
*/
package org.apache.camel.impl.converter;
+import org.apache.camel.spi.TypeConverterRegistry;
+
/**
* A pluggable strategy to load type converters into a registry from some kind of mechanism
*
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java?rev=713950&r1=713949&r2=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorType.java Fri Nov 14 00:33:39 2008
@@ -922,10 +922,14 @@
/**
* Creates the <a
- * href="http://activemq.apache.org/camel/delayer.html">Delayer</a> pattern
- * where an expression is used to calculate the time which the message will
- * be dispatched on
+ * href="http://activemq.apache.org/camel/throttler.html">Throtler</a> pattern
+ * for throttling messages to ensure that a specific endpoint does not get overloaded,
+ * or we don't exceed an agreed SLA with some external service?
+ * <p/>
+ * Will default use a time period of 1 second, so setting the maximumRequestCount to eg 10
+ * will default ensure at most 10 messages per second.
*
+ * @param maximumRequestCount the maximum messages
* @return the builder
*/
public ThrottlerType throttler(long maximumRequestCount) {
Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java (from r713793, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java?p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java&p1=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java&r1=713793&r2=713950&rev=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/converter/TypeConverterRegistry.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java Fri Nov 14 00:33:39 2008
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.impl.converter;
+package org.apache.camel.spi;
import org.apache.camel.TypeConverter;
import org.apache.camel.spi.Injector;
@@ -27,7 +27,7 @@
public interface TypeConverterRegistry {
/**
- * Allows a new type converter to be registered
+ * Registers a new type converter
*
* @param toType the type to convert to
* @param fromType the type to convert from
@@ -35,5 +35,22 @@
*/
void addTypeConverter(Class toType, Class fromType, TypeConverter typeConverter);
+ /**
+ * Performs a lookup for a given type converter.
+ *
+ * @param toType the type to convert to
+ * @param fromType the type to convert from
+ * @return the type converter or null if not found.
+ */
+ TypeConverter lookup(Class toType, Class fromType);
+
+ /**
+ * Sets the injector to be used for creating new instances during type convertions.
+ */
+ void setInjector(Injector injector);
+
+ /**
+ * Gets the injector
+ */
Injector getInjector();
}
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java (from r713793, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java&r1=713793&r2=713950&rev=713950&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java Fri Nov 14 00:33:39 2008
@@ -16,27 +16,72 @@
*/
package org.apache.camel.impl;
+import java.io.File;
+import java.io.InputStream;
+
import junit.framework.TestCase;
-import org.apache.camel.Component;
-import org.apache.camel.component.bean.BeanComponent;
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConverter;
/**
* @version $Revision$
*/
-public class DefaultCamelContextTest extends TestCase {
+public class TypeConverterRegistryTest extends TestCase {
- public void testAutoCreateComponentsOn() {
+ public void testDefaultTypeConverterRegistry() {
DefaultCamelContext ctx = new DefaultCamelContext();
- Component component = ctx.getComponent("bean");
- assertNotNull(component);
- assertEquals(component.getClass(), BeanComponent.class);
+ assertNotNull(ctx.getTypeConverterRegistry());
+
+ // file to inputstream is a default converter in Camel
+ TypeConverter tc = ctx.getTypeConverterRegistry().lookup(InputStream.class, File.class);
+ assertNotNull(tc);
}
- public void testAutoCreateComponentsOff() {
- DefaultCamelContext ctx = new DefaultCamelContext();
- ctx.setAutoCreateComponents(false);
- Component component = ctx.getComponent("bean");
- assertNull(component);
+ public void testAddTypeConverter() {
+ DefaultCamelContext context = new DefaultCamelContext();
+
+ // START SNIPPET: e1
+ // add our own type converter manually that converts from String -> MyOrder using MyOrderTypeConverter
+ context.getTypeConverterRegistry().addTypeConverter(MyOrder.class, String.class, new MyOrderTypeConverter());
+ // END SNIPPET: e1
+
+ // START SNIPPET: e3
+ MyOrder order = context.getTypeConverter().convertTo(MyOrder.class, "123");
+ // END SNIPPET: e3
+
+ assertNotNull(order);
+ assertEquals(123, order.getId());
+ }
+
+ private class MyOrder {
+ private int id;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+ }
+
+ // START SNIPPET: e2
+ private class MyOrderTypeConverter implements TypeConverter {
+
+ public <T> T convertTo(Class<T> type, Object value) {
+ // converter from value to the MyOrder bean
+ MyOrder order = new MyOrder();
+ order.setId(Integer.parseInt(value.toString()));
+ return (T) order;
+ }
+
+ public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
+ // this method with the Exchange parameter will be preferd by Camel to invoke
+ // this allows you to fetch information from the exchange during convertions
+ // such as an encoding parameter or the likes
+ return convertTo(type, value);
+ }
}
+ // END SNIPPET: e2
}
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
------------------------------------------------------------------------------
svn:mergeinfo =