@Override protected HttpHandler createHttpHandler() { this.restTemplate = initRestTemplate(); this.applicationContext = initApplicationContext(); return WebHttpHandlerBuilder.applicationContext(this.applicationContext).build(); }
@Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { WebHandler webHandler = RouterFunctions.toWebHandler(this.routerFunction, this.handlerStrategies); return WebHttpHandlerBuilder.webHandler(webHandler) .filters(filters -> filters.addAll(this.handlerStrategies.webFilters())) .exceptionHandlers(handlers -> handlers.addAll(this.handlerStrategies.exceptionHandlers())) .localeContextResolver(this.handlerStrategies.localeContextResolver()); }
@Override public WebTestClient.Builder configureClient() { WebHttpHandlerBuilder builder = initHttpHandlerBuilder(); if (!CollectionUtils.isEmpty(this.filters)) { builder.filters(theFilters -> theFilters.addAll(0, this.filters)); } if (!builder.hasSessionManager() && this.sessionManager != null) { builder.sessionManager(this.sessionManager); } if (!CollectionUtils.isEmpty(this.configurers)) { this.configurers.forEach(configurer -> configurer.beforeServerCreated(builder)); } return new DefaultWebTestClientBuilder(builder); }
WebHttpHandlerBuilder builder = new WebHttpHandlerBuilder( context.getBean(WEB_HANDLER_BEAN_NAME, WebHandler.class), context); .orderedStream() .collect(Collectors.toList()); builder.filters(filters -> filters.addAll(webFilters)); List<WebExceptionHandler> exceptionHandlers = context .getBeanProvider(WebExceptionHandler.class) .orderedStream() .collect(Collectors.toList()); builder.exceptionHandlers(handlers -> handlers.addAll(exceptionHandlers)); builder.sessionManager( context.getBean(WEB_SESSION_MANAGER_BEAN_NAME, WebSessionManager.class)); builder.codecConfigurer( context.getBean(SERVER_CODEC_CONFIGURER_BEAN_NAME, ServerCodecConfigurer.class)); builder.localeContextResolver( context.getBean(LOCALE_CONTEXT_RESOLVER_BEAN_NAME, LocaleContextResolver.class)); builder.localeContextResolver( context.getBean(LOCALE_CONTEXT_RESOLVER_BEAN_NAME, LocaleContextResolver.class)); builder.forwardedHeaderTransformer( context.getBean(FORWARDED_HEADER_TRANSFORMER_BEAN_NAME, ForwardedHeaderTransformer.class));
@Override protected HttpHandler createHttpHandler() { this.wac = new AnnotationConfigApplicationContext(); this.wac.register(TestConfiguration.class); this.wac.refresh(); return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(this.wac)).build(); }
@Test // SPR-16972 public void cloneWithApplicationContext() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.register(NoFilterConfig.class); context.refresh(); WebHttpHandlerBuilder builder = WebHttpHandlerBuilder.applicationContext(context); assertSame(context, ((HttpWebHandlerAdapter) builder.build()).getApplicationContext()); assertSame(context, ((HttpWebHandlerAdapter) builder.clone().build()).getApplicationContext()); }
@Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { return WebHttpHandlerBuilder.applicationContext(this.applicationContext); }
@Override protected HttpHandler createHttpHandler() { this.sessionManager = new DefaultWebSessionManager(); this.handler = new TestWebHandler(); return WebHttpHandlerBuilder.webHandler(this.handler).sessionManager(this.sessionManager).build(); }
@Override public WebTestClient build() { ClientHttpConnector connectorToUse = this.connector; if (connectorToUse == null) { Assert.state(this.httpHandlerBuilder != null, "No WebHttpHandlerBuilder available"); connectorToUse = new HttpHandlerConnector(this.httpHandlerBuilder.build()); } return new DefaultWebTestClient(this.webClientBuilder, connectorToUse, this.responseTimeout, new DefaultWebTestClientBuilder(this)); }
@Override protected HttpHandler createHttpHandler() { AnnotationConfigApplicationContext wac = new AnnotationConfigApplicationContext(); wac.register(WebConfig.class); wac.refresh(); return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(wac)) .exceptionHandler(new ResponseStatusExceptionHandler()) .build(); }
@Test public void forwardedHeaderFilter() { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.register(ForwardedHeaderFilterConfig.class); context.refresh(); WebHttpHandlerBuilder builder = WebHttpHandlerBuilder.applicationContext(context); builder.filters(filters -> assertEquals(Collections.emptyList(), filters)); assertTrue(builder.hasForwardedHeaderTransformer()); }
@Test public void handleErrorFromFilter() throws Exception { MockServerHttpRequest request = MockServerHttpRequest.get("/").build(); MockServerHttpResponse response = new MockServerHttpResponse(); TestExceptionHandler exceptionHandler = new TestExceptionHandler(); WebHttpHandlerBuilder.webHandler(new StubWebHandler()) .filter(new ExceptionFilter()) .exceptionHandler(exceptionHandler).build() .handle(request, response) .block(); assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); assertNotNull(exceptionHandler.ex); assertEquals("boo", exceptionHandler.ex.getMessage()); }
@Override public void beforeServerCreated(WebHttpHandlerBuilder builder) { builder.filters(filters -> filters.add(0, this.filter)); }
WebHttpHandlerBuilder builder = new WebHttpHandlerBuilder( context.getBean(WEB_HANDLER_BEAN_NAME, WebHandler.class), context); builder.filters(filters -> filters.addAll(container.getFilters())); builder.exceptionHandlers(handlers -> handlers.addAll(container.getExceptionHandlers())); builder.sessionManager( context.getBean(WEB_SESSION_MANAGER_BEAN_NAME, WebSessionManager.class)); builder.codecConfigurer( context.getBean(SERVER_CODEC_CONFIGURER_BEAN_NAME, ServerCodecConfigurer.class));
@Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { return WebHttpHandlerBuilder.webHandler(this.webHandler); }
@Override protected HttpHandler createHttpHandler() { AnnotationConfigApplicationContext wac = new AnnotationConfigApplicationContext(); wac.register(TestConfiguration.class); wac.refresh(); return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(wac)).build(); }
@Override protected WebHttpHandlerBuilder initHttpHandlerBuilder() { return WebHttpHandlerBuilder.applicationContext(initApplicationContext()); }
@Override public WebTestClient build() { ClientHttpConnector connectorToUse = this.connector; if (connectorToUse == null) { Assert.state(this.httpHandlerBuilder != null, "No WebHttpHandlerBuilder available"); connectorToUse = new HttpHandlerConnector(this.httpHandlerBuilder.build()); } return new DefaultWebTestClient(this.webClientBuilder, connectorToUse, this.responseTimeout, new DefaultWebTestClientBuilder(this)); }
WebHttpHandlerBuilder builder = new WebHttpHandlerBuilder( context.getBean(WEB_HANDLER_BEAN_NAME, WebHandler.class), context); .orderedStream() .collect(Collectors.toList()); builder.filters(filters -> filters.addAll(webFilters)); List<WebExceptionHandler> exceptionHandlers = context .getBeanProvider(WebExceptionHandler.class) .orderedStream() .collect(Collectors.toList()); builder.exceptionHandlers(handlers -> handlers.addAll(exceptionHandlers)); builder.sessionManager( context.getBean(WEB_SESSION_MANAGER_BEAN_NAME, WebSessionManager.class)); builder.codecConfigurer( context.getBean(SERVER_CODEC_CONFIGURER_BEAN_NAME, ServerCodecConfigurer.class)); builder.localeContextResolver( context.getBean(LOCALE_CONTEXT_RESOLVER_BEAN_NAME, LocaleContextResolver.class)); builder.localeContextResolver( context.getBean(LOCALE_CONTEXT_RESOLVER_BEAN_NAME, LocaleContextResolver.class)); builder.forwardedHeaderTransformer( context.getBean(FORWARDED_HEADER_TRANSFORMER_BEAN_NAME, ForwardedHeaderTransformer.class));
@Override public void afterConfigurerAdded(WebTestClient.Builder builder, @Nullable WebHttpHandlerBuilder httpHandlerBuilder, @Nullable ClientHttpConnector connector) { Assert.notNull(httpHandlerBuilder, "Not a mock server"); httpHandlerBuilder.filters(filters -> { filters.removeIf(filter -> filter instanceof IdentityFilter); filters.add(0, this.filter); }); } }