Hi

Recently I have spent some time to improve the type converters in Camel 2.10.

Most significant is the following changes
a) fix important bug
b) Fail fast
c) tryConvertTo
d) Expose utilization statistics


Ad a)
A bug was reported in https://issues.apache.org/jira/browse/CAMEL-5164

In summary if using camel-jaxb that offers a fallback type converter,
and a failure occurs during XML marshalling,
then subsequent new XML messages may fail, despite they were okay.

Ad b)
Due to a we need to detect this faster and better. So now the type
converter system in Camel will fail fast
by throwing a new TypeConversionException (its runtime). That allows
Camel to detect the (a) failure faster
from a fallback type converter (regular non fallback would fail fast already)

This means the API is also consistent from caller point of view. You
get a TypeConversionException if there
was a failure during a type conversion attempt.

Ad c)
There is some places in camel-core where we want to only try to
convert. For example with the binary predicates
where you want to compare if X > Y. Then we try to coerce X and Y to
numeric values.

Likewise there is a few other spots where we do this, such as the XSLT
component, where we try to use StAX, SAX, before DOM etc.
So we have introduced a tryConvertTo API, which would not fail during
type conversion.

Ad d)
The type converter system is used a lot in Camel during routing
messages. Now we expose utilization statistics,
which allow end users to spot if there is too many missing type
conversion attempts. For example a route may attempt to convert, where
there is no suitable type converter. This can now more easily be
spotted, allowing the end user to either. Implement such a missing
type converter, or
correct a mistake in his application or the likes.

The statistics is exposed in JMX and as well when Camel shutdown as a log line.




On another note I am also hunting down to avoid using the
PropertiesEditorTypeConverter, as it has many flaws
- its not thread safe
- its slow
- and 3rd party projects can add property editors that influence
Camel's type converts (eg ActiveMQ has a String -> List) properties
editor that turns a String into a List of ActiveMQDestination
instances.
- it does not understand generics in List/Collection type, eg the
ActiveMQ example above

And basically we uses it only in Camel for doing some of the simpler
basic conversions: String <-> Numeric. And so forth. But over the time
we have added those as type converter directly in Camel, as they are
faster as well.




-- 
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to