private final void runFilters(T mesg, AtomicInteger runningFilterIdx) {
        T inMesg = mesg;
        String filterName = "-";
        try {
            Preconditions.checkNotNull(mesg, "Input message");
            int i = runningFilterIdx.get();

            while (i < filters.length) {
                ZuulFilter<T, T> filter = filters[i];
                filterName = filter.filterName();
                T outMesg = filter(filter, inMesg);
                if (outMesg == null) {
                    return; // either async filter or waiting for the message body to be buffered
                }
                inMesg = outMesg;
                i = runningFilterIdx.incrementAndGet();
            }

            // Filter chain has reached its end, pass result to the next stage
            invokeNextStage(inMesg);
        } catch (Exception ex) {
            handleException(inMesg, filterName, ex);
        }
    }
This class is supposed to be thread safe and hence should not have any non final member variables
Created by saroskar on 5/17/17.
zuul-core/src/main/java/com/netflix/zuul/netty/filter/ZuulFilterChainRunner.java