Author: davsclaus
Date: Wed Nov 4 16:53:24 2009
New Revision: 832794
URL: http://svn.apache.org/viewvc?rev=832794&view=rev
Log:
CAMEL-2131: Fixed issue with DataFormatResolver.
Removed:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregatorRouteNumberOfProcessorTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/CamelContext.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/DefaultDataFormatResolver.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DataFormatResolver.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=832794&r1=832793&r2=832794&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 Wed
Nov 4 16:53:24 2009
@@ -460,20 +460,20 @@
Map<String, DataFormatDefinition> getDataFormats();
/**
- * Resolve a data format given its definition
+ * Resolve a data format given a reference to lookup in {...@link Registry}
*
- * @param def the data format definition
- * @return the resolved data format
+ * @param name the data format name or a reference to it in the {...@link
Registry}
+ * @return the resolved data format, or <tt>null</tt> if not found
*/
- DataFormat resolveDataFormat(DataFormatDefinition def);
+ DataFormat resolveDataFormatByRef(String name);
/**
- * Resolve a data format given its name
+ * Resolve a data format given its class name
*
- * @param name the data format name
- * @return the resolved data format
+ * @param name the fully qualified class name
+ * @return the resolved data format, or <tt>null</tt> if not found
*/
- DataFormat resolveDataFormat(String name);
+ DataFormat resolveDataFormatByClassName(String name);
/**
* Sets the properties that can be referenced in the camel context
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=832794&r1=832793&r2=832794&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
Wed Nov 4 16:53:24 2009
@@ -1361,12 +1361,12 @@
this.dataFormatResolver = dataFormatResolver;
}
- public DataFormat resolveDataFormat(DataFormatDefinition def) {
- return dataFormatResolver.resolveDataFormat(def, this);
+ public DataFormat resolveDataFormatByRef(String ref) {
+ return dataFormatResolver.resolveDataFormatByRef(ref, this);
}
- public DataFormat resolveDataFormat(String ref) {
- return dataFormatResolver.resolveDataFormat(ref, this);
+ public DataFormat resolveDataFormatByClassName(String name) {
+ return dataFormatResolver.resolveDataFormatByClassName(name, this);
}
protected String getEndpointKey(String uri, Endpoint endpoint) {
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDataFormatResolver.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDataFormatResolver.java?rev=832794&r1=832793&r2=832794&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDataFormatResolver.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultDataFormatResolver.java
Wed Nov 4 16:53:24 2009
@@ -20,6 +20,7 @@
import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.DataFormatResolver;
+import org.apache.camel.util.ObjectHelper;
/**
* Default data format resolver
@@ -28,32 +29,39 @@
*/
public class DefaultDataFormatResolver implements DataFormatResolver {
- @SuppressWarnings("unchecked")
- public DataFormat resolveDataFormat(DataFormatDefinition definition,
CamelContext context) {
- Class type =
context.getClassResolver().resolveClass(definition.getDataFormatName());
- if (type == null) {
- throw new IllegalArgumentException("The class " +
definition.getDataFormatName()
- + " is not on the classpath! Cannot use the dataFormat " +
this);
+ public DataFormat resolveDataFormatByClassName(String name, CamelContext
context) {
+ if (name != null) {
+ Class type = context.getClassResolver().resolveClass(name);
+ if (type == null) {
+ throw new IllegalArgumentException("The class " + name + " is
not on the classpath! Cannot use the dataFormat " + this);
+ }
+ return (DataFormat) ObjectHelper.newInstance(type);
}
- return (DataFormat) context.getInjector().newInstance(type);
+ return null;
}
- public DataFormat resolveDataFormat(String ref, CamelContext context) {
- DataFormat dataFormat = context.getRegistry().lookup(ref,
DataFormat.class);
+ public DataFormat resolveDataFormatByRef(String ref, CamelContext context)
{
+ DataFormat dataFormat = lookup(context, ref, DataFormat.class);
if (dataFormat == null) {
// lookup type and create the data format from it
- DataFormatDefinition type = context.getRegistry().lookup(ref,
DataFormatDefinition.class);
+ DataFormatDefinition type = lookup(context, ref,
DataFormatDefinition.class);
if (type == null && context.getDataFormats() != null) {
type = context.getDataFormats().get(ref);
}
if (type != null) {
- dataFormat = resolveDataFormat(type, context);
+ dataFormat = type.getDataFormat();
}
}
- if (dataFormat == null) {
- throw new IllegalArgumentException("Cannot find data format in
registry with ref: " + ref);
- }
return dataFormat;
}
+ private static <T> T lookup(CamelContext context, String ref, Class<T>
type) {
+ try {
+ return context.getRegistry().lookup(ref, type);
+ } catch (Exception e) {
+ // need to ignore not same type and return it as null
+ return null;
+ }
+ }
+
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java?rev=832794&r1=832793&r2=832794&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
Wed Nov 4 16:53:24 2009
@@ -61,9 +61,39 @@
public static DataFormat getDataFormat(RouteContext routeContext,
DataFormatDefinition type, String ref) {
if (type == null) {
ObjectHelper.notNull(ref, "ref or dataFormat");
- return routeContext.getCamelContext().resolveDataFormat(ref);
+
+ // try to let resolver see if it can resolve it, its not always
possible
+ DataFormat dataFormat =
routeContext.getCamelContext().resolveDataFormatByRef(ref);
+
+ if (dataFormat == null) {
+ // resolver could not then do a bit more leg work using the
route context
+ // which can help instantiate data formats
+
+ type = lookup(routeContext, ref, DataFormatDefinition.class);
+ if (type == null) {
+ type = routeContext.getDataFormat(ref);
+ }
+ if (type != null) {
+ dataFormat = type.getDataFormat(routeContext);
+ }
+ }
+
+ if (dataFormat == null) {
+ throw new IllegalArgumentException("Cannot find data format in
registry with ref: " + ref);
+ }
+
+ return dataFormat;
} else {
- return type.createDataFormat(routeContext);
+ return type.getDataFormat(routeContext);
+ }
+ }
+
+ private static <T> T lookup(RouteContext routeContext, String ref,
Class<T> type) {
+ try {
+ return routeContext.lookup(ref, type);
+ } catch (Exception e) {
+ // need to ignore not same type and return it as null
+ return null;
}
}
@@ -82,7 +112,7 @@
@SuppressWarnings("unchecked")
protected DataFormat createDataFormat(RouteContext routeContext) {
if (dataFormatName != null) {
- return routeContext.getCamelContext().resolveDataFormat(this);
+ return
routeContext.getCamelContext().resolveDataFormatByClassName(dataFormatName);
}
return null;
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DataFormatResolver.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DataFormatResolver.java?rev=832794&r1=832793&r2=832794&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DataFormatResolver.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/DataFormatResolver.java
Wed Nov 4 16:53:24 2009
@@ -27,21 +27,21 @@
public interface DataFormatResolver {
/**
- * Resolves the given data format by its definition.
+ * Resolves the given data format by a reference.
*
- * @param definition the definition
+ * @param name the fully qualified classname
* @param context the camel context
- * @return the data format
+ * @return the data format or <tt>null</tt> if not possible to resolve
*/
- DataFormat resolveDataFormat(DataFormatDefinition definition, CamelContext
context);
+ DataFormat resolveDataFormatByClassName(String name, CamelContext context);
/**
- * Resolves the given data format by its name.
+ * Resolves the given data format by a reference.
*
- * @param name the name
+ * @param ref the reference to lookup in {...@link
org.apache.camel.spi.Registry}
* @param context the camel context
- * @return the data format
+ * @return the data format or <tt>null</tt> if not possible to resolve
*/
- DataFormat resolveDataFormat(String name, CamelContext context);
+ DataFormat resolveDataFormatByRef(String ref, CamelContext context);
}