/** * Invoke on the next interceptor in the chain. If this is already * the end of the chain, reflection will call the constructor, field, or * method you are invoking on. */ public Object invokeNext() throws Throwable { if (interceptors != null && currentInterceptor < interceptors.length) { try { return interceptors[currentInterceptor++].invoke(this); } finally { // so that interceptors like clustering can reinvoke down the chain currentInterceptor--; } } return invokeTarget(); }