On Wed, Apr 18, 2012 at 10:10 AM, Bengt Rodehav <be...@rodehav.com> wrote:
> BTW, is there a workaround that can be used in Camel 5.9.1?
>
> I have this today:
>
>    LafaList lafaList = theExchange.getIn().getBody(LafaList.class);
>
> I've tried with this:
>
>    LafaList lafaList =
> theExchange.getIn().getMandatoryBody(LafaList.class);
>

It depends whether the conversion is using a regular type converter or
a fallback.

If its a regular then you can look it up from the registry, and invoke
it manually.
Then the exception will be propagated to you.

TypeConverter tc =
theExchange.getContext().getTypeConverterRegistry().lookup(LafaList.class,
theExchange.getIn().getBody.getClass());
if (tc != null) {
   .. invoke me manually


However for a fallback TC its trickier. And hence why the JAXB
bug/issue was harder to track down.


> In the first case I get null if the type conversion fails (due to an
> invalid XML message). In the second case I get an exception. Unfortunately
> both cases cause all subesequent conversions to fail even if the XML
> message is valid.
>
> Is there any way I can get this to work without having to wait for a new
> Camel version?
>
> /Bengt
>
> 2012/4/18 Bengt Rodehav <be...@rodehav.com>
>
>> +1
>>
>> I've just spent two days trying to figure out what I did wrong. I  had a
>> case where all subsequent xml conversions would fail after I tried to
>> process one xml message in invalid format. Then I found your post. Good job
>> fixing it.
>>
>> /Bengt
>>
>>
>> 2012/4/17 Christian Müller <christian.muel...@gmail.com>
>>
>>> +1,
>>>
>>> and thanks for your hard work...
>>>
>>> Best,
>>> Christian
>>>
>>> On Tue, Apr 17, 2012 at 11:38 AM, Claus Ibsen <claus.ib...@gmail.com>
>>> wrote:
>>>
>>> > Hi
>>> >
>>> > I am inclined to backport these changes to the 2.9 branch as I think
>>> > the bug from CAMEL-5164 would bite other people as well.
>>> > I have a workaround patch for 2.9 branch as work in progress. But I
>>> > dont feel its an optimal solution, as would the backport of the
>>> > changes from 2.10.
>>> >
>>> > There is only a slight API change in TypeConverter. Most people would
>>> > use the @Converter for their custom converters, and if so, then they
>>> > are okay (no problem there). Only for people who implement the
>>> > TypeConverter directly, and then add that directly to the
>>> > TypeConverterRegistry API. Frankly I dont see this used at all by end
>>> > users (The @Converter is mich simpler).
>>> >
>>> > However there is a slight change in the API from Message.getBody(type)
>>> > and Message.getHeader(name, Type), as they would now throw a
>>> > TypeConversionException if failing. Where as beforehand a WARN would
>>> > be logged and null returned.
>>> >
>>> > IMHO the changes from 2.10 is better and also allows end users to be
>>> > in control of the failure first-hand. And frankly also what I would
>>> > expect from the call.
>>> >
>>> > If nobody scream, then we should get this backported for the next 2.9.3
>>> > release.
>>> >
>>> > Any thoughts?
>>> >
>>> >
>>> > PS: I have attached my ugly workaround patch. We can use that as a
>>> > backup if someone scream really loud.
>>> >
>>> >
>>> >
>>> > On Tue, Apr 17, 2012 at 7:46 AM, Claus Ibsen <claus.ib...@gmail.com>
>>> > wrote:
>>> > > 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/
>>> >
>>> >
>>> >
>>> > --
>>> > 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/
>>> >
>>>
>>
>>



-- 
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