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.