code: @Override
    public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) {
      final Channel channel = ctx.channel();
  
      LOG.log(Level.INFO, "Unexpected exception from downstream. channel: {0} local: {1} remote: {2}",
          new Object[]{channel, channel.localAddress(), channel.remoteAddress()});
      LOG.log(Level.WARNING, "Unexpected exception from downstream.", cause);
      channel.close();
      this.listener.exceptionCaught(ctx, cause);
    }
docs: Handles the exception event.
  
  @param ctx   the context object for this handler
  @param cause the cause
  @throws Exception