camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ensonik <mike.mcl...@streamtheworld.com>
Subject Re: Dropped jms messages on java.io.UTFDataFormatException
Date Tue, 04 Aug 2009 15:38:50 GMT

Thanks for the input. I'll see what I can do about dealing with it in AMQ
directly.



Claus Ibsen-2 wrote:
> 
> On Mon, Aug 3, 2009 at 4:16 AM, Willem Jiang<willem.jiang@gmail.com>
> wrote:
>> Hi,
>>
>> Current Camel Error handler only works for the checking the error which
>> is
>> thrown between the route's endpoints.
>>
>> Your UTFDataFormatException is thrown when the Message is created to be
>> routed into the pipeline, I don't think the camel error handler can catch
>> this kind of error.
>>
> 
> Yes the Camel error handling is based on message exchanges and not on
> initial transport issues.
> 
> You can / should remedy this with AMQ as its has a poison message. And
> must have means to be able to deal with it in AMQ.
> 
> 
>> Maybe we need to do some enhancement on the JMSComponent to let it create
>> a
>> message with exception when it create the camel message from the JMS
>> message, then camel error handle will check it when this message  is
>> routing
>> to the other endpoint.
>>
> 
> Yeah its kinda a trade off whether Camel should be able to create an
> artificial message and set the caused exception on it
> to allow Camel to handle the exception.
> 
> But what if the exception was some remote connection exception and not
> as in this case some JMS payload issues.
> Its kinda hard to do this well and generic for all components.
> 
> 
> 
>> Willem
>>
>> Ensonik wrote:
>>>
>>> Hi all,
>>>
>>> We currently have a problem where messages that can't be read properly
>>> get
>>> dropped instead of being put into a dlq. I have an errorHandler that
>>> works
>>> properly when the exception is thrown from within the route (from a
>>> processor for example), but refuses to kick in when it's a lower level
>>> error
>>> (i.e.: Before even getting into the route).
>>>
>>> - I'm using camel-2.0-M1
>>> - The route is setup through the Java dsl
>>>
>>> The route looks something like:
>>>        errorHandler(
>>>                deadLetterChannel(configuration.getDLQCompomentUrl()).
>>>                maximumRedeliveries(configuration.getMaxRedeliveries()).
>>>                log(RTSListenerRouteBuilder.class).
>>>                retriesExhaustedLogLevel(LoggingLevel.ERROR).
>>>                retryAttemptedLogLevel(LoggingLevel.TRACE)
>>>        );
>>>
>>>        from(configuration.getSourceComponentUrl()).
>>>        choice().
>>>                when(configuration.getMessageFilter()).
>>>                        process(configuration.getMessageEnricher()).
>>>                        to(configuration.getMessageEndpoint()).
>>>                otherwise().
>>>                      
>>>  to(configuration.getInvalidMessageComponentUrl());
>>>
>>> Pretty straightforward ... I've tried adding a few variants, most
>>> notable
>>> adding a global exception handler:
>>>
>>>
>>> onException(java.io.UTFDataFormatException.class).handled(false).to("jms.mydlq");
>>>
>>> To no avail.
>>>
>>> Here's the stack trace I get:
>>> [WARN]
>>> [org.springframework.jms.listener.DefaultMessageListenerContainer]
>>> Execution of JMS message listener failed
>>> org.apache.camel.RuntimeCamelException: Failed to extract body due to:
>>> javax.jms.JMSException: java.io.UTFDataFormatException. Message:
>>> ActiveMQTextMessage {...l}
>>>        at
>>>
>>> org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:104)
>>>        at
>>> org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:150)
>>>        at
>>> org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:45)
>>>        at
>>> org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:52)
>>>        at
>>>
>>> org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:74)
>>>        at
>>>
>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:52)
>>>        at
>>>
>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>        at
>>>
>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:65)
>>>        at
>>>
>>> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:72)
>>>        at
>>>
>>> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543)
>>>        at
>>>
>>> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
>>>        at
>>>
>>> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
>>>        at
>>>
>>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
>>>        at
>>>
>>> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
>>>        at
>>>
>>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
>>>        at
>>>
>>> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:881)
>>>        at java.lang.Thread.run(Thread.java:613)
>>> Caused by: javax.jms.JMSException: java.io.UTFDataFormatException
>>>        at
>>>
>>> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
>>>        at
>>>
>>> org.apache.activemq.command.ActiveMQTextMessage.getText(ActiveMQTextMessage.java:91)
>>>        at
>>>
>>> org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:93)
>>>        ... 16 more
>>> Caused by: java.io.UTFDataFormatException
>>>        at
>>>
>>> org.apache.activemq.util.MarshallingSupport.readUTF8(MarshallingSupport.java:372)
>>>        at
>>>
>>> org.apache.activemq.command.ActiveMQTextMessage.getText(ActiveMQTextMessage.java:86)
>>>        ... 17 more
>>>
>>>
>>>
>>> Thanks for any input.
>>>
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://www.nabble.com/Dropped-jms-messages-on-java.io.UTFDataFormatException-tp24761350p24811014.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message