This commit is contained in:
Andy Wilkinson 2017-10-02 13:34:32 +01:00
parent 9ba20cc380
commit 9102eb32d1
8 changed files with 146 additions and 129 deletions

View File

@ -21,8 +21,8 @@ import java.util.Set;
import org.springframework.util.StringUtils;
/**
* {@link RuntimeException} thrown when an endpoint invocation does
* not contain required parameters.
* {@link RuntimeException} thrown when an endpoint invocation does not contain required
* parameters.
*
* @author Madhura Bhave
* @since 2.0.0
@ -32,8 +32,9 @@ public class ParametersMissingException extends RuntimeException {
private final Set<String> parameters;
public ParametersMissingException(Set<String> parameters) {
super("Failed to invoke operation because the following required " +
"parameters were missing: " + StringUtils.collectionToCommaDelimitedString(parameters));
super("Failed to invoke operation because the following required "
+ "parameters were missing: "
+ StringUtils.collectionToCommaDelimitedString(parameters));
this.parameters = parameters;
}
@ -45,4 +46,3 @@ public class ParametersMissingException extends RuntimeException {
return this.parameters;
}
}

View File

@ -110,13 +110,15 @@ public class HttpMessageConvertersTests {
@Test
public void postProcessConverters() throws Exception {
HttpMessageConverters converters = new HttpMessageConverters() {
@Override
protected List<HttpMessageConverter<?>> postProcessConverters(
List<HttpMessageConverter<?>> converters) {
converters.removeIf(
converter -> converter instanceof MappingJackson2XmlHttpMessageConverter);
converters.removeIf((
converter) -> converter instanceof MappingJackson2XmlHttpMessageConverter);
return converters;
}
};
List<Class<?>> converterClasses = new ArrayList<>();
for (HttpMessageConverter<?> converter : converters) {
@ -135,13 +137,15 @@ public class HttpMessageConvertersTests {
@Test
public void postProcessPartConverters() throws Exception {
HttpMessageConverters converters = new HttpMessageConverters() {
@Override
protected List<HttpMessageConverter<?>> postProcessPartConverters(
List<HttpMessageConverter<?>> converters) {
converters.removeIf(
converter -> converter instanceof MappingJackson2XmlHttpMessageConverter);
converters.removeIf((
converter) -> converter instanceof MappingJackson2XmlHttpMessageConverter);
return converters;
}
};
List<Class<?>> converterClasses = new ArrayList<>();
for (HttpMessageConverter<?> converter : extractFormPartConverters(

View File

@ -65,9 +65,9 @@ public abstract class AbstractJpaAutoConfigurationTests {
this.autoConfiguredClass = autoConfiguredClass;
this.contextRunner = new ApplicationContextRunner()
.withPropertyValues("spring.datasource.generate-unique-name=true")
.withUserConfiguration(TestConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class,
TransactionAutoConfiguration.class, autoConfiguredClass));
.withUserConfiguration(TestConfiguration.class).withConfiguration(
AutoConfigurations.of(DataSourceAutoConfiguration.class,
TransactionAutoConfiguration.class, autoConfiguredClass));
}
protected ApplicationContextRunner contextRunner() {
@ -76,15 +76,17 @@ public abstract class AbstractJpaAutoConfigurationTests {
@Test
public void dataSourceIsNotAvailable() {
new ApplicationContextRunner().withConfiguration(AutoConfigurations.of(
this.autoConfiguredClass)).run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.isInstanceOf(BeanCreationException.class);
assertThat(context.getStartupFailure())
.hasMessageContaining("No qualifying bean");
assertThat(context.getStartupFailure()).hasMessageContaining("DataSource");
});
new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(this.autoConfiguredClass))
.run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.isInstanceOf(BeanCreationException.class);
assertThat(context.getStartupFailure())
.hasMessageContaining("No qualifying bean");
assertThat(context.getStartupFailure())
.hasMessageContaining("DataSource");
});
}
@Test
@ -97,13 +99,15 @@ public abstract class AbstractJpaAutoConfigurationTests {
@Test
public void jtaTransactionManagerTakesPrecedence() {
this.contextRunner.withConfiguration(AutoConfigurations.of(
DataSourceTransactionManagerAutoConfiguration.class)).run((context) -> {
assertThat(context).hasSingleBean(DataSource.class);
assertThat(context).hasSingleBean(JpaTransactionManager.class);
assertThat(context).getBean("transactionManager")
.isInstanceOf(JpaTransactionManager.class);
});
this.contextRunner
.withConfiguration(AutoConfigurations
.of(DataSourceTransactionManagerAutoConfiguration.class))
.run((context) -> {
assertThat(context).hasSingleBean(DataSource.class);
assertThat(context).hasSingleBean(JpaTransactionManager.class);
assertThat(context).getBean("transactionManager")
.isInstanceOf(JpaTransactionManager.class);
});
}
@Test
@ -111,7 +115,8 @@ public abstract class AbstractJpaAutoConfigurationTests {
new WebApplicationContextRunner()
.withPropertyValues("spring.datasource.generate-unique-name=true")
.withUserConfiguration(TestConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class,
.withConfiguration(AutoConfigurations.of(
DataSourceAutoConfiguration.class,
TransactionAutoConfiguration.class, this.autoConfiguredClass))
.run((context) -> assertThat(context)
.hasSingleBean(OpenEntityManagerInViewInterceptor.class));
@ -122,7 +127,8 @@ public abstract class AbstractJpaAutoConfigurationTests {
new WebApplicationContextRunner()
.withPropertyValues("spring.datasource.generate-unique-name=true")
.withUserConfiguration(TestFilterConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class,
.withConfiguration(AutoConfigurations.of(
DataSourceAutoConfiguration.class,
TransactionAutoConfiguration.class, this.autoConfiguredClass))
.run((context) -> assertThat(context)
.doesNotHaveBean(OpenEntityManagerInViewInterceptor.class));
@ -131,11 +137,11 @@ public abstract class AbstractJpaAutoConfigurationTests {
@Test
public void openEntityManagerInViewInterceptorISNotRegisteredWhenExplicitlyOff() {
new WebApplicationContextRunner()
.withPropertyValues(
"spring.datasource.generate-unique-name=true",
.withPropertyValues("spring.datasource.generate-unique-name=true",
"spring.jpa.open-in-view=false")
.withUserConfiguration(TestConfiguration.class)
.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class,
.withConfiguration(AutoConfigurations.of(
DataSourceAutoConfiguration.class,
TransactionAutoConfiguration.class, this.autoConfiguredClass))
.run((context) -> assertThat(context)
.doesNotHaveBean(OpenEntityManagerInViewInterceptor.class));
@ -143,69 +149,72 @@ public abstract class AbstractJpaAutoConfigurationTests {
@Test
public void customJpaProperties() {
this.contextRunner.withPropertyValues("spring.jpa.properties.a:b",
"spring.jpa.properties.a.b:c",
"spring.jpa.properties.c:d").run((context) -> {
LocalContainerEntityManagerFactoryBean bean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Map<String, Object> map = bean.getJpaPropertyMap();
assertThat(map.get("a")).isEqualTo("b");
assertThat(map.get("c")).isEqualTo("d");
assertThat(map.get("a.b")).isEqualTo("c");
});
this.contextRunner
.withPropertyValues("spring.jpa.properties.a:b",
"spring.jpa.properties.a.b:c", "spring.jpa.properties.c:d")
.run((context) -> {
LocalContainerEntityManagerFactoryBean bean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Map<String, Object> map = bean.getJpaPropertyMap();
assertThat(map.get("a")).isEqualTo("b");
assertThat(map.get("c")).isEqualTo("d");
assertThat(map.get("a.b")).isEqualTo("c");
});
}
@Test
public void usesManuallyDefinedLocalContainerEntityManagerFactoryBeanIfAvailable() {
this.contextRunner.withUserConfiguration(
TestConfigurationWithLocalContainerEntityManagerFactoryBean.class
).run((context) -> {
LocalContainerEntityManagerFactoryBean factoryBean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Map<String, Object> map = factoryBean.getJpaPropertyMap();
assertThat(map.get("configured")).isEqualTo("manually");
});
this.contextRunner
.withUserConfiguration(
TestConfigurationWithLocalContainerEntityManagerFactoryBean.class)
.run((context) -> {
LocalContainerEntityManagerFactoryBean factoryBean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Map<String, Object> map = factoryBean.getJpaPropertyMap();
assertThat(map.get("configured")).isEqualTo("manually");
});
}
@Test
public void usesManuallyDefinedEntityManagerFactoryIfAvailable() {
this.contextRunner.withUserConfiguration(
TestConfigurationWithLocalContainerEntityManagerFactoryBean.class
).run((context) -> {
EntityManagerFactory factoryBean = context
.getBean(EntityManagerFactory.class);
Map<String, Object> map = factoryBean.getProperties();
assertThat(map.get("configured")).isEqualTo("manually");
});
this.contextRunner
.withUserConfiguration(
TestConfigurationWithLocalContainerEntityManagerFactoryBean.class)
.run((context) -> {
EntityManagerFactory factoryBean = context
.getBean(EntityManagerFactory.class);
Map<String, Object> map = factoryBean.getProperties();
assertThat(map.get("configured")).isEqualTo("manually");
});
}
@Test
public void usesManuallyDefinedTransactionManagerBeanIfAvailable() {
this.contextRunner.withUserConfiguration(
TestConfigurationWithTransactionManager.class
).run((context) -> {
PlatformTransactionManager txManager = context
.getBean(PlatformTransactionManager.class);
assertThat(txManager).isInstanceOf(CustomJpaTransactionManager.class);
});
this.contextRunner
.withUserConfiguration(TestConfigurationWithTransactionManager.class)
.run((context) -> {
PlatformTransactionManager txManager = context
.getBean(PlatformTransactionManager.class);
assertThat(txManager).isInstanceOf(CustomJpaTransactionManager.class);
});
}
@Test
public void customPersistenceUnitManager() {
this.contextRunner.withUserConfiguration(
TestConfigurationWithCustomPersistenceUnitManager.class
).run((context) -> {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Field field = LocalContainerEntityManagerFactoryBean.class
.getDeclaredField("persistenceUnitManager");
field.setAccessible(true);
assertThat(field.get(entityManagerFactoryBean))
.isEqualTo(context.getBean(PersistenceUnitManager.class));
});
this.contextRunner
.withUserConfiguration(
TestConfigurationWithCustomPersistenceUnitManager.class)
.run((context) -> {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = context
.getBean(LocalContainerEntityManagerFactoryBean.class);
Field field = LocalContainerEntityManagerFactoryBean.class
.getDeclaredField("persistenceUnitManager");
field.setAccessible(true);
assertThat(field.get(entityManagerFactoryBean))
.isEqualTo(context.getBean(PersistenceUnitManager.class));
});
}
@Configuration
@TestAutoConfigurationPackage(City.class)
protected static class TestConfiguration {

View File

@ -70,15 +70,15 @@ public class HibernateJpaAutoConfigurationTests
@Test
public void testDataScriptWithMissingDdl() {
contextRunner().withPropertyValues(
"spring.datasource.data:classpath:/city.sql",
contextRunner().withPropertyValues("spring.datasource.data:classpath:/city.sql",
// Missing:
"spring.datasource.schema:classpath:/ddl.sql").run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure()).hasMessageContaining("ddl.sql");
assertThat(context.getStartupFailure())
.hasMessageContaining("spring.datasource.schema");
});
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.hasMessageContaining("ddl.sql");
assertThat(context.getStartupFailure())
.hasMessageContaining("spring.datasource.schema");
});
}
@Test
@ -86,12 +86,12 @@ public class HibernateJpaAutoConfigurationTests
// This can't succeed because the data SQL is executed immediately after the
// schema
// and Hibernate hasn't initialized yet at that point
contextRunner().withPropertyValues(
"spring.datasource.data:classpath:/city.sql").run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.isInstanceOf(BeanCreationException.class);
});
contextRunner().withPropertyValues("spring.datasource.data:classpath:/city.sql")
.run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.isInstanceOf(BeanCreationException.class);
});
}
@Test
@ -100,9 +100,10 @@ public class HibernateJpaAutoConfigurationTests
.withClassLoader(new HideDataScriptClassLoader())
.withPropertyValues("spring.jpa.show-sql=true",
"spring.jpa.hibernate.ddl-auto:create-drop",
"spring.datasource.data:classpath:/city.sql").run((context) ->
assertThat(context.getBean(TestInitializedJpaConfiguration.class).called)
.isTrue());
"spring.datasource.data:classpath:/city.sql")
.run((context) -> assertThat(
context.getBean(TestInitializedJpaConfiguration.class).called)
.isTrue());
}
@Test
@ -111,7 +112,7 @@ public class HibernateJpaAutoConfigurationTests
.withPropertyValues("spring.datasource.initialize:false",
"spring.flyway.locations:classpath:db/city")
.withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class))
.run(context -> assertThat(context).hasNotFailed());
.run((context) -> assertThat(context).hasNotFailed());
}
@Test
@ -121,7 +122,7 @@ public class HibernateJpaAutoConfigurationTests
"spring.flyway.locations:classpath:db/city",
"spring.jpa.hibernate.ddl-auto:validate")
.withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class))
.run(context -> assertThat(context).hasNotFailed());
.run((context) -> assertThat(context).hasNotFailed());
}
@Test
@ -130,20 +131,22 @@ public class HibernateJpaAutoConfigurationTests
.withPropertyValues("spring.datasource.initialize:false",
"spring.liquibase.changeLog:classpath:db/changelog/db.changelog-city.yaml",
"spring.jpa.hibernate.ddl-auto:validate")
.withConfiguration(AutoConfigurations.of(LiquibaseAutoConfiguration.class))
.run(context -> assertThat(context).hasNotFailed());
.withConfiguration(
AutoConfigurations.of(LiquibaseAutoConfiguration.class))
.run((context) -> assertThat(context).hasNotFailed());
}
@Test
public void jtaDefaultPlatform() {
contextRunner().withConfiguration(AutoConfigurations.of(
JtaAutoConfiguration.class)).run((context) -> {
Map<String, Object> jpaPropertyMap = context
.getBean(LocalContainerEntityManagerFactoryBean.class)
.getJpaPropertyMap();
assertThat(jpaPropertyMap.get("hibernate.transaction.jta.platform"))
.isInstanceOf(SpringJtaPlatform.class);
});
contextRunner()
.withConfiguration(AutoConfigurations.of(JtaAutoConfiguration.class))
.run((context) -> {
Map<String, Object> jpaPropertyMap = context
.getBean(LocalContainerEntityManagerFactoryBean.class)
.getJpaPropertyMap();
assertThat(jpaPropertyMap.get("hibernate.transaction.jta.platform"))
.isInstanceOf(SpringJtaPlatform.class);
});
}
@Test
@ -152,25 +155,28 @@ public class HibernateJpaAutoConfigurationTests
.withPropertyValues(
"spring.jpa.properties.hibernate.transaction.jta.platform:"
+ TestJtaPlatform.class.getName())
.withConfiguration(AutoConfigurations.of(
JtaAutoConfiguration.class)).run((context) -> {
Map<String, Object> jpaPropertyMap = context
.getBean(LocalContainerEntityManagerFactoryBean.class)
.getJpaPropertyMap();
assertThat((String) jpaPropertyMap.get("hibernate.transaction.jta.platform"))
.isEqualTo(TestJtaPlatform.class.getName());
});
.withConfiguration(AutoConfigurations.of(JtaAutoConfiguration.class))
.run((context) -> {
Map<String, Object> jpaPropertyMap = context
.getBean(LocalContainerEntityManagerFactoryBean.class)
.getJpaPropertyMap();
assertThat((String) jpaPropertyMap
.get("hibernate.transaction.jta.platform"))
.isEqualTo(TestJtaPlatform.class.getName());
});
}
@Test
public void jtaCustomTransactionManagerUsingProperties() {
contextRunner().withPropertyValues("spring.transaction.default-timeout:30",
"spring.transaction.rollback-on-commit-failure:true").run((context) -> {
JpaTransactionManager transactionManager = context
.getBean(JpaTransactionManager.class);
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
});
contextRunner()
.withPropertyValues("spring.transaction.default-timeout:30",
"spring.transaction.rollback-on-commit-failure:true")
.run((context) -> {
JpaTransactionManager transactionManager = context
.getBean(JpaTransactionManager.class);
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(30);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
});
}
@Configuration

View File

@ -149,7 +149,7 @@ public class TestRestTemplate {
}
interceptors = new ArrayList<>(interceptors);
interceptors.removeIf(
interceptor -> interceptor instanceof BasicAuthorizationInterceptor);
(interceptor) -> interceptor instanceof BasicAuthorizationInterceptor);
interceptors.add(new BasicAuthorizationInterceptor(username, password));
restTemplate.setInterceptors(interceptors);
}

View File

@ -148,7 +148,7 @@ public class ConfigurationMetadata {
if (candidates == null || candidates.isEmpty()) {
return null;
}
candidates.removeIf(itemMetadata -> !itemMetadata.hasSameType(metadata));
candidates.removeIf((itemMetadata) -> !itemMetadata.hasSameType(metadata));
if (candidates.size() == 1) {
return candidates.get(0);
}

View File

@ -40,9 +40,8 @@ class CollectionBinder extends IndexedElementsBinder<Collection<Object>> {
AggregateElementBinder elementBinder) {
Class<?> collectionType = (target.getValue() == null ? target.getType().resolve()
: List.class);
IndexedCollectionSupplier collection = new IndexedCollectionSupplier(() -> {
return CollectionFactory.createCollection(collectionType, 0);
});
IndexedCollectionSupplier collection = new IndexedCollectionSupplier(
() -> CollectionFactory.createCollection(collectionType, 0));
ResolvableType elementType = target.getType().asCollection().getGeneric();
ResolvableType aggregateType = ResolvableType.forClassWithGenerics(List.class,
target.getType().asCollection().getGenerics());

View File

@ -95,9 +95,8 @@ public class ValidationErrors implements Iterable<ObjectError> {
private boolean isForError(ConfigurationPropertyName name,
ConfigurationPropertyName boundPropertyName, FieldError error) {
return name.isParentOf(boundPropertyName)
&& boundPropertyName.getLastElement(Form.UNIFORM)
.equalsIgnoreCase(error.getField());
return name.isParentOf(boundPropertyName) && boundPropertyName
.getLastElement(Form.UNIFORM).equalsIgnoreCase(error.getField());
}
/**