public void triggerAfterCompletion(NativeWebRequest request, DeferredResult<?> deferredResult) { for (int i = this.preProcessingIndex; i >= 0; i--) { try { this.interceptors.get(i).afterCompletion(request, deferredResult); } catch (Throwable ex) { logger.trace("Ignoring failure in afterCompletion method", ex); } } }
public void applyBeforeConcurrentHandling(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { interceptor.beforeConcurrentHandling(request, deferredResult); } }
/** * Determine if further error handling should be bypassed. * @return {@code true} to continue error handling, or false to bypass any further * error handling */ public boolean triggerAfterError(NativeWebRequest request, DeferredResult<?> deferredResult, Throwable ex) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { if (deferredResult.isSetOrExpired()) { return false; } if (!interceptor.handleError(request, deferredResult, ex)){ return false; } } return true; }
@Test public void startDeferredResultProcessingTimeoutAndComplete() throws Exception { DeferredResult<Integer> deferredResult = new DeferredResult<>(); DeferredResultProcessingInterceptor interceptor = mock(DeferredResultProcessingInterceptor.class); given(interceptor.handleTimeout(this.asyncWebRequest, deferredResult)).willReturn(true); this.asyncManager.registerDeferredResultInterceptor("interceptor", interceptor); this.asyncManager.startDeferredResultProcessing(deferredResult); this.asyncWebRequest.onTimeout(ASYNC_EVENT); this.asyncWebRequest.onComplete(ASYNC_EVENT); assertTrue(this.asyncManager.hasConcurrentResult()); assertEquals(AsyncRequestTimeoutException.class, this.asyncManager.getConcurrentResult().getClass()); verify(interceptor).beforeConcurrentHandling(this.asyncWebRequest, deferredResult); verify(interceptor).preProcess(this.asyncWebRequest, deferredResult); verify(interceptor).afterCompletion(this.asyncWebRequest, deferredResult); }
@Test public void startDeferredResultProcessingErrorAndComplete() throws Exception { DeferredResult<Integer> deferredResult = new DeferredResult<>(); DeferredResultProcessingInterceptor interceptor = mock(DeferredResultProcessingInterceptor.class); Exception e = new Exception(); given(interceptor.handleError(this.asyncWebRequest, deferredResult, e)).willReturn(true); this.asyncManager.registerDeferredResultInterceptor("interceptor", interceptor); this.asyncManager.startDeferredResultProcessing(deferredResult); AsyncEvent event = new AsyncEvent(new MockAsyncContext(this.servletRequest, this.servletResponse), e); this.asyncWebRequest.onError(event); this.asyncWebRequest.onComplete(event); assertTrue(this.asyncManager.hasConcurrentResult()); assertEquals(e, this.asyncManager.getConcurrentResult()); verify(interceptor).beforeConcurrentHandling(this.asyncWebRequest, deferredResult); verify(interceptor).preProcess(this.asyncWebRequest, deferredResult); verify(interceptor).afterCompletion(this.asyncWebRequest, deferredResult); }
@Test public void startDeferredResultProcessingPostProcessException() throws Exception { DeferredResult<Integer> deferredResult = new DeferredResult<>(); Exception exception = new Exception(); DeferredResultProcessingInterceptor interceptor = mock(DeferredResultProcessingInterceptor.class); willThrow(exception).given(interceptor).postProcess(this.asyncWebRequest, deferredResult, 25); setupDefaultAsyncScenario(); this.asyncManager.registerDeferredResultInterceptor("interceptor", interceptor); this.asyncManager.startDeferredResultProcessing(deferredResult); deferredResult.setResult(25); assertEquals(exception, this.asyncManager.getConcurrentResult()); verifyDefaultAsyncScenario(); verify(interceptor).beforeConcurrentHandling(this.asyncWebRequest, deferredResult); verify(interceptor).preProcess(this.asyncWebRequest, deferredResult); }
@Test public void startDeferredResultProcessingPreProcessException() throws Exception { DeferredResult<Integer> deferredResult = new DeferredResult<>(); Exception exception = new Exception(); DeferredResultProcessingInterceptor interceptor = mock(DeferredResultProcessingInterceptor.class); willThrow(exception).given(interceptor).preProcess(this.asyncWebRequest, deferredResult); setupDefaultAsyncScenario(); this.asyncManager.registerDeferredResultInterceptor("interceptor", interceptor); this.asyncManager.startDeferredResultProcessing(deferredResult); deferredResult.setResult(25); assertEquals(exception, this.asyncManager.getConcurrentResult()); verifyDefaultAsyncScenario(); verify(interceptor).beforeConcurrentHandling(this.asyncWebRequest, deferredResult); }
public void triggerAfterTimeout(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { if (deferredResult.isSetOrExpired()) { return; } if (!interceptor.handleTimeout(request, deferredResult)){ break; } } }
public void applyPreProcess(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { interceptor.preProcess(request, deferredResult); this.preProcessingIndex++; } }
public Object applyPostProcess(NativeWebRequest request, DeferredResult<?> deferredResult, Object concurrentResult) { try { for (int i = this.preProcessingIndex; i >= 0; i--) { this.interceptors.get(i).postProcess(request, deferredResult, concurrentResult); } } catch (Throwable ex) { return ex; } return concurrentResult; }
@Test public void startDeferredResultProcessing() throws Exception { DeferredResult<String> deferredResult = new DeferredResult<>(1000L); String concurrentResult = "abc"; DeferredResultProcessingInterceptor interceptor = mock(DeferredResultProcessingInterceptor.class); setupDefaultAsyncScenario(); this.asyncManager.registerDeferredResultInterceptor("interceptor", interceptor); this.asyncManager.startDeferredResultProcessing(deferredResult); deferredResult.setResult(concurrentResult); assertEquals(concurrentResult, this.asyncManager.getConcurrentResult()); verifyDefaultAsyncScenario(); verify(interceptor).beforeConcurrentHandling(this.asyncWebRequest, deferredResult); verify(interceptor).preProcess(this.asyncWebRequest, deferredResult); verify(interceptor).postProcess(asyncWebRequest, deferredResult, concurrentResult); verify(this.asyncWebRequest).setTimeout(1000L); }
public void triggerAfterTimeout(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { if (deferredResult.isSetOrExpired()) { return; } if (!interceptor.handleTimeout(request, deferredResult)){ break; } } }
public void applyPreProcess(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { interceptor.preProcess(request, deferredResult); this.preProcessingIndex++; } }
public Object applyPostProcess(NativeWebRequest request, DeferredResult<?> deferredResult, Object concurrentResult) { try { for (int i = this.preProcessingIndex; i >= 0; i--) { this.interceptors.get(i).postProcess(request, deferredResult, concurrentResult); } } catch (Throwable ex) { return ex; } return concurrentResult; }
public void applyBeforeConcurrentHandling(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { interceptor.beforeConcurrentHandling(request, deferredResult); } }
public void triggerAfterCompletion(NativeWebRequest request, DeferredResult<?> deferredResult) { for (int i = this.preProcessingIndex; i >= 0; i--) { try { this.interceptors.get(i).afterCompletion(request, deferredResult); } catch (Throwable ex) { logger.trace("Ignoring failure in afterCompletion method", ex); } } }
@Test public void onTimeout() throws Exception { final StringBuilder sb = new StringBuilder(); DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(null, "timeout result"); result.setResultHandler(handler); result.onTimeout(new Runnable() { @Override public void run() { sb.append("timeout event"); } }); result.getInterceptor().handleTimeout(null, null); assertEquals("timeout event", sb.toString()); assertFalse("Should not be able to set result a second time", result.setResult("hello")); verify(handler).handleResult("timeout result"); }
/** * Determine if further error handling should be bypassed. * @return {@code true} to continue error handling, or false to bypass any further * error handling */ public boolean triggerAfterError(NativeWebRequest request, DeferredResult<?> deferredResult, Throwable ex) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { if (deferredResult.isSetOrExpired()) { return false; } if (!interceptor.handleError(request, deferredResult, ex)){ return false; } } return true; }
public void applyPreProcess(NativeWebRequest request, DeferredResult<?> deferredResult) throws Exception { for (DeferredResultProcessingInterceptor interceptor : this.interceptors) { interceptor.preProcess(request, deferredResult); this.preProcessingIndex++; } }
public Object applyPostProcess(NativeWebRequest request, DeferredResult<?> deferredResult, Object concurrentResult) { try { for (int i = this.preProcessingIndex; i >= 0; i--) { this.interceptors.get(i).postProcess(request, deferredResult, concurrentResult); } } catch (Throwable ex) { return ex; } return concurrentResult; }