Throw IllegalStateException from afterPropertiesSet

Consistently use Assert.state in the afterPropertiesSet()
methods to throw IllegalStateException instead of
IllegalArgumentException when some properties are missing
and/or invalid.

Resolves #2244
This commit is contained in:
Danilo Piazzalunga
2022-02-07 08:17:38 +01:00
committed by Mahmoud Ben Hassine
parent b9d6e26d61
commit fc0ec01ff8
96 changed files with 188 additions and 178 deletions

View File

@@ -278,7 +278,7 @@ public class DefaultJobLoader implements JobLoader, InitializingBean {
@Override
public void afterPropertiesSet() {
Assert.notNull(jobRegistry, "Job registry could not be null.");
Assert.state(jobRegistry != null, "Job registry could not be null.");
}
}

View File

@@ -98,7 +98,7 @@ public class JobRegistryBeanPostProcessor
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(jobRegistry, "JobRegistry must not be null");
Assert.state(jobRegistry != null, "JobRegistry must not be null");
}
/**

View File

@@ -33,6 +33,7 @@ import org.springframework.batch.core.job.flow.support.state.StepState;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
* Convenience factory for {@link SimpleFlow} instances for use in the XML namespace. It
@@ -94,7 +95,7 @@ public class SimpleFlowFactoryBean implements FactoryBean<SimpleFlow>, Initializ
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.hasText(name, "The flow must have a name");
Assert.state(StringUtils.hasText(name), "The flow must have a name");
if (flowType == null) {
flowType = SimpleFlow.class;

View File

@@ -153,7 +153,7 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(dataSource, "DataSource must not be null.");
Assert.state(dataSource != null, "DataSource must not be null.");
if (jdbcOperations == null) {
jdbcOperations = new JdbcTemplate(dataSource);

View File

@@ -128,7 +128,7 @@ public abstract class AbstractJob implements Job, StepLocator, BeanNameAware, In
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(jobRepository, "JobRepository must be set");
Assert.state(jobRepository != null, "JobRepository must be set");
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2011-2018 the original author or authors.
* Copyright 2011-2022 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,8 @@ public class CompositeJobParametersValidator implements JobParametersValidator,
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(validators, "The 'validators' may not be null");
Assert.notEmpty(validators, "The 'validators' may not be empty");
Assert.state(validators != null, "The 'validators' may not be null");
Assert.state(!validators.isEmpty(), "The 'validators' may not be empty");
}
}

View File

@@ -110,10 +110,10 @@ public class SimpleJobOperator implements JobOperator, InitializingBean {
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(jobLauncher, "JobLauncher must be provided");
Assert.notNull(jobRegistry, "JobLocator must be provided");
Assert.notNull(jobExplorer, "JobExplorer must be provided");
Assert.notNull(jobRepository, "JobRepository must be provided");
Assert.state(jobLauncher != null, "JobLauncher must be provided");
Assert.state(jobRegistry != null, "JobLocator must be provided");
Assert.state(jobExplorer != null, "JobExplorer must be provided");
Assert.state(jobRepository != null, "JobRepository must be provided");
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2022 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.
@@ -196,7 +196,7 @@ public abstract class AbstractListenerFactoryBean<T> implements FactoryBean<Obje
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(delegate, "Delegate must not be null");
Assert.state(delegate != null, "Delegate must not be null");
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -25,6 +25,7 @@ import org.springframework.batch.support.PatternMatcher;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
* This class can be used to automatically promote items from the {@link Step}
@@ -77,10 +78,10 @@ public class ExecutionContextPromotionListener implements StepExecutionListener,
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(this.keys, "The 'keys' property must be provided");
Assert.notEmpty(this.keys, "The 'keys' property must not be empty");
Assert.notNull(this.statuses, "The 'statuses' property must be provided");
Assert.notEmpty(this.statuses, "The 'statuses' property must not be empty");
Assert.state(this.keys != null, "The 'keys' property must be provided");
Assert.state(!ObjectUtils.isEmpty(this.keys), "The 'keys' property must not be empty");
Assert.state(this.statuses != null, "The 'statuses' property must be provided");
Assert.state(!ObjectUtils.isEmpty(this.statuses), "The 'statuses' property must not be empty");
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -78,8 +78,8 @@ public class PartitionStep extends AbstractStep {
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(stepExecutionSplitter, "StepExecutionSplitter must be provided");
Assert.notNull(partitionHandler, "PartitionHandler must be provided");
Assert.state(stepExecutionSplitter != null, "StepExecutionSplitter must be provided");
Assert.state(partitionHandler != null, "PartitionHandler must be provided");
super.afterPropertiesSet();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2013 the original author or authors.
* Copyright 2006-2022 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.
@@ -79,7 +79,7 @@ public abstract class AbstractJdbcBatchMetadataDao implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(jdbcTemplate, "JdbcOperations is required");
Assert.state(jdbcTemplate != null, "JdbcOperations is required");
}
}

View File

@@ -138,7 +138,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
Assert.notNull(jobExecutionIncrementer, "The jobExecutionIncrementer must not be null.");
Assert.state(jobExecutionIncrementer != null, "The jobExecutionIncrementer must not be null.");
}
@Override

View File

@@ -311,7 +311,7 @@ public class JdbcJobInstanceDao extends AbstractJdbcBatchMetadataDao implements
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
Assert.notNull(jobInstanceIncrementer, "jobInstanceIncrementer is required");
Assert.state(jobInstanceIncrementer != null, "jobInstanceIncrementer is required");
}
/**

View File

@@ -129,7 +129,7 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
Assert.notNull(stepExecutionIncrementer, "StepExecutionIncrementer cannot be null.");
Assert.state(stepExecutionIncrementer != null, "StepExecutionIncrementer cannot be null.");
}
/**

View File

@@ -178,7 +178,7 @@ public abstract class AbstractJobRepositoryFactoryBean implements FactoryBean<Jo
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(transactionManager, "TransactionManager must not be null.");
Assert.state(transactionManager != null, "TransactionManager must not be null.");
if (this.transactionAttributeSource == null) {
Properties transactionAttributes = new Properties();
transactionAttributes.setProperty("create*",

View File

@@ -199,7 +199,7 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(dataSource, "DataSource must not be null.");
Assert.state(dataSource != null, "DataSource must not be null.");
if (jdbcOperations == null) {
jdbcOperations = new JdbcTemplate(dataSource);
@@ -226,12 +226,12 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i
serializer = defaultSerializer;
}
Assert.isTrue(incrementerFactory.isSupportedIncrementerType(databaseType),
Assert.state(incrementerFactory.isSupportedIncrementerType(databaseType),
() -> "'" + databaseType + "' is an unsupported database type. The supported database types are "
+ StringUtils.arrayToCommaDelimitedString(incrementerFactory.getSupportedIncrementerTypes()));
if (clobType != null) {
Assert.isTrue(isValidTypes(clobType), "lobType must be a value from the java.sql.Types class");
Assert.state(isValidTypes(clobType), "lobType must be a value from the java.sql.Types class");
}
if (this.conversionService == null) {

View File

@@ -99,7 +99,7 @@ public class SimpleChunkProcessor<I, O> implements ChunkProcessor<I>, Initializi
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(itemWriter, "ItemWriter must be set");
Assert.state(itemWriter != null, "ItemWriter must be set");
}
/**

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2019 the original author or authors.
* Copyright 2006-2022 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.
@@ -49,7 +49,7 @@ public class CallableTaskletAdapter implements Tasklet, InitializingBean {
*/
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(callable, "A Callable is required");
Assert.state(callable != null, "A Callable is required");
}
/**

View File

@@ -37,6 +37,8 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* {@link Tasklet} that executes a system command.
@@ -190,14 +192,13 @@ public class SystemCommandTasklet implements StepExecutionListener, StoppableTas
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(commandRunner, "CommandRunner must be set");
Assert.notNull(cmdArray, "'cmdArray' property value must not be null");
Assert.notEmpty(cmdArray, "'cmdArray' property value is required with at least 1 element");
Assert.noNullElements(cmdArray, "'cmdArray' property value must not contain be null elements");
Assert.hasLength(cmdArray[0], "'cmdArray' property value is required with at least 1 element");
Assert.notNull(systemProcessExitCodeMapper, "SystemProcessExitCodeMapper must be set");
Assert.isTrue(timeout > 0, "timeout value must be greater than zero");
Assert.notNull(taskExecutor, "taskExecutor is required");
Assert.state(commandRunner != null, "CommandRunner must be set");
Assert.state(cmdArray != null, "'cmdArray' property value must not be null");
Assert.state(!ObjectUtils.isEmpty(cmdArray), "'cmdArray' property value is required with at least 1 element");
Assert.state(StringUtils.hasText(cmdArray[0]), "'cmdArray' property value is required with at least 1 element");
Assert.state(systemProcessExitCodeMapper != null, "SystemProcessExitCodeMapper must be set");
Assert.state(timeout > 0, "timeout value must be greater than zero");
Assert.state(taskExecutor != null, "taskExecutor is required");
stoppable = jobExplorer != null;
}

View File

@@ -38,7 +38,7 @@ class JobRegistryBeanPostProcessorTests {
@Test
void testInitializationFails() {
Exception exception = assertThrows(IllegalArgumentException.class, processor::afterPropertiesSet);
Exception exception = assertThrows(IllegalStateException.class, processor::afterPropertiesSet);
assertTrue(exception.getMessage().contains("JobRegistry"));
}

View File

@@ -84,7 +84,7 @@ class JobExplorerFactoryBeanTests {
void testMissingDataSource() {
factory.setDataSource(null);
Exception exception = assertThrows(IllegalArgumentException.class, factory::afterPropertiesSet);
Exception exception = assertThrows(IllegalStateException.class, factory::afterPropertiesSet);
String message = exception.getMessage();
assertTrue(message.contains("DataSource"), "Wrong message: " + message);

View File

@@ -41,13 +41,13 @@ class CompositeJobParametersValidatorTests {
@Test
void testValidatorsCanNotBeNull() {
compositeJobParametersValidator.setValidators(null);
assertThrows(IllegalArgumentException.class, compositeJobParametersValidator::afterPropertiesSet);
assertThrows(IllegalStateException.class, compositeJobParametersValidator::afterPropertiesSet);
}
@Test
void testValidatorsCanNotBeEmpty() {
compositeJobParametersValidator.setValidators(new ArrayList<>());
assertThrows(IllegalArgumentException.class, compositeJobParametersValidator::afterPropertiesSet);
assertThrows(IllegalStateException.class, compositeJobParametersValidator::afterPropertiesSet);
}
@Test

View File

@@ -120,7 +120,7 @@ class ExtendedAbstractJobTests {
@Test
void testAfterPropertiesSet() {
job.setJobRepository(null);
Exception exception = assertThrows(IllegalArgumentException.class, () -> job.afterPropertiesSet());
Exception exception = assertThrows(IllegalStateException.class, () -> job.afterPropertiesSet());
assertTrue(exception.getMessage().contains("JobRepository"));
}

View File

@@ -141,7 +141,7 @@ class SimpleJobOperatorTests {
@Test
void testMandatoryProperties() {
jobOperator = new SimpleJobOperator();
assertThrows(IllegalArgumentException.class, jobOperator::afterPropertiesSet);
assertThrows(IllegalStateException.class, jobOperator::afterPropertiesSet);
}
/**

View File

@@ -247,7 +247,7 @@ class ExecutionContextPromotionListenerTests {
void keysMustBeSet() {
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
// didn't set the keys, same as listener.setKeys(null);
assertThrows(IllegalArgumentException.class, listener::afterPropertiesSet);
assertThrows(IllegalStateException.class, listener::afterPropertiesSet);
}
}

View File

@@ -241,7 +241,7 @@ class JobRepositoryFactoryBeanTests {
void testMissingDataSource() {
factory.setDataSource(null);
Exception exception = assertThrows(IllegalArgumentException.class, factory::afterPropertiesSet);
Exception exception = assertThrows(IllegalStateException.class, factory::afterPropertiesSet);
String message = exception.getMessage();
assertTrue(message.contains("DataSource"), "Wrong message: " + message);
@@ -255,7 +255,7 @@ class JobRepositoryFactoryBeanTests {
when(incrementerFactory.isSupportedIncrementerType("mockDb")).thenReturn(true);
when(incrementerFactory.getSupportedIncrementerTypes()).thenReturn(new String[0]);
Exception exception = assertThrows(IllegalArgumentException.class, () -> factory.afterPropertiesSet());
Exception exception = assertThrows(IllegalStateException.class, () -> factory.afterPropertiesSet());
String message = exception.getMessage();
assertTrue(message.contains("TransactionManager"), "Wrong message: " + message);
@@ -268,7 +268,7 @@ class JobRepositoryFactoryBeanTests {
when(incrementerFactory.isSupportedIncrementerType("foo")).thenReturn(false);
when(incrementerFactory.getSupportedIncrementerTypes()).thenReturn(new String[0]);
Exception exception = assertThrows(IllegalArgumentException.class, () -> factory.afterPropertiesSet());
Exception exception = assertThrows(IllegalStateException.class, () -> factory.afterPropertiesSet());
String message = exception.getMessage();
assertTrue(message.contains("foo"), "Wrong message: " + message);
@@ -363,7 +363,7 @@ class JobRepositoryFactoryBeanTests {
@Test
void testInvalidCustomLobType() {
factory.setClobType(Integer.MAX_VALUE);
assertThrows(IllegalArgumentException.class, this::testCreateRepository);
assertThrows(IllegalStateException.class, this::testCreateRepository);
}
@Test

View File

@@ -40,7 +40,7 @@ class CallableTaskletAdapterTests {
@Test
void testAfterPropertiesSet() {
assertThrows(IllegalArgumentException.class, adapter::afterPropertiesSet);
assertThrows(IllegalStateException.class, adapter::afterPropertiesSet);
}
}

View File

@@ -187,7 +187,7 @@ class SystemCommandTaskletIntegrationTests {
@Test
public void testCommandRunnerNotSet() throws Exception {
tasklet.setCommandRunner(null);
assertThrows(IllegalArgumentException.class, tasklet::afterPropertiesSet);
assertThrows(IllegalStateException.class, tasklet::afterPropertiesSet);
}
/*
@@ -196,10 +196,10 @@ class SystemCommandTaskletIntegrationTests {
@Test
void testCommandNotSet() {
tasklet.setCommand(null);
assertThrows(IllegalArgumentException.class, tasklet::afterPropertiesSet);
assertThrows(IllegalStateException.class, tasklet::afterPropertiesSet);
tasklet.setCommand("");
assertThrows(IllegalArgumentException.class, tasklet::afterPropertiesSet);
assertThrows(IllegalStateException.class, tasklet::afterPropertiesSet);
}
/*
@@ -209,7 +209,7 @@ class SystemCommandTaskletIntegrationTests {
void testTimeoutNotSet() {
tasklet.setCommand("not-empty placeholder");
tasklet.setTimeout(0);
assertThrows(IllegalArgumentException.class, tasklet::afterPropertiesSet);
assertThrows(IllegalStateException.class, tasklet::afterPropertiesSet);
}
/*

View File

@@ -76,7 +76,7 @@ public class DataSourceInitializer implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(dataSource, "A DataSource is required");
Assert.state(dataSource != null, "A DataSource is required");
initialize();
}