Merge branch '1.4.x' into 1.5.x

This commit is contained in:
Phillip Webb 2017-01-03 15:14:14 -08:00
commit 8ccd4db513
4 changed files with 111 additions and 35 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2015 the original author or authors.
* Copyright 2012-2017 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.
@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.context.annotation.DeferredImportSelector;
@ -27,6 +28,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.util.ClassUtils;
/**
* Selects configuration classes for the management context configuration. Entries are
@ -47,11 +49,26 @@ class ManagementContextConfigurationsImportSelector
@Override
public String[] selectImports(AnnotationMetadata metadata) {
// Find all possible auto configuration classes, filtering duplicates
List<String> factories = new ArrayList<String>(
new LinkedHashSet<String>(SpringFactoriesLoader.loadFactoryNames(
ManagementContextConfiguration.class, this.classLoader)));
AnnotationAwareOrderComparator.sort(factories);
return factories.toArray(new String[0]);
List<String> names = loadFactoryNames();
Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
for (String factoryName : names) {
classes.add(ClassUtils.resolveClassName(factoryName, this.classLoader));
}
return getSortedClassNames(new ArrayList<Class<?>>(classes));
}
protected List<String> loadFactoryNames() {
return SpringFactoriesLoader
.loadFactoryNames(ManagementContextConfiguration.class, this.classLoader);
}
private String[] getSortedClassNames(List<Class<?>> classes) {
AnnotationAwareOrderComparator.sort(classes);
List<String> names = new ArrayList<String>();
for (Class<?> sourceClass : classes) {
names.add(sourceClass.getName());
}
return names.toArray(new String[names.size()]);
}
@Override

View File

@ -0,0 +1,68 @@
/*
* Copyright 2012-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.springframework.core.annotation.Order;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ManagementContextConfigurationsImportSelector}.
*
* @author Phillip Webb
*/
public class ManagementContextConfigurationsImportSelectorTests {
@Test
public void selectImportsShouldOrderResult() throws Exception {
String[] imports = new TestManagementContextConfigurationsImportSelector()
.selectImports(null);
assertThat(imports).containsExactly(A.class.getName(), B.class.getName(),
C.class.getName());
}
private static class TestManagementContextConfigurationsImportSelector
extends ManagementContextConfigurationsImportSelector {
@Override
protected List<String> loadFactoryNames() {
return Arrays.asList(C.class.getName(), A.class.getName(), B.class.getName());
}
}
@Order(1)
private static class A {
}
@Order(2)
private static class B {
}
@Order(3)
private static class C {
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2016 the original author or authors.
* Copyright 2012-2017 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.
@ -48,7 +48,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.InterceptingClientHttpRequestFactory;
import org.springframework.http.client.support.BasicAuthorizationInterceptor;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
@ -144,11 +143,19 @@ public class TestRestTemplate {
if (username == null) {
return;
}
List<ClientHttpRequestInterceptor> interceptors = Collections
.<ClientHttpRequestInterceptor>singletonList(
new BasicAuthorizationInterceptor(username, password));
restTemplate.setRequestFactory(new InterceptingClientHttpRequestFactory(
restTemplate.getRequestFactory(), interceptors));
List<ClientHttpRequestInterceptor> interceptors = restTemplate.getInterceptors();
if (interceptors == null) {
interceptors = Collections.emptyList();
}
interceptors = new ArrayList<ClientHttpRequestInterceptor>(interceptors);
Iterator<ClientHttpRequestInterceptor> iterator = interceptors.iterator();
while (iterator.hasNext()) {
if (iterator.next() instanceof BasicAuthorizationInterceptor) {
iterator.remove();
}
}
interceptors.add(new BasicAuthorizationInterceptor(username, password));
restTemplate.setInterceptors(interceptors);
}
/**
@ -985,8 +992,7 @@ public class TestRestTemplate {
public TestRestTemplate withBasicAuth(String username, String password) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(getRestTemplate().getMessageConverters());
restTemplate.setInterceptors(
removeBasicAuthInterceptorIfPresent(getRestTemplate().getInterceptors()));
restTemplate.setInterceptors(getRestTemplate().getInterceptors());
restTemplate.setRequestFactory(getRestTemplate().getRequestFactory());
restTemplate.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler());
TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplate, username,
@ -996,19 +1002,6 @@ public class TestRestTemplate {
return testRestTemplate;
}
private List<ClientHttpRequestInterceptor> removeBasicAuthInterceptorIfPresent(
List<ClientHttpRequestInterceptor> interceptors) {
List<ClientHttpRequestInterceptor> updatedInterceptors = new ArrayList<ClientHttpRequestInterceptor>(
interceptors);
Iterator<ClientHttpRequestInterceptor> iterator = updatedInterceptors.iterator();
while (iterator.hasNext()) {
if (iterator.next() instanceof BasicAuthorizationInterceptor) {
iterator.remove();
}
}
return interceptors;
}
/**
* Options used to customize the Apache Http Client if it is used.
*/

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2016 the original author or authors.
* Copyright 2012-2017 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.
@ -160,16 +160,15 @@ public class TestRestTemplateTests {
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
assertThat(basicAuthTemplate.getRestTemplate().getUriTemplateHandler())
.isSameAs(originalTemplate.getRestTemplate().getUriTemplateHandler());
assertThat(basicAuthTemplate.getRestTemplate().getInterceptors())
.containsExactlyElementsOf(
originalTemplate.getRestTemplate().getInterceptors());
assertThat(basicAuthTemplate.getRestTemplate().getInterceptors()).hasSize(1);
assertBasicAuthorizationInterceptorCredentials(basicAuthTemplate, "user",
"password");
}
@Test
public void withBasicAuthReplacesBasicAuthInterceptorWhenAlreadyPresent() {
TestRestTemplate original = new TestRestTemplate("foo", "bar");
TestRestTemplate original = new TestRestTemplate("foo", "bar")
.withBasicAuth("replace", "repalce");
TestRestTemplate basicAuth = original.withBasicAuth("user", "password");
assertThat(basicAuth.getRestTemplate().getMessageConverters())
.containsExactlyElementsOf(
@ -181,8 +180,7 @@ public class TestRestTemplateTests {
.isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class);
assertThat(basicAuth.getRestTemplate().getUriTemplateHandler())
.isSameAs(original.getRestTemplate().getUriTemplateHandler());
assertThat(basicAuth.getRestTemplate().getInterceptors())
.containsExactlyElementsOf(original.getRestTemplate().getInterceptors());
assertThat(basicAuth.getRestTemplate().getInterceptors()).hasSize(1);
assertBasicAuthorizationInterceptorCredentials(basicAuth, "user", "password");
}