/** * 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; }
/** * 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 onError() throws Exception { final StringBuilder sb = new StringBuilder(); DeferredResultHandler handler = mock(DeferredResultHandler.class); DeferredResult<String> result = new DeferredResult<>(null, "error result"); result.setResultHandler(handler); Exception e = new Exception(); result.onError(new Consumer<Throwable>() { @Override public void accept(Throwable t) { sb.append("error event"); } }); result.getInterceptor().handleError(null, null, e); assertEquals("error event", sb.toString()); assertFalse("Should not be able to set result a second time", result.setResult("hello")); verify(handler).handleResult(e); }
@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); }
/** * @return 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; }
/** * 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; }