You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2010/07/10 16:27:54 UTC
[jira] Assigned: (CAMEL-2935) Broken failure reporting via
DefaultProucerTemplate.asyncCallback and Synchronization.onFailure
[ https://issues.apache.org/activemq/browse/CAMEL-2935?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen reassigned CAMEL-2935:
----------------------------------
Assignee: Claus Ibsen
> 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
> Assignee: Claus Ibsen
> Fix For: 2.4.0
>
> Attachments: on-failure.patch
>
>
> 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.