This commit is contained in:
Andy Wilkinson 2018-01-17 19:01:19 +00:00
parent 3904f49c9f
commit 54c0cf513b
93 changed files with 455 additions and 435 deletions

View File

@ -36,4 +36,3 @@ class CloudFoundryEndpointFilter implements EndpointFilter<WebOperation> {
}
}

View File

@ -27,8 +27,8 @@ import org.springframework.boot.actuate.health.HealthEndpoint;
import org.springframework.boot.actuate.health.ReactiveHealthEndpointWebExtension;
/**
* Reactive {@link EndpointExtension} for the {@link HealthEndpoint} that always
* exposes full health details.
* Reactive {@link EndpointExtension} for the {@link HealthEndpoint} that always exposes
* full health details.
*
* @author Madhura Bhave
* @since 2.0.0

View File

@ -75,8 +75,7 @@ public class ReactiveCloudFoundryActuatorAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnEnabledEndpoint
@ConditionalOnBean({ HealthEndpoint.class,
ReactiveHealthEndpointWebExtension.class })
@ConditionalOnBean({ HealthEndpoint.class, ReactiveHealthEndpointWebExtension.class })
public CloudFoundryReactiveHealthEndpointWebExtension cloudFoundryReactiveHealthEndpointWebExtension(
ReactiveHealthEndpointWebExtension reactiveHealthEndpointWebExtension) {
return new CloudFoundryReactiveHealthEndpointWebExtension(

View File

@ -60,7 +60,8 @@ import org.springframework.web.servlet.DispatcherServlet;
*/
@Configuration
@ConditionalOnProperty(prefix = "management.cloudfoundry", name = "enabled", matchIfMissing = true)
@AutoConfigureAfter({ ServletManagementContextAutoConfiguration.class, HealthEndpointAutoConfiguration.class })
@AutoConfigureAfter({ ServletManagementContextAutoConfiguration.class,
HealthEndpointAutoConfiguration.class })
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass(DispatcherServlet.class)
@ConditionalOnBean(DispatcherServlet.class)

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -56,7 +56,8 @@ public class WebFluxEndpointManagementContextConfiguration {
WebEndpointProperties webEndpointProperties) {
return new WebFluxEndpointHandlerMapping(
new EndpointMapping(webEndpointProperties.getBasePath()),
endpointDiscoverer.discoverEndpoints(), endpointMediaTypes, corsProperties.toCorsConfiguration());
endpointDiscoverer.discoverEndpoints(), endpointMediaTypes,
corsProperties.toCorsConfiguration());
}
}

View File

@ -34,8 +34,8 @@ public class DatadogProperties extends StepRegistryProperties {
private String apiKey;
/**
* Datadog application key. Not strictly required, but improves the Datadog
* experience by sending meter descriptions, types, and base units to Datadog.
* Datadog application key. Not strictly required, but improves the Datadog experience
* by sending meter descriptions, types, and base units to Datadog.
*/
private String applicationKey;
@ -46,8 +46,8 @@ public class DatadogProperties extends StepRegistryProperties {
private Boolean descriptions;
/**
* Tag that will be mapped to "host" when shipping metrics to Datadog. Can be
* omitted if host should be omitted on publishing.
* Tag that will be mapped to "host" when shipping metrics to Datadog. Can be omitted
* if host should be omitted on publishing.
*/
private String hostTag;

View File

@ -26,9 +26,8 @@ import org.springframework.boot.actuate.autoconfigure.metrics.export.StepRegistr
* @author Jon Schneider
* @author Phillip Webb
*/
class DatadogPropertiesConfigAdapter
extends StepRegistryPropertiesConfigAdapter<DatadogProperties>
implements DatadogConfig {
class DatadogPropertiesConfigAdapter extends
StepRegistryPropertiesConfigAdapter<DatadogProperties> implements DatadogConfig {
DatadogPropertiesConfigAdapter(DatadogProperties properties) {
super(properties);
@ -41,7 +40,8 @@ class DatadogPropertiesConfigAdapter
@Override
public String applicationKey() {
return get(DatadogProperties::getApplicationKey, DatadogConfig.super::applicationKey);
return get(DatadogProperties::getApplicationKey,
DatadogConfig.super::applicationKey);
}
@Override

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,8 +31,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
public class InfluxProperties extends StepRegistryProperties {
/**
* Tag that will be mapped to "host" when shipping metrics to Influx. Can be
* omitted if host should be omitted on publishing.
* Tag that will be mapped to "host" when shipping metrics to Influx. Can be omitted
* if host should be omitted on publishing.
*/
private String db;

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -27,9 +27,8 @@ import org.springframework.boot.actuate.autoconfigure.metrics.export.StepRegistr
* @author Jon Schneider
* @author Phillip Webb
*/
class InfluxPropertiesConfigAdapter
extends StepRegistryPropertiesConfigAdapter<InfluxProperties>
implements InfluxConfig {
class InfluxPropertiesConfigAdapter extends
StepRegistryPropertiesConfigAdapter<InfluxProperties> implements InfluxConfig {
InfluxPropertiesConfigAdapter(InfluxProperties properties) {
super(properties);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -58,8 +58,8 @@ public class StatsdProperties {
private Integer maxPacketLength = 1400;
/**
* How often gauges will be polled. When a gauge is polled, its value is
* recalculated and if the value has changed, it is sent to the StatsD server.
* How often gauges will be polled. When a gauge is polled, its value is recalculated
* and if the value has changed, it is sent to the StatsD server.
*/
private Duration pollingFrequency = Duration.ofSeconds(10);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -39,8 +39,8 @@ import org.springframework.util.Assert;
import org.springframework.web.server.ServerWebExchange;
/**
* Factory that can be used to create a {@link ServerWebExchangeMatcher} for actuator endpoint
* locations.
* Factory that can be used to create a {@link ServerWebExchangeMatcher} for actuator
* endpoint locations.
*
* @author Madhura Bhave
* @since 2.0.0
@ -52,8 +52,9 @@ public final class EndpointRequest {
/**
* Returns a matcher that includes all {@link Endpoint actuator endpoints}. The
* {@link EndpointServerWebExchangeMatcher#excluding(Class...) excluding} method can be used to
* further remove specific endpoints if required. For example: <pre class="code">
* {@link EndpointServerWebExchangeMatcher#excluding(Class...) excluding} method can
* be used to further remove specific endpoints if required. For example:
* <pre class="code">
* EndpointServerWebExchangeMatcher.toAnyEndpoint().excluding(ShutdownEndpoint.class)
* </pre>
* @return the configured {@link ServerWebExchangeMatcher}
@ -87,7 +88,8 @@ public final class EndpointRequest {
}
/**
* The {@link ServerWebExchangeMatcher} used to match against {@link Endpoint actuator endpoints}.
* The {@link ServerWebExchangeMatcher} used to match against {@link Endpoint actuator
* endpoints}.
*/
public final static class EndpointServerWebExchangeMatcher
extends ApplicationContextServerWebExchangeMatcher<EndpointPathProvider> {
@ -116,7 +118,8 @@ public final class EndpointRequest {
this.excludes = Collections.emptyList();
}
private EndpointServerWebExchangeMatcher(List<Object> includes, List<Object> excludes) {
private EndpointServerWebExchangeMatcher(List<Object> includes,
List<Object> excludes) {
super(EndpointPathProvider.class);
this.includes = includes;
this.excludes = excludes;
@ -167,7 +170,8 @@ public final class EndpointRequest {
}
private List<ServerWebExchangeMatcher> getDelegateMatchers(Set<String> paths) {
return paths.stream().map((path) -> new PathPatternParserServerWebExchangeMatcher(path + "/**"))
return paths.stream().map(
(path) -> new PathPatternParserServerWebExchangeMatcher(path + "/**"))
.collect(Collectors.toList());
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -74,7 +74,7 @@ public class ExposeExcludePropertyEndpointFilterTests {
public void createWhenPrefixIsNullShouldThrowException() {
this.thrown.expect(IllegalArgumentException.class);
this.thrown.expectMessage("Prefix must not be empty");
new ExposeExcludePropertyEndpointFilter<Operation>(TestEndpointDiscoverer.class,
new ExposeExcludePropertyEndpointFilter<>(TestEndpointDiscoverer.class,
this.environment, null);
}
@ -82,7 +82,7 @@ public class ExposeExcludePropertyEndpointFilterTests {
public void createWhenPrefixIsEmptyShouldThrowException() {
this.thrown.expect(IllegalArgumentException.class);
this.thrown.expectMessage("Prefix must not be empty");
new ExposeExcludePropertyEndpointFilter<Operation>(TestEndpointDiscoverer.class,
new ExposeExcludePropertyEndpointFilter<>(TestEndpointDiscoverer.class,
this.environment, "");
}

View File

@ -113,7 +113,7 @@ public class AbstractEndpointDocumentationTests {
@SuppressWarnings("unchecked")
private <T> Map<String, Object> select(Map<String, Object> candidates,
Predicate<T> filter) {
Map<String, Object> selected = new HashMap<String, Object>();
Map<String, Object> selected = new HashMap<>();
candidates.entrySet().stream().filter((candidate) -> filter.test((T) candidate))
.limit(3)
.forEach((entry) -> selected.put(entry.getKey(), entry.getValue()));

View File

@ -56,11 +56,9 @@ public class LiquibaseEndpointDocumentationTests
responseFields(
fieldWithPath("contexts")
.description("Application contexts keyed by id"),
changeSetsField)
.andWithPrefix(
"contexts.*.liquibaseBeans.*.changeSets[].",
getChangeSetFieldDescriptors())
.and(parentIdField())));
changeSetsField).andWithPrefix(
"contexts.*.liquibaseBeans.*.changeSets[].",
getChangeSetFieldDescriptors()).and(parentIdField())));
}
private List<FieldDescriptor> getChangeSetFieldDescriptors() {

View File

@ -48,8 +48,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
*
* @author Andy Wilkinson
*/
public class LoggersEndpointDocumentationTests
extends MockMvcEndpointDocumentationTests {
public class LoggersEndpointDocumentationTests extends MockMvcEndpointDocumentationTests {
private static final List<FieldDescriptor> levelFields = Arrays.asList(
fieldWithPath("configuredLevel")

View File

@ -39,8 +39,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
*
* @author Andy Wilkinson
*/
public class MetricsEndpointDocumentationTests
extends MockMvcEndpointDocumentationTests {
public class MetricsEndpointDocumentationTests extends MockMvcEndpointDocumentationTests {
@Test
public void metricNames() throws Exception {

View File

@ -48,9 +48,9 @@ public class WebFluxEndpointCorsIntegrationTests {
public void createContext() {
this.context = new AnnotationConfigReactiveWebApplicationContext();
this.context.register(JacksonAutoConfiguration.class,
CodecsAutoConfiguration.class,
WebFluxAutoConfiguration.class, HttpHandlerAutoConfiguration.class,
EndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class,
CodecsAutoConfiguration.class, WebFluxAutoConfiguration.class,
HttpHandlerAutoConfiguration.class, EndpointAutoConfiguration.class,
WebEndpointAutoConfiguration.class,
ManagementContextAutoConfiguration.class,
ReactiveManagementContextAutoConfiguration.class,
BeansEndpointAutoConfiguration.class);
@ -59,13 +59,11 @@ public class WebFluxEndpointCorsIntegrationTests {
@Test
public void corsIsDisabledByDefault() {
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET")
.exchange()
.expectStatus().isForbidden()
.expectHeader().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN);
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET").exchange()
.expectStatus().isForbidden().expectHeader()
.doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN);
}
@Test
@ -73,11 +71,9 @@ public class WebFluxEndpointCorsIntegrationTests {
TestPropertyValues
.of("management.endpoints.web.cors.allowed-origins:spring.example.org")
.applyTo(this.context);
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "test.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET")
.exchange()
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET").exchange()
.expectStatus().isForbidden();
performAcceptedCorsRequest("/actuator/beans");
}
@ -87,8 +83,8 @@ public class WebFluxEndpointCorsIntegrationTests {
TestPropertyValues
.of("management.endpoints.web.cors.allowed-origins:spring.example.org")
.applyTo(this.context);
performAcceptedCorsRequest("/actuator/beans")
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800");
performAcceptedCorsRequest("/actuator/beans").expectHeader()
.valueEquals(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800");
}
@Test
@ -97,8 +93,8 @@ public class WebFluxEndpointCorsIntegrationTests {
.of("management.endpoints.web.cors.allowed-origins:spring.example.org",
"management.endpoints.web.cors.max-age: 2400")
.applyTo(this.context);
performAcceptedCorsRequest("/actuator/beans")
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "2400");
performAcceptedCorsRequest("/actuator/beans").expectHeader()
.valueEquals(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "2400");
}
@Test
@ -106,12 +102,10 @@ public class WebFluxEndpointCorsIntegrationTests {
TestPropertyValues
.of("management.endpoints.web.cors.allowed-origins:spring.example.org")
.applyTo(this.context);
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS, "Alpha")
.exchange()
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS, "Alpha").exchange()
.expectStatus().isForbidden();
}
@ -121,14 +115,12 @@ public class WebFluxEndpointCorsIntegrationTests {
.of("management.endpoints.web.cors.allowed-origins:spring.example.org",
"management.endpoints.web.cors.allowed-headers:Alpha,Bravo")
.applyTo(this.context);
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS, "Alpha")
.exchange()
.expectStatus().isOk()
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Alpha");
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS, "Alpha").exchange()
.expectStatus().isOk().expectHeader()
.valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Alpha");
}
@Test
@ -136,11 +128,9 @@ public class WebFluxEndpointCorsIntegrationTests {
TestPropertyValues
.of("management.endpoints.web.cors.allowed-origins:spring.example.org")
.applyTo(this.context);
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "PATCH")
.exchange()
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "PATCH").exchange()
.expectStatus().isForbidden();
}
@ -150,13 +140,11 @@ public class WebFluxEndpointCorsIntegrationTests {
.of("management.endpoints.web.cors.allowed-origins:spring.example.org",
"management.endpoints.web.cors.allowed-methods:GET,HEAD")
.applyTo(this.context);
createWebTestClient()
.options().uri("/actuator/beans")
createWebTestClient().options().uri("/actuator/beans")
.header("Origin", "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "HEAD")
.exchange()
.expectStatus().isOk()
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,HEAD");
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "HEAD").exchange()
.expectStatus().isOk().expectHeader()
.valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,HEAD");
}
@Test
@ -165,8 +153,8 @@ public class WebFluxEndpointCorsIntegrationTests {
.of("management.endpoints.web.cors.allowed-origins:spring.example.org",
"management.endpoints.web.cors.allow-credentials:true")
.applyTo(this.context);
performAcceptedCorsRequest("/actuator/beans")
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
performAcceptedCorsRequest("/actuator/beans").expectHeader()
.valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
}
@Test
@ -175,24 +163,22 @@ public class WebFluxEndpointCorsIntegrationTests {
.of("management.endpoints.web.cors.allowed-origins:spring.example.org",
"management.endpoints.web.cors.allow-credentials:false")
.applyTo(this.context);
performAcceptedCorsRequest("/actuator/beans")
.expectHeader().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS);
performAcceptedCorsRequest("/actuator/beans").expectHeader()
.doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS);
}
private WebTestClient createWebTestClient() {
this.context.refresh();
return WebTestClient.bindToApplicationContext(this.context)
.configureClient().baseUrl("https://spring.example.org").build();
return WebTestClient.bindToApplicationContext(this.context).configureClient()
.baseUrl("https://spring.example.org").build();
}
private WebTestClient.ResponseSpec performAcceptedCorsRequest(String url) {
return createWebTestClient()
.options().uri(url)
return createWebTestClient().options().uri(url)
.header(HttpHeaders.ORIGIN, "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET")
.exchange()
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "spring.example.org")
.header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET").exchange()
.expectHeader().valueEquals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN,
"spring.example.org")
.expectStatus().isOk();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -45,8 +45,7 @@ public class LogFileWebEndpointAutoConfigurationTests {
public TemporaryFolder temp = new TemporaryFolder();
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withUserConfiguration(
LogFileWebEndpointAutoConfiguration.class);
.withUserConfiguration(LogFileWebEndpointAutoConfiguration.class);
@Test
public void logFileWebEndpointIsAutoConfiguredWhenLoggingFileIsSet() {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -32,8 +32,7 @@ public class HeapDumpWebEndpointAutoConfigurationTests {
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withPropertyValues("management.endpoints.web.expose:*")
.withUserConfiguration(
HeapDumpWebEndpointAutoConfiguration.class);
.withUserConfiguration(HeapDumpWebEndpointAutoConfiguration.class);
@Test
public void runShouldCreateIndicator() {

View File

@ -39,15 +39,14 @@ public class CacheMetricsConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withUserConfiguration(RegistryConfiguration.class)
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class, CacheAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
CacheAutoConfiguration.class))
.withPropertyValues("management.metrics.use-global-registry=false");
@Test
public void autoConfiguredCacheManagerIsInstrumented() {
this.contextRunner
.withPropertyValues("spring.cache.type=caffeine",
"spring.cache.cache-names=cache1,cache2")
.run((context) -> {
this.contextRunner.withPropertyValues("spring.cache.type=caffeine",
"spring.cache.cache-names=cache1,cache2").run((context) -> {
MeterRegistry registry = context.getBean(MeterRegistry.class);
assertThat(registry.find("cache.requests").tags("name", "cache1")
.tags("cacheManager", "cacheManager").meter()).isPresent();
@ -73,10 +72,8 @@ public class CacheMetricsConfigurationTests {
@Test
public void autoConfiguredNonSupportedCacheManagerIsIgnored() {
this.contextRunner
.withPropertyValues("spring.cache.type=simple",
"spring.cache.cache-names=cache1,cache2")
.run((context) -> {
this.contextRunner.withPropertyValues("spring.cache.type=simple",
"spring.cache.cache-names=cache1,cache2").run((context) -> {
MeterRegistry registry = context.getBean(MeterRegistry.class);
assertThat(registry.find("cache.requests").tags("name", "cache1")
.tags("cacheManager", "cacheManager").meter()).isNotPresent();

View File

@ -45,11 +45,10 @@ public class RestTemplateMetricsConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withPropertyValues("management.metrics.use-global-registry=false")
.withConfiguration(AutoConfigurations.of(
RestTemplateAutoConfiguration.class, MetricsAutoConfiguration.class))
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
MetricsAutoConfiguration.class))
.withUserConfiguration(RegistryConfiguration.class);
@Test
public void restTemplateCreatedWithBuilderIsInstrumented() {
this.contextRunner.run((context) -> {
@ -64,8 +63,9 @@ public class RestTemplateMetricsConfigurationTests {
public void restTemplateCanBeCustomizedManually() {
this.contextRunner.run((context) -> {
assertThat(context).hasSingleBean(MetricsRestTemplateCustomizer.class);
RestTemplate restTemplate = new RestTemplateBuilder().customizers(
context.getBean(MetricsRestTemplateCustomizer.class)).build();
RestTemplate restTemplate = new RestTemplateBuilder()
.customizers(context.getBean(MetricsRestTemplateCustomizer.class))
.build();
MeterRegistry registry = context.getBean(MeterRegistry.class);
validateRestTemplate(restTemplate, registry);
});

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -91,7 +91,8 @@ public class EndpointRequestTests {
@Test
public void excludeByIdShouldNotMatchExcluded() {
ServerWebExchangeMatcher matcher = EndpointRequest.toAnyEndpoint().excluding("foo");
ServerWebExchangeMatcher matcher = EndpointRequest.toAnyEndpoint()
.excluding("foo");
assertMatcher(matcher).doesNotMatch("/actuator/foo");
assertMatcher(matcher).matches("/actuator/bar");
}
@ -113,13 +114,16 @@ public class EndpointRequestTests {
private final ServerWebExchangeMatcher matcher;
RequestMatcherAssert(StaticApplicationContext context, ServerWebExchangeMatcher matcher) {
RequestMatcherAssert(StaticApplicationContext context,
ServerWebExchangeMatcher matcher) {
this.context = context;
this.matcher = matcher;
}
void matches(String path) {
ServerWebExchange exchange = webHandler().createExchange(MockServerHttpRequest.get(path).build(), new MockServerHttpResponse());
ServerWebExchange exchange = webHandler().createExchange(
MockServerHttpRequest.get(path).build(),
new MockServerHttpResponse());
matches(exchange);
}
@ -129,7 +133,9 @@ public class EndpointRequestTests {
}
void doesNotMatch(String path) {
ServerWebExchange exchange = webHandler().createExchange(MockServerHttpRequest.get(path).build(), new MockServerHttpResponse());
ServerWebExchange exchange = webHandler().createExchange(
MockServerHttpRequest.get(path).build(),
new MockServerHttpResponse());
doesNotMatch(exchange);
}
@ -139,7 +145,8 @@ public class EndpointRequestTests {
}
private TestHttpWebHandlerAdapter webHandler() {
TestHttpWebHandlerAdapter adapter = new TestHttpWebHandlerAdapter(mock(WebHandler.class));
TestHttpWebHandlerAdapter adapter = new TestHttpWebHandlerAdapter(
mock(WebHandler.class));
adapter.setApplicationContext(this.context);
return adapter;
}
@ -157,7 +164,8 @@ public class EndpointRequestTests {
}
@Override
protected ServerWebExchange createExchange(ServerHttpRequest request, ServerHttpResponse response) {
protected ServerWebExchange createExchange(ServerHttpRequest request,
ServerHttpResponse response) {
return super.createExchange(request, response);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -76,8 +76,7 @@ public class EndpointMBean implements DynamicMBean {
@Override
public Object invoke(String actionName, Object[] params, String[] signature)
throws MBeanException, ReflectionException {
JmxOperation operation = this.endpointInfo.getOperations()
.get(actionName);
JmxOperation operation = this.endpointInfo.getOperations().get(actionName);
if (operation != null) {
Map<String, Object> arguments = getArguments(params,
operation.getParameters());

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -53,8 +53,7 @@ class EndpointMBeanInfoAssembler {
* @param endpointInfo the endpoint to handle
* @return the mbean info for the endpoint
*/
EndpointMBeanInfo createEndpointMBeanInfo(
EndpointInfo<JmxOperation> endpointInfo) {
EndpointMBeanInfo createEndpointMBeanInfo(EndpointInfo<JmxOperation> endpointInfo) {
Map<String, OperationInfos> operationsMapping = getOperationInfo(endpointInfo);
ModelMBeanOperationInfo[] operationsMBeanInfo = operationsMapping.values()
.stream().map((t) -> t.mBeanOperationInfo).collect(Collectors.toList())

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -38,8 +38,7 @@ public class EndpointLinksResolver {
* @return the links
*/
public Map<String, Link> resolveLinks(
Collection<EndpointInfo<WebOperation>> webEndpoints,
String requestUrl) {
Collection<EndpointInfo<WebOperation>> webEndpoints, String requestUrl) {
String normalizedUrl = normalizeRequestUrl(requestUrl);
Map<String, Link> links = new LinkedHashMap<>();
links.put("self", new Link(normalizedUrl));

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -117,8 +117,7 @@ public abstract class AbstractWebFluxEndpointHandlerMapping
registerMapping(mapping, this, getLinks());
}
protected RequestMappingInfo createRequestMappingInfo(
WebOperation operationInfo) {
protected RequestMappingInfo createRequestMappingInfo(WebOperation operationInfo) {
OperationRequestPredicate requestPredicate = operationInfo.getRequestPredicate();
PatternsRequestCondition patterns = new PatternsRequestCondition(pathPatternParser
.parse(this.endpointMapping.createSubPath(requestPredicate.getPath())));

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -132,8 +132,7 @@ public abstract class AbstractWebMvcEndpointHandlerMapping
protected abstract void registerMappingForOperation(WebOperation operation);
protected RequestMappingInfo createRequestMappingInfo(
WebOperation operationInfo) {
protected RequestMappingInfo createRequestMappingInfo(WebOperation operationInfo) {
OperationRequestPredicate requestPredicate = operationInfo.getRequestPredicate();
PatternsRequestCondition patterns = patternsRequestConditionForPattern(
requestPredicate.getPath());

View File

@ -91,8 +91,7 @@ public class MetricsEndpoint {
Map<Statistic, Double> samples = getSamples(meters);
Map<String, Set<String>> availableTags = getAvailableTags(meters);
tags.forEach((t) -> availableTags.remove(t.getKey()));
return new MetricResponse(requiredMetricName,
asList(samples, Sample::new),
return new MetricResponse(requiredMetricName, asList(samples, Sample::new),
asList(availableTags, AvailableTag::new));
}

View File

@ -247,14 +247,15 @@ public class WebMvcMetricsFilterTests {
@Bean
PrometheusMeterRegistry prometheus() {
PrometheusMeterRegistry r = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT, new CollectorRegistry(), Clock.SYSTEM);
PrometheusMeterRegistry r = new PrometheusMeterRegistry(
PrometheusConfig.DEFAULT, new CollectorRegistry(), Clock.SYSTEM);
r.config().meterFilter(new MeterFilter() {
@Override
public MeterFilterReply accept(Meter.Id id) {
for (Tag tag : id.getTags()) {
if (tag.getKey().equals("uri")
&& (tag.getValue().contains("histogram")
|| tag.getValue().contains("percentiles"))) {
|| tag.getValue().contains("percentiles"))) {
return MeterFilterReply.ACCEPT;
}
}

View File

@ -64,8 +64,8 @@ public class GsonProperties {
private LongSerializationPolicy longSerializationPolicy;
/**
* Naming policy that should be applied to an object's field during serialization
* and deserialization.
* Naming policy that should be applied to an object's field during serialization and
* deserialization.
*/
private FieldNamingPolicy fieldNamingPolicy;

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -75,7 +75,8 @@ class GsonHttpMessageConvertersConfiguration {
}
private static class JacksonAndJsonbUnavailableCondition extends NoneNestedConditions {
private static class JacksonAndJsonbUnavailableCondition
extends NoneNestedConditions {
JacksonAndJsonbUnavailableCondition() {
super(ConfigurationPhase.REGISTER_BEAN);

View File

@ -53,7 +53,8 @@ public class SessionProperties {
public SessionProperties(ObjectProvider<ServerProperties> serverProperties) {
ServerProperties properties = serverProperties.getIfUnique();
Session session = (properties == null ? null : properties.getServlet().getSession());
Session session = (properties == null ? null
: properties.getServlet().getSession());
this.timeout = (session == null ? null : session.getTimeout());
}
@ -68,7 +69,7 @@ public class SessionProperties {
/**
* Return the session timeout.
* @return the session timeout
* @see ServerProperties.Servlet#getSession()
* @see Session#getTimeout()
*/
public Duration getTimeout() {
return this.timeout;

View File

@ -35,8 +35,7 @@ import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
import org.springframework.core.env.Environment;
/**
* Customization for Jetty-specific features common
* for both Servlet and Reactive servers.
* Customization for Jetty-specific features common for both Servlet and Reactive servers.
*
* @author Brian Clozel
* @since 2.0.0
@ -58,16 +57,14 @@ public final class JettyCustomizer {
factory.setSelectors(jettyProperties.getSelectors());
}
if (serverProperties.getMaxHttpHeaderSize() > 0) {
customizeMaxHttpHeaderSize(factory,
serverProperties.getMaxHttpHeaderSize());
customizeMaxHttpHeaderSize(factory, serverProperties.getMaxHttpHeaderSize());
}
if (jettyProperties.getMaxHttpPostSize() > 0) {
customizeMaxHttpPostSize(factory, jettyProperties.getMaxHttpPostSize());
}
if (serverProperties.getConnectionTimeout() != null) {
customizeConnectionTimeout(factory,
serverProperties.getConnectionTimeout());
customizeConnectionTimeout(factory, serverProperties.getConnectionTimeout());
}
if (jettyProperties.getAccesslog().isEnabled()) {
customizeAccessLog(factory, jettyProperties.getAccesslog());
@ -86,8 +83,7 @@ public final class JettyCustomizer {
private static void customizeConnectionTimeout(
ConfigurableJettyWebServerFactory factory, Duration connectionTimeout) {
factory.addServerCustomizers((server) -> {
for (org.eclipse.jetty.server.Connector connector : server
.getConnectors()) {
for (org.eclipse.jetty.server.Connector connector : server.getConnectors()) {
if (connector instanceof AbstractConnector) {
((AbstractConnector) connector)
.setIdleTimeout(connectionTimeout.toMillis());
@ -123,8 +119,8 @@ public final class JettyCustomizer {
});
}
private static void customizeMaxHttpPostSize(ConfigurableJettyWebServerFactory factory,
int maxHttpPostSize) {
private static void customizeMaxHttpPostSize(
ConfigurableJettyWebServerFactory factory, int maxHttpPostSize) {
factory.addServerCustomizers(new JettyServerCustomizer() {
@Override
@ -136,8 +132,7 @@ public final class JettyCustomizer {
Handler... handlers) {
for (Handler handler : handlers) {
if (handler instanceof ContextHandler) {
((ContextHandler) handler)
.setMaxFormContentSize(maxHttpPostSize);
((ContextHandler) handler).setMaxFormContentSize(maxHttpPostSize);
}
else if (handler instanceof HandlerWrapper) {
setHandlerMaxHttpPostSize(maxHttpPostSize,

View File

@ -32,8 +32,8 @@ import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
/**
* Customization for Tomcat-specific features common
* for both Servlet and Reactive servers.
* Customization for Tomcat-specific features common for both Servlet and Reactive
* servers.
*
* @author Brian Clozel
* @since 2.0.0
@ -50,8 +50,8 @@ public final class TomcatCustomizer {
factory.setBaseDirectory(tomcatProperties.getBasedir());
}
if (tomcatProperties.getBackgroundProcessorDelay() != null) {
factory.setBackgroundProcessorDelay((int) tomcatProperties
.getBackgroundProcessorDelay().getSeconds());
factory.setBackgroundProcessorDelay(
(int) tomcatProperties.getBackgroundProcessorDelay().getSeconds());
}
customizeRemoteIpValve(serverProperties, environment, factory);
if (tomcatProperties.getMaxThreads() > 0) {
@ -76,8 +76,7 @@ public final class TomcatCustomizer {
factory.setUriEncoding(tomcatProperties.getUriEncoding());
}
if (serverProperties.getConnectionTimeout() != null) {
customizeConnectionTimeout(factory,
serverProperties.getConnectionTimeout());
customizeConnectionTimeout(factory, serverProperties.getConnectionTimeout());
}
if (tomcatProperties.getMaxConnections() > 0) {
customizeMaxConnections(factory, tomcatProperties.getMaxConnections());
@ -99,8 +98,8 @@ public final class TomcatCustomizer {
});
}
private static void customizeMaxConnections(ConfigurableTomcatWebServerFactory factory,
int maxConnections) {
private static void customizeMaxConnections(
ConfigurableTomcatWebServerFactory factory, int maxConnections) {
factory.addConnectorCustomizers((connector) -> {
ProtocolHandler handler = connector.getProtocolHandler();
if (handler instanceof AbstractProtocol) {
@ -129,8 +128,8 @@ public final class TomcatCustomizer {
if (StringUtils.hasText(protocolHeader) || StringUtils.hasText(remoteIpHeader)
|| getOrDeduceUseForwardHeaders(properties, environment)) {
RemoteIpValve valve = new RemoteIpValve();
valve.setProtocolHeader(StringUtils.hasLength(protocolHeader)
? protocolHeader : "X-Forwarded-Proto");
valve.setProtocolHeader(StringUtils.hasLength(protocolHeader) ? protocolHeader
: "X-Forwarded-Proto");
if (StringUtils.hasLength(remoteIpHeader)) {
valve.setRemoteIpHeader(remoteIpHeader);
}
@ -213,7 +212,8 @@ public final class TomcatCustomizer {
factory.addEngineValves(valve);
}
private static void customizeStaticResources(ServerProperties.Tomcat.Resource resource,
private static void customizeStaticResources(
ServerProperties.Tomcat.Resource resource,
ConfigurableTomcatWebServerFactory factory) {
if (resource.getCacheTtl() == null) {
return;

View File

@ -26,8 +26,8 @@ import org.springframework.boot.web.embedded.undertow.ConfigurableUndertowWebSer
import org.springframework.core.env.Environment;
/**
* Customization for Undertow-specific features common
* for both Servlet and Reactive servers.
* Customization for Undertow-specific features common for both Servlet and Reactive
* servers.
*
* @author Brian Clozel
*/
@ -62,18 +62,16 @@ public final class UndertowCustomizer {
factory.setAccessLogPrefix(accesslogProperties.getPrefix());
factory.setAccessLogSuffix(accesslogProperties.getSuffix());
factory.setAccessLogRotate(accesslogProperties.isRotate());
factory.setUseForwardHeaders(getOrDeduceUseForwardHeaders(serverProperties, environment));
factory.setUseForwardHeaders(
getOrDeduceUseForwardHeaders(serverProperties, environment));
if (serverProperties.getMaxHttpHeaderSize() > 0) {
customizeMaxHttpHeaderSize(factory,
serverProperties.getMaxHttpHeaderSize());
customizeMaxHttpHeaderSize(factory, serverProperties.getMaxHttpHeaderSize());
}
if (undertowProperties.getMaxHttpPostSize() > 0) {
customizeMaxHttpPostSize(factory,
undertowProperties.getMaxHttpPostSize());
customizeMaxHttpPostSize(factory, undertowProperties.getMaxHttpPostSize());
}
if (serverProperties.getConnectionTimeout() != null) {
customizeConnectionTimeout(factory,
serverProperties.getConnectionTimeout());
customizeConnectionTimeout(factory, serverProperties.getConnectionTimeout());
}
factory.addDeploymentInfoCustomizers((deploymentInfo) -> deploymentInfo
.setEagerFilterInit(undertowProperties.isEagerFilterInit()));
@ -82,8 +80,7 @@ public final class UndertowCustomizer {
private static void customizeConnectionTimeout(
ConfigurableUndertowWebServerFactory factory, Duration connectionTimeout) {
factory.addBuilderCustomizers((builder) -> builder.setSocketOption(
UndertowOptions.NO_REQUEST_TIMEOUT,
(int) connectionTimeout.toMillis()));
UndertowOptions.NO_REQUEST_TIMEOUT, (int) connectionTimeout.toMillis()));
}
private static void customizeMaxHttpHeaderSize(

View File

@ -35,8 +35,9 @@ import org.springframework.core.env.Environment;
* @author Brian Clozel
* @since 2.0.0
*/
public class DefaultReactiveWebServerFactoryCustomizer implements
WebServerFactoryCustomizer<ConfigurableReactiveWebServerFactory>, EnvironmentAware, Ordered {
public class DefaultReactiveWebServerFactoryCustomizer
implements WebServerFactoryCustomizer<ConfigurableReactiveWebServerFactory>,
EnvironmentAware, Ordered {
private final ServerProperties serverProperties;

View File

@ -192,7 +192,8 @@ public abstract class AbstractErrorWebExceptionHandler
.append("<p>This application has no configured error view, so you are seeing this as a fallback.</p>")
.append("<div id='created'>").append(timestamp.toString())
.append("</div>").append("<div>There was an unexpected error (type=")
.append(HtmlUtils.htmlEscape(error.get("error").toString())).append(", status=")
.append(HtmlUtils.htmlEscape(error.get("error").toString()))
.append(", status=")
.append(HtmlUtils.htmlEscape(error.get("status").toString()))
.append(").</div>").append("<div>")
.append(HtmlUtils.htmlEscape(error.get("message").toString()))

View File

@ -118,8 +118,8 @@ public class DefaultErrorAttributes implements ErrorAttributes {
errorAttributes.put("trace", stackTrace.toString());
}
private void handleException(Map<String, Object> errorAttributes,
Throwable error, boolean includeStackTrace) {
private void handleException(Map<String, Object> errorAttributes, Throwable error,
boolean includeStackTrace) {
if (this.includeException) {
errorAttributes.put("exception", error.getClass().getName());
}

View File

@ -217,22 +217,23 @@ public class WebMvcAutoConfiguration {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(this.mvcProperties
.getPathMatch().isUseSuffixPattern());
configurer.setUseRegisteredSuffixPatternMatch(this.mvcProperties
.getPathMatch().isUseRegisteredSuffixPattern());
configurer.setUseSuffixPatternMatch(
this.mvcProperties.getPathMatch().isUseSuffixPattern());
configurer.setUseRegisteredSuffixPatternMatch(
this.mvcProperties.getPathMatch().isUseRegisteredSuffixPattern());
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
WebMvcProperties.ContentNegotiation contentNegotiation
= this.mvcProperties.getContentNegotiation();
WebMvcProperties.ContentNegotiation contentNegotiation = this.mvcProperties
.getContentNegotiation();
configurer.favorPathExtension(contentNegotiation.isFavorPathExtension());
configurer.favorParameter(contentNegotiation.isFavorParameter());
if (contentNegotiation.getParameterName() != null) {
configurer.parameterName(contentNegotiation.getParameterName());
}
Map<String, MediaType> mediaTypes = this.mvcProperties.getContentNegotiation().getMediaTypes();
Map<String, MediaType> mediaTypes = this.mvcProperties.getContentNegotiation()
.getMediaTypes();
for (Entry<String, MediaType> mediaType : mediaTypes.entrySet()) {
configurer.mediaType(mediaType.getKey(), mediaType.getValue());
}
@ -324,8 +325,8 @@ public class WebMvcAutoConfiguration {
registry.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
@ -333,8 +334,8 @@ public class WebMvcAutoConfiguration {
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(
this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
}

View File

@ -273,20 +273,21 @@ public class WebMvcProperties {
public static class ContentNegotiation {
/**
* Whether the path extension in the URL path should be used to determine
* the requested media type. If enabled a request "/users.pdf" will be
* interpreted as a request for "application/pdf" regardless of the 'Accept' header.
* Whether the path extension in the URL path should be used to determine the
* requested media type. If enabled a request "/users.pdf" will be interpreted as
* a request for "application/pdf" regardless of the 'Accept' header.
*/
private boolean favorPathExtension = false;
/**
* Whether a request parameter ("format" by default) should be used to
* determine the requested media type.
* Whether a request parameter ("format" by default) should be used to determine
* the requested media type.
*/
private boolean favorParameter = false;
/**
* Maps file extensions to media types for content negotiation, e.g. yml to text/yaml.
* Maps file extensions to media types for content negotiation, e.g. yml to
* text/yaml.
*/
private Map<String, MediaType> mediaTypes = new LinkedHashMap<>();
@ -331,16 +332,16 @@ public class WebMvcProperties {
public static class PathMatch {
/**
* Whether to use suffix pattern match (".*") when matching patterns to
* requests. If enabled a method mapped to "/users" also matches to "/users.*".
* Whether to use suffix pattern match (".*") when matching patterns to requests.
* If enabled a method mapped to "/users" also matches to "/users.*".
*/
private boolean useSuffixPattern = false;
/**
* Whether suffix pattern matching should work only against extensions
* registered with "spring.mvc.content-negotiation.media-types.*".
* This is generally recommended to reduce ambiguity and to
* avoid issues such as when a "." appears in the path for other reasons.
* Whether suffix pattern matching should work only against extensions registered
* with "spring.mvc.content-negotiation.media-types.*". This is generally
* recommended to reduce ambiguity and to avoid issues such as when a "." appears
* in the path for other reasons.
*/
private boolean useRegisteredSuffixPattern = false;

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -35,9 +35,7 @@ import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.converter.StringMessageConverter;
import org.springframework.messaging.simp.config.AbstractMessageBrokerConfiguration;
import org.springframework.util.MimeTypeUtils;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
/**
@ -56,7 +54,7 @@ public class WebSocketMessagingAutoConfiguration {
ObjectMapper.class })
@ConditionalOnClass({ ObjectMapper.class, AbstractMessageBrokerConfiguration.class })
static class WebSocketMessageConverterConfiguration
extends AbstractWebSocketMessageBrokerConfigurer {
implements WebSocketMessageBrokerConfigurer {
private final ObjectMapper objectMapper;
@ -64,11 +62,6 @@ public class WebSocketMessagingAutoConfiguration {
this.objectMapper = objectMapper;
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// The user must register their own endpoints
}
@Override
public boolean configureMessageConverters(
List<MessageConverter> messageConverters) {

View File

@ -321,8 +321,7 @@ public class CacheAutoConfigurationTests {
@Test
public void redisCacheWithCustomizers() {
this.contextRunner
.withUserConfiguration(RedisWithCustomizersConfiguration.class)
this.contextRunner.withUserConfiguration(RedisWithCustomizersConfiguration.class)
.withPropertyValues("spring.cache.type=" + "redis")
.run(dunno("allCacheManagerCustomizer", "redisCacheManagerCustomizer"));
}
@ -954,8 +953,7 @@ public class CacheAutoConfigurationTests {
@Bean
public org.springframework.data.redis.cache.RedisCacheConfiguration customRedisCacheConfiguration() {
return org.springframework.data.redis.cache.RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(java.time.Duration.ofSeconds(30))
.defaultCacheConfig().entryTtl(java.time.Duration.ofSeconds(30))
.prefixKeysWith("bar");
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -67,8 +67,8 @@ public class MongoRepositoriesAutoConfigurationTests {
@Test
public void testNoRepositoryConfiguration() {
this.runner.withUserConfiguration(EmptyConfiguration.class).run((context) ->
assertThat(context).hasSingleBean(MongoClient.class));
this.runner.withUserConfiguration(EmptyConfiguration.class)
.run((context) -> assertThat(context).hasSingleBean(MongoClient.class));
}
@Test

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -60,8 +60,7 @@ public class DataSourceInitializerInvokerTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
.withPropertyValues("spring.datasource.initialization-mode=never",
"spring.datasource.url:jdbc:hsqldb:mem:init-"
+ UUID.randomUUID());
"spring.datasource.url:jdbc:hsqldb:mem:init-" + UUID.randomUUID());
@Test
public void dataSourceInitialized() {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -194,8 +194,7 @@ public class MailSenderAutoConfigurationTests {
verify(mailSender, never()).testConnection();
}
private Session configureJndiSession(String name)
throws IllegalStateException {
private Session configureJndiSession(String name) throws IllegalStateException {
Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
TestableInitialContextFactory.bind(name, session);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -63,7 +63,8 @@ public class SecurityFilterAutoConfigurationEarlyInitializationTests {
context.refresh();
int port = context.getWebServer().getPort();
String password = this.outputCapture.toString()
.split("Using generated security password: ")[1].split("\n")[0].trim();
.split("Using generated security password: ")[1].split("\n")[0]
.trim();
new TestRestTemplate("user", password)
.getForEntity("http://localhost:" + port, Object.class);
// If early initialization occurred a ConverterNotFoundException is thrown

View File

@ -153,24 +153,24 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
@Test
public void sessionCookieConfigurationIsPickedUp() {
new WebApplicationContextRunner(
WebApplicationContextRunner webRunner = new WebApplicationContextRunner(
AnnotationConfigServletWebServerApplicationContext::new)
.withConfiguration(AutoConfigurations
.of(ServletWebServerFactoryAutoConfiguration.class))
.withUserConfiguration(SessionRepositoryConfiguration.class)
.withPropertyValues("server.port=0",
"server.servlet.session.cookie.name=testname")
.run((context) -> {
SessionRepositoryFilter<?> filter = context
.getBean(SessionRepositoryFilter.class);
CookieHttpSessionIdResolver sessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
.getField(filter, "httpSessionIdResolver");
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
.getField(sessionIdResolver, "cookieSerializer");
String cookieName = (String) ReflectionTestUtils
.getField(cookieSerializer, "cookieName");
assertThat(cookieName).isEqualTo("testname");
});
"server.servlet.session.cookie.name=testname");
webRunner.run((context) -> {
SessionRepositoryFilter<?> filter = context
.getBean(SessionRepositoryFilter.class);
CookieHttpSessionIdResolver sessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
.getField(filter, "httpSessionIdResolver");
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
.getField(sessionIdResolver, "cookieSerializer");
String cookieName = (String) ReflectionTestUtils.getField(cookieSerializer,
"cookieName");
assertThat(cookieName).isEqualTo("testname");
});
}
@Configuration

View File

@ -170,7 +170,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
public void defaultTomcatBackgroundProcessorDelay() {
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory();
this.customizer.customize(factory);
TomcatWebServer webServer = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer webServer = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
assertThat(webServer.getTomcat().getEngine().getBackgroundProcessorDelay())
.isEqualTo(30);
webServer.stop();
@ -183,7 +184,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory();
this.customizer.customize(factory);
TomcatWebServer webServer = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer webServer = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
assertThat(webServer.getTomcat().getEngine().getBackgroundProcessorDelay())
.isEqualTo(5);
webServer.stop();
@ -261,7 +263,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory(0);
this.customizer.customize(factory);
TomcatWebServer server = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer server = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
server.start();
try {
assertThat(((AbstractProtocol<?>) server.getTomcat().getConnector()
@ -279,7 +282,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory(0);
this.customizer.customize(factory);
TomcatWebServer server = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer server = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
server.start();
try {
assertThat(((AbstractProtocol<?>) server.getTomcat().getConnector()
@ -297,7 +301,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory(0);
this.customizer.customize(factory);
TomcatWebServer server = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer server = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
server.start();
try {
assertThat(server.getTomcat().getConnector().getMaxPostSize())
@ -315,7 +320,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory(0);
this.customizer.customize(factory);
TomcatWebServer server = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer server = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
server.start();
try {
assertThat(server.getTomcat().getConnector().getMaxPostSize()).isEqualTo(-1);
@ -340,7 +346,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
bindProperties(map);
TomcatReactiveWebServerFactory factory = new TomcatReactiveWebServerFactory(0);
this.customizer.customize(factory);
TomcatWebServer server = (TomcatWebServer) factory.getWebServer(mock(HttpHandler.class));
TomcatWebServer server = (TomcatWebServer) factory
.getWebServer(mock(HttpHandler.class));
server.start();
try {
Tomcat tomcat = server.getTomcat();
@ -382,7 +389,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
map.put("server.jetty.accesslog.enabled", "true");
bindProperties(map);
this.customizer.customize(factory);
JettyWebServer webServer = (JettyWebServer) factory.getWebServer(mock(HttpHandler.class));
JettyWebServer webServer = (JettyWebServer) factory
.getWebServer(mock(HttpHandler.class));
try {
NCSARequestLog requestLog = getNCSARequestLog(webServer);
assertThat(requestLog.getFilename()).isNull();
@ -417,7 +425,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
map.put("server.jetty.accesslog.log-latency", "true");
bindProperties(map);
this.customizer.customize(factory);
JettyWebServer webServer = (JettyWebServer) factory.getWebServer(mock(HttpHandler.class));
JettyWebServer webServer = (JettyWebServer) factory
.getWebServer(mock(HttpHandler.class));
NCSARequestLog requestLog = getNCSARequestLog(webServer);
try {
assertThat(requestLog.getFilename()).isEqualTo(logFile.getAbsolutePath());
@ -461,7 +470,8 @@ public class DefaultReactiveWebServerFactoryCustomizerTests {
@Test
public void setUseForwardHeadersUndertow() {
this.properties.setUseForwardHeaders(true);
UndertowReactiveWebServerFactory factory = spy(new UndertowReactiveWebServerFactory());
UndertowReactiveWebServerFactory factory = spy(
new UndertowReactiveWebServerFactory());
this.customizer.customize(factory);
verify(factory).setUseForwardHeaders(true);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -54,8 +54,9 @@ public class ReactiveWebServerAutoConfigurationTests {
.hasSize(1);
assertThat(this.context.getBeansOfType(WebServerFactoryCustomizer.class))
.hasSize(1);
assertThat(this.context.getBeansOfType(DefaultReactiveWebServerFactoryCustomizer.class))
.hasSize(1);
assertThat(this.context
.getBeansOfType(DefaultReactiveWebServerFactoryCustomizer.class))
.hasSize(1);
}
@Test

View File

@ -233,8 +233,7 @@ public class DefaultErrorWebExceptionHandlerIntegrationTests {
.contentType(MediaType.TEXT_HTML).expectBody(String.class)
.returnResult().getResponseBody();
assertThat(body).contains("Whitelabel Error Page")
.doesNotContain("<script>")
.contains("&lt;script&gt;");
.doesNotContain("<script>").contains("&lt;script&gt;");
this.output.expect(
allOf(containsString("Failed to handle request [GET /html]"),
containsString("IllegalStateException")));

View File

@ -471,9 +471,10 @@ public class WebMvcAutoConfigurationTests {
@Test
public void customMediaTypes() {
this.contextRunner.withPropertyValues(
"spring.mvc.content-negotiation.media-types.yaml:text/yaml",
"spring.mvc.content-negotiation.favor-path-extension:true")
this.contextRunner
.withPropertyValues(
"spring.mvc.content-negotiation.media-types.yaml:text/yaml",
"spring.mvc.content-negotiation.favor-path-extension:true")
.run((context) -> {
RequestMappingHandlerAdapter adapter = context
.getBean(RequestMappingHandlerAdapter.class);
@ -744,7 +745,8 @@ public class WebMvcAutoConfigurationTests {
@Test
public void defaultPathMatching() {
this.contextRunner.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
RequestMappingHandlerMapping handlerMapping = context
.getBean(RequestMappingHandlerMapping.class);
assertThat(handlerMapping.useSuffixPatternMatch()).isFalse();
assertThat(handlerMapping.useRegisteredSuffixPatternMatch()).isFalse();
});
@ -756,34 +758,40 @@ public class WebMvcAutoConfigurationTests {
.withPropertyValues("spring.mvc.path-match.use-suffix-pattern:true",
"spring.mvc.path-match.use-registered-suffix-pattern:true")
.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
assertThat(handlerMapping.useSuffixPatternMatch()).isTrue();
assertThat(handlerMapping.useRegisteredSuffixPatternMatch()).isTrue();
});
RequestMappingHandlerMapping handlerMapping = context
.getBean(RequestMappingHandlerMapping.class);
assertThat(handlerMapping.useSuffixPatternMatch()).isTrue();
assertThat(handlerMapping.useRegisteredSuffixPatternMatch()).isTrue();
});
}
@Test
public void defaultContentNegotiation() {
this.contextRunner.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping.getContentNegotiationManager();
RequestMappingHandlerMapping handlerMapping = context
.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping
.getContentNegotiationManager();
assertThat(contentNegotiationManager.getStrategies())
.doesNotHaveAnyElementsOfTypes(WebMvcAutoConfiguration
.OptionalPathExtensionContentNegotiationStrategy.class);
.doesNotHaveAnyElementsOfTypes(
WebMvcAutoConfiguration.OptionalPathExtensionContentNegotiationStrategy.class);
});
}
@Test
public void pathExtensionContentNegotiation() {
this.contextRunner
.withPropertyValues("spring.mvc.content-negotiation.favor-path-extension:true")
.withPropertyValues(
"spring.mvc.content-negotiation.favor-path-extension:true")
.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping.getContentNegotiationManager();
assertThat(contentNegotiationManager.getStrategies())
.hasAtLeastOneElementOfType(WebMvcAutoConfiguration
.OptionalPathExtensionContentNegotiationStrategy.class);
});
RequestMappingHandlerMapping handlerMapping = context
.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping
.getContentNegotiationManager();
assertThat(contentNegotiationManager.getStrategies())
.hasAtLeastOneElementOfType(
WebMvcAutoConfiguration.OptionalPathExtensionContentNegotiationStrategy.class);
});
}
@Test
@ -791,10 +799,13 @@ public class WebMvcAutoConfigurationTests {
this.contextRunner
.withPropertyValues("spring.mvc.content-negotiation.favor-parameter:true")
.run((context) -> {
RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping.getContentNegotiationManager();
RequestMappingHandlerMapping handlerMapping = context
.getBean(RequestMappingHandlerMapping.class);
ContentNegotiationManager contentNegotiationManager = handlerMapping
.getContentNegotiationManager();
assertThat(contentNegotiationManager.getStrategies())
.hasAtLeastOneElementOfType(ParameterContentNegotiationStrategy.class);
.hasAtLeastOneElementOfType(
ParameterContentNegotiationStrategy.class);
});
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -75,7 +75,8 @@ public class WelcomePageHandlerMappingTests {
public void handlesRequestForStaticPageThatAcceptsAll() {
this.contextRunner.withUserConfiguration(StaticResourceConfiguration.class)
.run((context) -> MockMvcBuilders.webAppContextSetup(context).build()
.perform(get("/").accept(MediaType.ALL)).andExpect(status().isOk())
.perform(get("/").accept(MediaType.ALL))
.andExpect(status().isOk())
.andExpect(forwardedUrl("index.html")));
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -57,11 +57,11 @@ import org.springframework.stereotype.Controller;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.messaging.WebSocketStompClient;
import org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport;
import org.springframework.web.socket.sockjs.client.SockJsClient;
@ -213,7 +213,7 @@ public class WebSocketMessagingAutoConfigurationTests {
WebSocketMessagingAutoConfiguration.class,
DispatcherServletAutoConfiguration.class })
static class WebSocketMessagingConfiguration
extends AbstractWebSocketMessageBrokerConfigurer {
implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -43,8 +43,8 @@ import org.springframework.core.Ordered;
* dependencies in the BOM (and its transitives) will be added to the dependency
* management lookup, so an app can use just the artifact id (e.g. "spring-jdbc") in a
* {@code @Grab}. To install, implement the missing methods and list the class in
* {@code META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation}.
* The {@link #getOrder()} value needs to be before
* {@code META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation}
* . The {@link #getOrder()} value needs to be before
* {@link DependencyManagementBomTransformation#ORDER}.
*
* @author Dave Syer

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -40,7 +40,6 @@ public class UserServiceAutoConfiguration {
return new UserService(properties.getName());
}
@ConfigurationProperties("user")
static class UserProperties {

View File

@ -36,10 +36,7 @@ public class RandomPortWebTestClientExampleTests {
@Test
public void exampleTest() {
this.webClient.get()
.uri("/")
.exchange()
.expectStatus().isOk()
this.webClient.get().uri("/").exchange().expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World");
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -38,7 +38,8 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Stephane Nicoll
*/
@RunWith(SpringRunner.class)
@SpringBootTest(properties = { "app.datasource.second.url=jdbc:h2:mem:bar;DB_CLOSE_DELAY=-1",
@SpringBootTest(properties = {
"app.datasource.second.url=jdbc:h2:mem:bar;DB_CLOSE_DELAY=-1",
"app.datasource.second.max-total=42" })
@Import(SimpleTwoDataSourcesExample.SimpleDataSourcesConfiguration.class)
public class SimpleTwoDataSourcesExampleTests {
@ -55,7 +56,8 @@ public class SimpleTwoDataSourcesExampleTests {
.startsWith("jdbc:h2:mem:");
BasicDataSource secondDataSource = this.context.getBean("secondDataSource",
BasicDataSource.class);
assertThat(secondDataSource.getUrl()).isEqualTo("jdbc:h2:mem:bar;DB_CLOSE_DELAY=-1");
assertThat(secondDataSource.getUrl())
.isEqualTo("jdbc:h2:mem:bar;DB_CLOSE_DELAY=-1");
assertThat(secondDataSource.getMaxTotal()).isEqualTo(42);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -371,8 +371,7 @@ public abstract class AbstractJsonMarshalTester<T> {
initFields(testInstance, () -> marshaller);
}
public void initFields(Object testInstance,
final ObjectFactory<M> marshaller) {
public void initFields(Object testInstance, final ObjectFactory<M> marshaller) {
Assert.notNull(testInstance, "TestInstance must not be null");
Assert.notNull(marshaller, "Marshaller must not be null");
ReflectionUtils.doWithFields(testInstance.getClass(),

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -131,8 +131,7 @@ public class TestRestTemplateTests {
ReflectionUtils.doWithMethods(RestOperations.class, new MethodCallback() {
@Override
public void doWith(Method method)
throws IllegalArgumentException {
public void doWith(Method method) throws IllegalArgumentException {
Method equivalent = ReflectionUtils.findMethod(TestRestTemplate.class,
method.getName(), method.getParameterTypes());
assertThat(equivalent).as("Method %s not found", method).isNotNull();

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -155,8 +155,8 @@ public final class ConfigurationMetadataRepositoryJsonBuilder {
}
/**
* Create a new builder instance using {@link StandardCharsets#UTF_8} as the default charset and the
* specified json resource.
* Create a new builder instance using {@link StandardCharsets#UTF_8} as the default
* charset and the specified json resource.
* @param inputStreams the source input streams
* @return a new {@link ConfigurationMetadataRepositoryJsonBuilder} instance.
* @throws IOException on error
@ -171,7 +171,8 @@ public final class ConfigurationMetadataRepositoryJsonBuilder {
}
/**
* Create a new builder instance using {@link StandardCharsets#UTF_8} as the default charset.
* Create a new builder instance using {@link StandardCharsets#UTF_8} as the default
* charset.
* @return a new {@link ConfigurationMetadataRepositoryJsonBuilder} instance.
*/
public static ConfigurationMetadataRepositoryJsonBuilder create() {

View File

@ -52,7 +52,7 @@ public class JSONArray {
* Creates a {@code JSONArray} with no values.
*/
public JSONArray() {
this.values = new ArrayList<Object>();
this.values = new ArrayList<>();
}
/**
@ -111,7 +111,7 @@ public class JSONArray {
throw new JSONException("Not a primitive array: " + array.getClass());
}
final int length = Array.getLength(array);
this.values = new ArrayList<Object>(length);
this.values = new ArrayList<>(length);
for (int i = 0; i < length; ++i) {
put(JSONObject.wrap(Array.get(array, i)));
}

View File

@ -111,7 +111,7 @@ public class JSONObject {
* Creates a {@code JSONObject} with no name/value mappings.
*/
public JSONObject() {
this.nameValuePairs = new HashMap<String, Object>();
this.nameValuePairs = new HashMap<>();
}
/**
@ -691,7 +691,7 @@ public class JSONObject {
*/
public JSONArray names() {
return this.nameValuePairs.isEmpty() ? null
: new JSONArray(new ArrayList<String>(this.nameValuePairs.keySet()));
: new JSONArray(new ArrayList<>(this.nameValuePairs.keySet()));
}
/**

View File

@ -109,7 +109,7 @@ public class JSONStringer {
* Unlike the original implementation, this stack isn't limited to 20 levels of
* nesting.
*/
private final List<Scope> stack = new ArrayList<Scope>();
private final List<Scope> stack = new ArrayList<>();
/**
* A string containing a full set of spaces for a single level of indentation, or null

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -166,7 +166,6 @@ class TypeUtils {
return WRAPPER_TO_PRIMITIVE.get(type.toString());
}
/**
* A visitor that extracts the full qualified name of a type, including generic
* information.
@ -202,7 +201,7 @@ class TypeUtils {
if (enclosingElement != null) {
return getQualifiedName(enclosingElement) + "$"
+ ((DeclaredType) element.asType()).asElement().getSimpleName()
.toString();
.toString();
}
if (element instanceof TypeElement) {
return ((TypeElement) element).getQualifiedName().toString();

View File

@ -167,7 +167,8 @@ public class JsonMarshaller {
private String toString(InputStream inputStream) throws IOException {
StringBuilder out = new StringBuilder();
InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
InputStreamReader reader = new InputStreamReader(inputStream,
StandardCharsets.UTF_8);
char[] buffer = new char[BUFFER_SIZE];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -191,8 +191,7 @@ public class TestProject {
return new File(TestCompiler.SOURCE_FOLDER, TestCompiler.sourcePathFor(type));
}
private static void putContents(File targetFile, String contents)
throws IOException {
private static void putContents(File targetFile, String contents) throws IOException {
FileCopyUtils.copy(new StringReader(contents), new FileWriter(targetFile));
}

View File

@ -47,6 +47,7 @@ import org.springframework.util.StringUtils;
final class JavaPluginAction implements PluginApplicationAction {
private static final String PARAMETERS_COMPILER_ARG = "-parameters";
private final SinglePublishedArtifact singlePublishedArtifact;
JavaPluginAction(SinglePublishedArtifact singlePublishedArtifact) {

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -86,8 +86,7 @@ public class TestJarFile {
return file;
}
private void copyToFile(InputStream inputStream, File file)
throws IOException {
private void copyToFile(InputStream inputStream, File file) throws IOException {
try (OutputStream outputStream = new FileOutputStream(file)) {
copy(inputStream, outputStream);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -24,8 +24,8 @@ import java.util.Set;
* Helper class for resolving placeholders in texts. Usually applied to file paths.
* <p>
* A text may contain {@code $ ...} placeholders, to be resolved as system properties:
* e.g. {@code $ user.dir}. Default values can be supplied using the ":" separator
* between key and value.
* e.g. {@code $ user.dir}. Default values can be supplied using the ":" separator between
* key and value.
* <p>
* Adapted from Spring.
*

View File

@ -104,8 +104,8 @@ public class RandomAccessDataFileTests {
public void fileExists() {
File file = new File("/does/not/exist");
this.thrown.expect(IllegalArgumentException.class);
this.thrown.expectMessage(String.format("File %s must exist",
file.getAbsolutePath()));
this.thrown.expectMessage(
String.format("File %s must exist", file.getAbsolutePath()));
new RandomAccessDataFile(file);
}
@ -120,8 +120,8 @@ public class RandomAccessDataFileTests {
public void fileExistsWithConcurrentReads() {
File file = new File("/does/not/exist");
this.thrown.expect(IllegalArgumentException.class);
this.thrown.expectMessage(String.format("File %s must exist",
file.getAbsolutePath()));
this.thrown.expectMessage(
String.format("File %s must exist", file.getAbsolutePath()));
new RandomAccessDataFile(file, 1);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -112,7 +112,7 @@ public final class PropertyMapper {
if (this.parent != null) {
return this.parent.from(supplier);
}
return new Source<T>(new CachingSupplier<>(supplier), (Predicate<T>) ALWAYS);
return new Source<>(new CachingSupplier<>(supplier), (Predicate<T>) ALWAYS);
}
/**
@ -207,7 +207,7 @@ public final class PropertyMapper {
}
return null;
};
return new Source<R>(supplier, predicate);
return new Source<>(supplier, predicate);
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -351,8 +351,8 @@ public class Binder {
* @return a {@link Binder} instance
*/
public static Binder get(Environment environment) {
return new Binder(ConfigurationPropertySources
.get(environment), new PropertySourcesPlaceholdersResolver(environment));
return new Binder(ConfigurationPropertySources.get(environment),
new PropertySourcesPlaceholdersResolver(environment));
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -51,7 +51,8 @@ class DurationConverter implements GenericConverter {
private static final Pattern ISO8601 = Pattern.compile("^[\\+\\-]?P.*$");
private static final Pattern SIMPLE = Pattern.compile("^([\\+\\-]?\\d+)([a-zA-Z]{0,2})$");
private static final Pattern SIMPLE = Pattern
.compile("^([\\+\\-]?\\d+)([a-zA-Z]{0,2})$");
private static final Map<String, ChronoUnit> UNITS;
@ -90,7 +91,8 @@ class DurationConverter implements GenericConverter {
return Duration.parse(source);
}
Matcher matcher = SIMPLE.matcher(source);
Assert.state(matcher.matches(), () -> "'" + source + "' is not a valid duration");
Assert.state(matcher.matches(),
() -> "'" + source + "' is not a valid duration");
long amount = Long.parseLong(matcher.group(1));
ChronoUnit unit = getUnit(matcher.group(2), defaultUnit);
return Duration.of(amount, unit);

View File

@ -26,8 +26,8 @@ import org.springframework.util.Assert;
import org.springframework.web.server.ServerWebExchange;
/**
* {@link ApplicationContext} backed {@link ServerWebExchangeMatcher}. Can work directly with the
* {@link ApplicationContext}, obtain an existing bean or
* {@link ApplicationContext} backed {@link ServerWebExchangeMatcher}. Can work directly
* with the {@link ApplicationContext}, obtain an existing bean or
* {@link AutowireCapableBeanFactory#createBean(Class, int, boolean) create a new bean}
* that is autowired in the usual way.
*
@ -38,7 +38,8 @@ import org.springframework.web.server.ServerWebExchange;
* @author Madhura Bhave
* @since 2.0.0
*/
public abstract class ApplicationContextServerWebExchangeMatcher<C> implements ServerWebExchangeMatcher {
public abstract class ApplicationContextServerWebExchangeMatcher<C>
implements ServerWebExchangeMatcher {
private final Class<? extends C> contextClass;
@ -101,4 +102,3 @@ public abstract class ApplicationContextServerWebExchangeMatcher<C> implements S
}
}

View File

@ -178,8 +178,8 @@ public class JettyReactiveWebServerFactory extends AbstractReactiveWebServerFact
JettyHandlerWrappers.createGzipHandlerWrapper(getCompression()));
}
if (StringUtils.hasText(getServerHeader())) {
handler = applyWrapper(handler,
JettyHandlerWrappers.createServerHeaderHandlerWrapper(getServerHeader()));
handler = applyWrapper(handler, JettyHandlerWrappers
.createServerHeaderHandlerWrapper(getServerHeader()));
}
return handler;
}

View File

@ -182,8 +182,8 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor
JettyHandlerWrappers.createGzipHandlerWrapper(getCompression()));
}
if (StringUtils.hasText(getServerHeader())) {
handler = applyWrapper(handler,
JettyHandlerWrappers.createServerHeaderHandlerWrapper(getServerHeader()));
handler = applyWrapper(handler, JettyHandlerWrappers
.createServerHeaderHandlerWrapper(getServerHeader()));
}
return handler;
}
@ -530,7 +530,6 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor
}
}
private static final class LoaderHidingResource extends Resource {
private final Resource delegate;

View File

@ -80,7 +80,6 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
private int backgroundProcessorDelay;
/**
* Create a new {@link TomcatServletWebServerFactory} instance.
*/
@ -304,8 +303,8 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
}
/**
* Set {@link LifecycleListener}s that should be applied to the Tomcat {@link Context}.
* Calling this method will replace any existing listeners.
* Set {@link LifecycleListener}s that should be applied to the Tomcat
* {@link Context}. Calling this method will replace any existing listeners.
* @param contextLifecycleListeners the listeners to set
*/
public void setContextLifecycleListeners(

View File

@ -42,8 +42,8 @@ import org.springframework.util.Assert;
/**
* {@link WebServer} that can be used to control a Tomcat web server. Usually this class
* should be created using the {@link TomcatReactiveWebServerFactory}
* of {@link TomcatServletWebServerFactory}, but not directly.
* should be created using the {@link TomcatReactiveWebServerFactory} of
* {@link TomcatServletWebServerFactory}, but not directly.
*
* @author Brian Clozel
* @author Kristine Jetzke

View File

@ -52,7 +52,8 @@ final class UndertowCompressionConfigurer {
* @param httpHandler the HTTP handler to wrap
* @return the wrapped HTTP handler if compression is enabled, or the handler itself
*/
public static HttpHandler configureCompression(Compression compression, HttpHandler httpHandler) {
public static HttpHandler configureCompression(Compression compression,
HttpHandler httpHandler) {
if (compression == null || !compression.getEnabled()) {
return httpHandler;
}

View File

@ -77,7 +77,6 @@ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerF
private boolean useForwardHeaders;
/**
* Create a new {@link UndertowReactiveWebServerFactory} instance.
*/
@ -94,7 +93,8 @@ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerF
}
@Override
public WebServer getWebServer(org.springframework.http.server.reactive.HttpHandler httpHandler) {
public WebServer getWebServer(
org.springframework.http.server.reactive.HttpHandler httpHandler) {
Undertow.Builder builder = createBuilder(getPort());
HttpHandler handler = createUndertowHandler(httpHandler);
builder.setHandler(handler);
@ -127,19 +127,22 @@ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerF
return builder;
}
private HttpHandler createUndertowHandler(org.springframework.http.server.reactive.HttpHandler httpHandler) {
private HttpHandler createUndertowHandler(
org.springframework.http.server.reactive.HttpHandler httpHandler) {
HttpHandler handler = new UndertowHttpHandlerAdapter(httpHandler);
if (this.useForwardHeaders) {
handler = Handlers.proxyPeerAddress(handler);
}
handler = UndertowCompressionConfigurer.configureCompression(getCompression(), handler);
handler = UndertowCompressionConfigurer.configureCompression(getCompression(),
handler);
if (isAccessLogEnabled()) {
handler = createAccessLogHandler(handler);
}
return handler;
}
private AccessLogHandler createAccessLogHandler(io.undertow.server.HttpHandler handler) {
private AccessLogHandler createAccessLogHandler(
io.undertow.server.HttpHandler handler) {
try {
createAccessLogDirectoryIfNecessary();
String prefix = (this.accessLogPrefix != null ? this.accessLogPrefix
@ -175,8 +178,7 @@ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerF
new SslBuilderCustomizer(getPort(), getAddress(), getSsl(), getSslStoreProvider())
.customize(builder);
if (getHttp2() != null) {
builder.setServerOption(UndertowOptions.ENABLE_HTTP2,
getHttp2().isEnabled());
builder.setServerOption(UndertowOptions.ENABLE_HTTP2, getHttp2().isEnabled());
}
}
@ -304,6 +306,7 @@ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerF
* Undertow {@link io.undertow.Undertow.Builder Builder}.
* @param customizers the customizers to add
*/
@Override
public void addBuilderCustomizers(UndertowBuilderCustomizer... customizers) {
Assert.notNull(customizers, "Customizers must not be null");
this.builderCustomizers.addAll(Arrays.asList(customizers));

View File

@ -452,6 +452,7 @@ public class UndertowServletWebServerFactory extends AbstractServletWebServerFac
this.ioThreads = ioThreads;
}
@Override
public void setWorkerThreads(Integer workerThreads) {
this.workerThreads = workerThreads;
}

View File

@ -35,8 +35,9 @@ import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
/**
* {@link WebServer} that can be used to control an Undertow web server. Usually this class
* should be created using the {@link UndertowReactiveWebServerFactory} and not directly.
* {@link WebServer} that can be used to control an Undertow web server. Usually this
* class should be created using the {@link UndertowReactiveWebServerFactory} and not
* directly.
*
* @author Ivan Sopov
* @author Andy Wilkinson

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -125,8 +125,8 @@ public class AnnotationConfigReactiveWebServerApplicationContext
/**
* Provide a custom {@link BeanNameGenerator} for use with
* {@link AnnotatedBeanDefinitionReader} and/or {@link ClassPathBeanDefinitionScanner},
* if any.
* {@link AnnotatedBeanDefinitionReader} and/or
* {@link ClassPathBeanDefinitionScanner}, if any.
* <p>
* Default is
* {@link org.springframework.context.annotation.AnnotationBeanNameGenerator}.

View File

@ -58,8 +58,8 @@ public abstract class DynamicRegistrationBean<D extends Registration.Dynamic>
}
/**
* Sets if asynchronous operations are supported for this registration. If not specified
* defaults to {@code true}.
* Sets if asynchronous operations are supported for this registration. If not
* specified defaults to {@code true}.
* @param asyncSupported if async is supported
*/
public void setAsyncSupported(boolean asyncSupported) {

View File

@ -246,8 +246,8 @@ public class ServletContextInitializerBeans
}
/**
* Adapter to convert a given Bean type into a {@link RegistrationBean} (and
* hence a {@link ServletContextInitializer}).
* Adapter to convert a given Bean type into a {@link RegistrationBean} (and hence a
* {@link ServletContextInitializer}).
*/
private interface RegistrationBeanAdapter<T> {

View File

@ -123,8 +123,8 @@ public class AnnotationConfigServletWebServerApplicationContext
/**
* Provide a custom {@link BeanNameGenerator} for use with
* {@link AnnotatedBeanDefinitionReader} and/or {@link ClassPathBeanDefinitionScanner},
* if any.
* {@link AnnotatedBeanDefinitionReader} and/or
* {@link ClassPathBeanDefinitionScanner}, if any.
* <p>
* Default is
* {@link org.springframework.context.annotation.AnnotationBeanNameGenerator}.
@ -169,6 +169,7 @@ public class AnnotationConfigServletWebServerApplicationContext
* @see #scan(String...)
* @see #refresh()
*/
@Override
public final void register(Class<?>... annotatedClasses) {
Assert.notEmpty(annotatedClasses,
"At least one annotated class must be specified");
@ -182,6 +183,7 @@ public class AnnotationConfigServletWebServerApplicationContext
* @see #register(Class...)
* @see #refresh()
*/
@Override
public final void scan(String... basePackages) {
Assert.notEmpty(basePackages, "At least one base package must be specified");
this.basePackages = basePackages;

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -56,7 +56,8 @@ class SessionStoreDirectory {
}
private void assertDirectory(boolean mkdirs, File dir) {
Assert.state(!mkdirs || dir.exists(), () -> "Session dir " + dir + " does not exist");
Assert.state(!mkdirs || dir.exists(),
() -> "Session dir " + dir + " does not exist");
Assert.state(!dir.isFile(), () -> "Session dir " + dir + " points to a file");
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -100,8 +100,7 @@ public class ExitCodeGeneratorsTests {
return generator;
}
private ExitCodeExceptionMapper mockMapper(Class<?> exceptionType,
int exitCode) {
private ExitCodeExceptionMapper mockMapper(Class<?> exceptionType, int exitCode) {
return (exception) -> {
if (exceptionType.isInstance(exception)) {
return exitCode;

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -137,7 +137,8 @@ public class DurationConverterTests {
private Duration convert(String source, ChronoUnit defaultUnit) {
TypeDescriptor targetType = mock(TypeDescriptor.class);
DefaultDurationUnit annotation = AnnotationUtils.synthesizeAnnotation(
Collections.singletonMap("value", defaultUnit), DefaultDurationUnit.class, null);
Collections.singletonMap("value", defaultUnit), DefaultDurationUnit.class,
null);
given(targetType.getAnnotation(DefaultDurationUnit.class)).willReturn(annotation);
return (Duration) this.converter.convert(source, TypeDescriptor.forObject(source),
targetType);

View File

@ -69,8 +69,8 @@ public class LiquibaseServiceLocatorApplicationListenerTests {
SpringApplication application = new SpringApplication(Conf.class);
application.setWebApplicationType(WebApplicationType.NONE);
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
resourceLoader.setClassLoader(new ClassHidingClassLoader(
CustomResolverServiceLocator.class));
resourceLoader.setClassLoader(
new ClassHidingClassLoader(CustomResolverServiceLocator.class));
application.setResourceLoader(resourceLoader);
this.context = application.run();
Object resolver = getServiceLocator();
@ -94,7 +94,8 @@ public class LiquibaseServiceLocatorApplicationListenerTests {
private final List<Class<?>> hiddenClasses;
private ClassHidingClassLoader(Class<?>... hiddenClasses) {
super(new URL[0], LiquibaseServiceLocatorApplicationListenerTests.class.getClassLoader());
super(new URL[0], LiquibaseServiceLocatorApplicationListenerTests.class
.getClassLoader());
this.hiddenClasses = Arrays.asList(hiddenClasses);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2017 the original author or authors.
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -55,34 +55,40 @@ public class ApplicationContextServerWebExchangeMatcherTests {
@Test
public void matchesWhenContextClassIsApplicationContextShouldProvideContext() {
ServerWebExchange exchange = createHttpWebHandlerAdapter();
StaticApplicationContext context = (StaticApplicationContext) exchange.getApplicationContext();
assertThat(new TestApplicationContextServerWebExchangeMatcher<>(ApplicationContext.class)
.callMatchesAndReturnProvidedContext(exchange)).isEqualTo(context);
StaticApplicationContext context = (StaticApplicationContext) exchange
.getApplicationContext();
assertThat(new TestApplicationContextServerWebExchangeMatcher<>(
ApplicationContext.class).callMatchesAndReturnProvidedContext(exchange))
.isEqualTo(context);
}
@Test
public void matchesWhenContextClassIsExistingBeanShouldProvideBean() {
ServerWebExchange exchange = createHttpWebHandlerAdapter();
StaticApplicationContext context = (StaticApplicationContext) exchange.getApplicationContext();
StaticApplicationContext context = (StaticApplicationContext) exchange
.getApplicationContext();
context.registerSingleton("existingBean", ExistingBean.class);
assertThat(new TestApplicationContextServerWebExchangeMatcher<>(ExistingBean.class)
.callMatchesAndReturnProvidedContext(exchange))
.isEqualTo(context.getBean(ExistingBean.class));
assertThat(
new TestApplicationContextServerWebExchangeMatcher<>(ExistingBean.class)
.callMatchesAndReturnProvidedContext(exchange))
.isEqualTo(context.getBean(ExistingBean.class));
}
@Test
public void matchesWhenContextClassIsNewBeanShouldProvideBean() {
ServerWebExchange exchange = createHttpWebHandlerAdapter();
StaticApplicationContext context = (StaticApplicationContext) exchange.getApplicationContext();
StaticApplicationContext context = (StaticApplicationContext) exchange
.getApplicationContext();
context.registerSingleton("existingBean", ExistingBean.class);
assertThat(new TestApplicationContextServerWebExchangeMatcher<>(NewBean.class)
.callMatchesAndReturnProvidedContext(exchange).getBean())
.isEqualTo(context.getBean(ExistingBean.class));
.isEqualTo(context.getBean(ExistingBean.class));
}
@Test
public void matchesWhenContextIsNull() {
MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path").build());
MockServerWebExchange exchange = MockServerWebExchange
.from(MockServerHttpRequest.get("/path").build());
this.thrown.expect(IllegalStateException.class);
this.thrown.expectMessage("No WebApplicationContext found.");
new TestApplicationContextServerWebExchangeMatcher<>(ExistingBean.class)
@ -91,9 +97,11 @@ public class ApplicationContextServerWebExchangeMatcherTests {
private ServerWebExchange createHttpWebHandlerAdapter() {
StaticApplicationContext context = new StaticApplicationContext();
TestHttpWebHandlerAdapter adapter = new TestHttpWebHandlerAdapter(mock(WebHandler.class));
TestHttpWebHandlerAdapter adapter = new TestHttpWebHandlerAdapter(
mock(WebHandler.class));
adapter.setApplicationContext(context);
return adapter.createExchange(MockServerHttpRequest.get("/path").build(), new MockServerHttpResponse());
return adapter.createExchange(MockServerHttpRequest.get("/path").build(),
new MockServerHttpResponse());
}
static class TestHttpWebHandlerAdapter extends HttpWebHandlerAdapter {
@ -103,7 +111,8 @@ public class ApplicationContextServerWebExchangeMatcherTests {
}
@Override
protected ServerWebExchange createExchange(ServerHttpRequest request, ServerHttpResponse response) {
protected ServerWebExchange createExchange(ServerHttpRequest request,
ServerHttpResponse response) {
return super.createExchange(request, response);
}
@ -154,4 +163,3 @@ public class ApplicationContextServerWebExchangeMatcherTests {
}
}

View File

@ -149,7 +149,8 @@ public abstract class AbstractReactiveWebServerFactoryTests {
}
@Test
public void sslWantsClientAuthenticationSucceedsWithClientCertificate() throws Exception {
public void sslWantsClientAuthenticationSucceedsWithClientCertificate()
throws Exception {
Ssl ssl = new Ssl();
ssl.setClientAuth(Ssl.ClientAuth.WANT);
ssl.setKeyStore("classpath:test.jks");
@ -159,9 +160,9 @@ public abstract class AbstractReactiveWebServerFactoryTests {
testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector());
}
@Test
public void sslWantsClientAuthenticationSucceedsWithoutClientCertificate() throws Exception {
public void sslWantsClientAuthenticationSucceedsWithoutClientCertificate()
throws Exception {
Ssl ssl = new Ssl();
ssl.setClientAuth(Ssl.ClientAuth.WANT);
ssl.setKeyStore("classpath:test.jks");
@ -171,12 +172,13 @@ public abstract class AbstractReactiveWebServerFactoryTests {
testClientAuthSuccess(ssl, buildTrustAllSslConnector());
}
protected ReactorClientHttpConnector buildTrustAllSslWithClientKeyConnector() throws Exception {
protected ReactorClientHttpConnector buildTrustAllSslWithClientKeyConnector()
throws Exception {
KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
clientKeyStore.load(new FileInputStream(new File("src/test/resources/test.jks")),
"secret".toCharArray());
KeyManagerFactory clientKeyManagerFactory =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyManagerFactory clientKeyManagerFactory = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
clientKeyManagerFactory.init(clientKeyStore, "password".toCharArray());
return new ReactorClientHttpConnector(
(options) -> options.sslSupport(sslContextBuilder -> {
@ -186,7 +188,8 @@ public abstract class AbstractReactiveWebServerFactoryTests {
}));
}
protected void testClientAuthSuccess(Ssl sslConfiguration, ReactorClientHttpConnector clientConnector) {
protected void testClientAuthSuccess(Ssl sslConfiguration,
ReactorClientHttpConnector clientConnector) {
AbstractReactiveWebServerFactory factory = getFactory();
factory.setSsl(sslConfiguration);
@ -203,7 +206,8 @@ public abstract class AbstractReactiveWebServerFactoryTests {
}
@Test
public void sslNeedsClientAuthenticationSucceedsWithClientCertificate() throws Exception {
public void sslNeedsClientAuthenticationSucceedsWithClientCertificate()
throws Exception {
Ssl ssl = new Ssl();
ssl.setClientAuth(Ssl.ClientAuth.NEED);
ssl.setKeyStore("classpath:test.jks");
@ -214,9 +218,11 @@ public abstract class AbstractReactiveWebServerFactoryTests {
}
@Test
public void sslNeedsClientAuthenticationFailsWithoutClientCertificate() throws Exception {
public void sslNeedsClientAuthenticationFailsWithoutClientCertificate()
throws Exception {
// Ignored for Undertow, see https://github.com/reactor/reactor-netty/issues/257
Assumptions.assumeThat(getFactory()).isNotInstanceOf(UndertowReactiveWebServerFactory.class);
Assumptions.assumeThat(getFactory())
.isNotInstanceOf(UndertowReactiveWebServerFactory.class);
Ssl ssl = new Ssl();
ssl.setClientAuth(Ssl.ClientAuth.NEED);
ssl.setKeyStore("classpath:test.jks");
@ -226,7 +232,8 @@ public abstract class AbstractReactiveWebServerFactoryTests {
testClientAuthFailure(ssl, buildTrustAllSslConnector());
}
protected void testClientAuthFailure(Ssl sslConfiguration, ReactorClientHttpConnector clientConnector) {
protected void testClientAuthFailure(Ssl sslConfiguration,
ReactorClientHttpConnector clientConnector) {
AbstractReactiveWebServerFactory factory = getFactory();
factory.setSsl(sslConfiguration);
@ -240,17 +247,17 @@ public abstract class AbstractReactiveWebServerFactoryTests {
.body(BodyInserters.fromObject("Hello World")).exchange()
.flatMap((response) -> response.bodyToMono(String.class));
StepVerifier.create(result)
.expectError(SSLException.class)
StepVerifier.create(result).expectError(SSLException.class)
.verify(Duration.ofSeconds(10));
}
protected WebClient.Builder getWebClient() {
return getWebClient(options -> {
return getWebClient((options) -> {
});
}
protected WebClient.Builder getWebClient(Consumer<? super HttpClientOptions.Builder> clientOptions) {
protected WebClient.Builder getWebClient(
Consumer<? super HttpClientOptions.Builder> clientOptions) {
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(clientOptions))
.baseUrl("http://localhost:" + this.webServer.getPort());
@ -259,51 +266,54 @@ public abstract class AbstractReactiveWebServerFactoryTests {
@Test
public void compressionOfResponseToGetRequest() throws Exception {
WebClient client = prepareCompressionTest();
ResponseEntity<Void> response = client.get()
.exchange().flatMap(res -> res.toEntity(Void.class)).block();
ResponseEntity<Void> response = client.get().exchange()
.flatMap((res) -> res.toEntity(Void.class)).block();
assertResponseIsCompressed(response);
}
@Test
public void compressionOfResponseToPostRequest() throws Exception {
WebClient client = prepareCompressionTest();
ResponseEntity<Void> response = client.post()
.exchange().flatMap(res -> res.toEntity(Void.class)).block();
ResponseEntity<Void> response = client.post().exchange()
.flatMap((res) -> res.toEntity(Void.class)).block();
assertResponseIsCompressed(response);
}
@Test
public void noCompressionForSmallResponse() throws Exception {
Assumptions.assumeThat(getFactory()).isInstanceOf(NettyReactiveWebServerFactory.class);
Assumptions.assumeThat(getFactory())
.isInstanceOf(NettyReactiveWebServerFactory.class);
Compression compression = new Compression();
compression.setEnabled(true);
compression.setMinResponseSize(3001);
WebClient client = prepareCompressionTest(compression);
ResponseEntity<Void> response = client.get()
.exchange().flatMap(res -> res.toEntity(Void.class)).block();
ResponseEntity<Void> response = client.get().exchange()
.flatMap((res) -> res.toEntity(Void.class)).block();
assertResponseIsNotCompressed(response);
}
@Test
public void noCompressionForMimeType() throws Exception {
Assumptions.assumeThat(getFactory()).isNotInstanceOf(NettyReactiveWebServerFactory.class);
Assumptions.assumeThat(getFactory())
.isNotInstanceOf(NettyReactiveWebServerFactory.class);
Compression compression = new Compression();
compression.setMimeTypes(new String[] {"application/json"});
compression.setMimeTypes(new String[] { "application/json" });
WebClient client = prepareCompressionTest(compression);
ResponseEntity<Void> response = client.get()
.exchange().flatMap(res -> res.toEntity(Void.class)).block();
ResponseEntity<Void> response = client.get().exchange()
.flatMap((res) -> res.toEntity(Void.class)).block();
assertResponseIsNotCompressed(response);
}
@Test
public void noCompressionForUserAgent() throws Exception {
Assumptions.assumeThat(getFactory()).isNotInstanceOf(NettyReactiveWebServerFactory.class);
Assumptions.assumeThat(getFactory())
.isNotInstanceOf(NettyReactiveWebServerFactory.class);
Compression compression = new Compression();
compression.setEnabled(true);
compression.setExcludedUserAgents(new String[] { "testUserAgent" });
WebClient client = prepareCompressionTest(compression);
ResponseEntity<Void> response = client.get().header("User-Agent", "testUserAgent")
.exchange().flatMap(res -> res.toEntity(Void.class)).block();
.exchange().flatMap((res) -> res.toEntity(Void.class)).block();
assertResponseIsNotCompressed(response);
}
@ -313,15 +323,17 @@ public abstract class AbstractReactiveWebServerFactoryTests {
return prepareCompressionTest(compression);
}
protected WebClient prepareCompressionTest(Compression compression) {
AbstractReactiveWebServerFactory factory = getFactory();
factory.setCompression(compression);
this.webServer = factory.getWebServer(new CharsHandler(3000, MediaType.TEXT_PLAIN));
this.webServer = factory
.getWebServer(new CharsHandler(3000, MediaType.TEXT_PLAIN));
this.webServer.start();
return getWebClient(options -> options.compression(true).afterChannelInit(channel -> {
channel.pipeline().addBefore(NettyPipeline.HttpDecompressor,
"CompressionTest", new CompressionDetectionHandler());
})).build();
return getWebClient((options) -> options.compression(true)
.afterChannelInit((channel) -> channel.pipeline().addBefore(
NettyPipeline.HttpDecompressor, "CompressionTest",
new CompressionDetectionHandler()))).build();
}
protected void assertResponseIsCompressed(ResponseEntity<Void> response) {
@ -345,7 +357,8 @@ public abstract class AbstractReactiveWebServerFactoryTests {
}
protected static class CompressionDetectionHandler extends ChannelInboundHandlerAdapter {
protected static class CompressionDetectionHandler
extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

View File

@ -1018,7 +1018,7 @@ public abstract class AbstractServletWebServerFactoryTests {
factory.getSession().getCookie().setHttpOnly(true);
factory.getSession().getCookie().setSecure(true);
factory.getSession().getCookie().setMaxAge(Duration.ofMinutes(1));
AtomicReference<ServletContext> contextReference = new AtomicReference<ServletContext>();
AtomicReference<ServletContext> contextReference = new AtomicReference<>();
factory.getWebServer(contextReference::set).start();
ServletContext servletContext = contextReference.get();
assertThat(servletContext.getEffectiveSessionTrackingModes())