You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Manuel EVENO (JIRA)" <ji...@apache.org> on 2008/07/22 11:18:00 UTC
[jira] Commented: (SM-1473) Camel Service Engine Component not
handling error from Camel processing
[ https://issues.apache.org/activemq/browse/SM-1473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44432#action_44432 ]
Manuel EVENO commented on SM-1473:
----------------------------------
A possible workaround consists in creating an ErrorProcessor that handles status :
{code:java}
public final class ErrorProcessor implements Processor {
private static final Logger logger = Logger.getLogger(ErrorProcessor.class);
public void process(Exchange exchange) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("Trying to find an exception in property: " + DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY);
}
Throwable exception = (Throwable) exchange.getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY);
if (exception != null) {
exchange.setException(exception);
} else {
logger.debug("Trying to find an exception using: DeadLetterChannel.restoreExceptionOnExchange()");
DeadLetterChannel.restoreExceptionOnExchange(exchange);
}
exception = exchange.getException();
if (logger.isDebugEnabled()) {
logger.debug("Exchange exception is " + exception);
logger.debug("Exchange.isFailed()=" + exchange.isFailed());
}
if (exception != null && exchange instanceof JbiExchange) {
logger.info("An exception has occured, setting ServiceMix messageExchange status to Error");
MessageExchangeImpl messageExchange = (MessageExchangeImpl) ((JbiExchange) exchange).getMessageExchange();
messageExchange.setStatus(ExchangeStatus.ERROR);
if (exception instanceof Exception) {
messageExchange.setError((Exception)exception);
} else {
messageExchange.setError(new Exception(exception));
}
}
}
}
{code}
And setting it to the deadLetterChannel as the final endpoint :
{code:java}
deadLetterChannel.setDefaultDeadLetterEndpoint(new ErrorProcessor());
{code}
> Camel Service Engine Component not handling error from Camel processing
> -----------------------------------------------------------------------
>
> Key: SM-1473
> URL: https://issues.apache.org/activemq/browse/SM-1473
> Project: ServiceMix
> Issue Type: Bug
> Components: servicemix-camel
> Affects Versions: 3.2.1, 3.2.2
> Environment: ServiceMix 3.2.1
> ServiceMix-Camel 3.2.2-SNAPSHOT
> Camel 1.4-SNAPSHOT
> Reporter: Manuel EVENO
>
> When an exception occured in camel processor, the message exchange is sent back to the NMR without taking care of its failed status.
> ServiceMix MessageExchange ends in Done status instead of Error.
> The probably incorrect code is in CamelJbiEndpoint.handleActiveProviderExchange() :
> After calling "camelProcessor.process(camelExchange);", the method sould have a look at camelExchange.isFailed()
> and filling exchange with correct status and exception before calling "send(exchange);".
> http://svn.apache.org/repos/asf/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.