Search code examples
apache-camelidempotentonexception

Camel onException doesn't catch NoMessageIdException of idempotentConsumer?


Example route:

onException(Exception.class)
.process(new Processor() {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("it works");
        }
    })
    .handled(true);
from("jetty://http://0.0.0.0:8888/test")
.idempotentConsumer(header("myid"), MemoryIdempotentRepository.memoryIdempotentRepository(1000000))
.skipDuplicate(false)
.filter(property(Exchange.DUPLICATE_MESSAGE).isEqualTo(true))
    .throwException(new DuplicateRequestException())
.end();

Sending a request to the listener URL without myid parameter throws org.apache.camel.processor.idempotent.NoMessageIdException: No message ID could be found using expression: header(myid) on message exchange: Exchange[Message: [Body is instance of org.apache.camel.StreamCache]]

without ever passing from onException.


Solution

  • Yes this is in fact a bug in Apache Camel. I have logged a ticket to get this fixed in the next releases.