Imad
Imad

Reputation: 41

CAMEL - Channel Closed exception not caught using onException

I am opening this question as I didn't find any answer to problem in the web.

I have used camel to implement a TCP/IP server and I have defined a route like this:

    from("netty4:tcp://0.0.0.0:3510")
    .to("file:target/outbox");

and I have a client which sends data to this server. When I disconnect this client I can see in my logs this exception:

    [Camel (camel-client) thread #0 - NettyEventExecutorGroup] WARN  o.a.c.component.netty4.NettyConsumer - Closing channel as an exception was thrown from Netty. Caused by: [java.io.IOException - an existing connection was forcibly closed by the remote host]

My problem is that I am not able to catch this exception using onException clause.

    onException(IOException.class)
    .log("Exception: ${body}")
    .handled(true)
    .process(new ExceptionProcessor());

The program does not stop but I want to catch it to handle when the client is disconnected. Note that I can catch other exceptions which are thrown inside my route.

Upvotes: 2

Views: 858

Answers (1)

Bedla
Bedla

Reputation: 4919

You cannot handle it as exception, because exception is already catched in netty and logged. This exception is not propagated from netty to netty component.

The solution is a bit tricky. You can extend SimpleChannelInboundHandler and override method channelInactive as described in How can I detect network disconnection in Apache Camel?. In this custom handler you can set custom properties on exchange with additional information, which is relevant in your application.

Upvotes: 2

Related Questions