@Override
    public void runBufferedBodyContentThroughFilter(ZuulFilter<?, ?> filter) {
        // Loop optimized for the common case: Most filters' processContentChunk() return
        // original chunk passed in as is without any processing
        String filterName = filter.filterName();
        for (int i = 0; i < bodyChunks.size(); i++) {
            HttpContent origChunk = bodyChunks.get(i);
            ByteBufUtil.touch(origChunk, "ZuulMessage processing chunk, filter: ", filterName);
            HttpContent filteredChunk = filter.processContentChunk(this, origChunk);
            ByteBufUtil.touch(filteredChunk, "ZuulMessage processing filteredChunk, filter: ", filterName);
            if ((filteredChunk != null) && (filteredChunk != origChunk)) {
                // filter actually did some processing, set the new chunk in and release the old chunk.
                bodyChunks.set(i, filteredChunk);
                int refCnt = origChunk.refCnt();
                if (refCnt > 0) {
                    origChunk.release(refCnt);
                }
            }
        }
    }
User: michaels@netflix.com
Date: 2/20/15
Time: 3:10 PM
zuul-core/src/main/java/com/netflix/zuul/message/ZuulMessageImpl.java