/** * calls the next filter in the chain, or else * the users exchange handler, if this is the * final filter in the chain. The Filter may decide * to terminate the chain, by not calling this method. * In this case, the filter <b>must</b> send the * response to the request, because the application's * exchange handler will not be invoked. * @param exchange the HttpExchange * @throws IOException let exceptions pass up the stack * @throws NullPointerException if exchange is <code>null</code> */ public void doFilter (HttpExchange exchange) throws IOException { if (!iter.hasNext()) { handler.handle (exchange); } else { Filter f = iter.next(); f.doFilter (exchange, this); } } }