Broken failure reporting via DefaultProucerTemplate.asyncCallback and
Synchronization.onFailure
-----------------------------------------------------------------------------------------------
Key: CAMEL-2935
URL: https://issues.apache.org/activemq/browse/CAMEL-2935
Project: Apache Camel
Issue Type: Bug
Components: camel-core
Affects Versions: 2.3.0
Reporter: Martin Krasser
Fix For: 2.4.0
The recent change in {{ProducerCache.send}}
{code:java|title=ProducerCache.java}
public void send(Endpoint endpoint, Exchange exchange) {
try {
sendExchange(endpoint, null, null, exchange);
// RECENT CHANGE HERE:
// ensure that CamelExecutionException is always thrown
if (exchange.getException() != null) {
exchange.setException(wrapCamelExecutionException(exchange,
exchange.getException()));
}
} catch (Exception e) {
throw wrapCamelExecutionException(exchange, e);
}
}
{code}
that throws a {{CamelExecutionException}} if {{exchange.getException}} is not
null, makes it impossible for {{DefaultProducerTemplate.asyncCallback}} to
report failures (other than fault messages) asynchronously via
{{Synchronization.onFailure}}
{code:java|title=DefaultProducerTemplate.java}
public Future<Exchange> asyncCallback(final Endpoint endpoint, final
Exchange exchange, final Synchronization onCompletion) {
Callable<Exchange> task = new Callable<Exchange>() {
public Exchange call() throws Exception {
// FIXME: exception is thrown in Camel 2.4 where a normal
return with answer.getException != null was done in Camel 2.3
Exchange answer = send(endpoint, exchange);
if (answer.isFailed()) {
onCompletion.onFailure(answer);
} else {
// ...
}
return answer;
}
};
// ...
}
{code}
This was working in Camel 2.3 (but unfortunately there wasn't any test case for
it). I attached a patch for {{DefaultProducerTemplateAsyncTest}} that
demonstrates the problem. I didn't commit a fix yet because I'm unsure at the
moment about the best way to fix that. Of course I tried a naive fix in the
DefaultProducerTemplate.asyncCallback methods which causes the test (in the
patch) to pass but I'd like to hear other opinions before I continue.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.