diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameter.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameter.java index 7a4744e67..9ae360b6d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameter.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameter.java @@ -57,7 +57,7 @@ public class JobParameter implements Serializable { * @param parameter */ public JobParameter(Date parameter) { - this.parameter = new Date(parameter.getTime()); + this.parameter = parameter == null ? null : new Date(parameter.getTime()); parameterType = ParameterType.DATE; } @@ -76,7 +76,7 @@ public class JobParameter implements Serializable { */ public Object getValue() { - if (parameter.getClass().isInstance(Date.class)) { + if (parameter != null && parameter.getClass().isInstance(Date.class)) { return new Date(((Date) parameter).getTime()); } else { @@ -102,16 +102,17 @@ public class JobParameter implements Serializable { } JobParameter rhs = (JobParameter) obj; - return this.parameter.equals(rhs.parameter); + return parameter==null ? rhs.parameter==null && parameterType==rhs.parameterType: parameter.equals(rhs.parameter); } @Override public String toString() { - return parameterType == ParameterType.DATE ? "" + ((Date) parameter).getTime() : parameter.toString(); + return parameter == null ? null : (parameterType == ParameterType.DATE ? "" + ((Date) parameter).getTime() + : parameter.toString()); } public int hashCode() { - return 7 + 21 * parameter.hashCode(); + return 7 + 21 * (parameter == null ? parameterType.hashCode() : parameter.hashCode()); } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java index bc1cdc381..08f752f1d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java @@ -55,7 +55,8 @@ public class JobParameters implements Serializable { * @return The Long value */ public long getLong(String key){ - return ((Long)parameters.get(key).getValue()).longValue(); + Object value = parameters.get(key).getValue(); + return value==null ? 0L : ((Long)value).longValue(); } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java index 8654b1a45..136701b5b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java @@ -62,7 +62,6 @@ public class JobParametersBuilder { * @return a refernece to this object. */ public JobParametersBuilder addString(String key, String parameter) { - Assert.notNull(parameter, "Parameter must not be null."); parameterMap.put(key, new JobParameter(parameter)); return this; } @@ -75,7 +74,6 @@ public class JobParametersBuilder { * @return a refernece to this object. */ public JobParametersBuilder addDate(String key, Date parameter) { - Assert.notNull(parameter, "Parameter must not be null."); parameterMap.put(key, new JobParameter(parameter)); return this; } @@ -88,7 +86,6 @@ public class JobParametersBuilder { * @return a reference to this object. */ public JobParametersBuilder addLong(String key, Long parameter) { - Assert.notNull(parameter, "Parameter must not be null."); parameterMap.put(key, new JobParameter(parameter)); return this; } @@ -101,7 +98,6 @@ public class JobParametersBuilder { * @return a reference to this object. */ public JobParametersBuilder addDouble(String key, Double parameter) { - Assert.notNull(parameter, "Parameter must not be null."); parameterMap.put(key, new JobParameter(parameter)); return this; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParameterTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParameterTests.java index e7b7481bf..f06aadaa9 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParameterTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParameterTests.java @@ -23,6 +23,12 @@ public class JobParameterTests { assertEquals("test", jobParameter.getValue()); } + @Test + public void testNullStringParameter(){ + jobParameter = new JobParameter((String)null); + assertEquals(null, jobParameter.getValue()); + } + @Test public void testLongParameter(){ jobParameter = new JobParameter(1L); @@ -42,6 +48,12 @@ public class JobParameterTests { assertEquals(new Date(0L), jobParameter.getValue()); } + @Test + public void testNullDateParameter(){ + jobParameter = new JobParameter((Date)null); + assertEquals(null, jobParameter.getValue()); + } + @Test public void testDateParameterToString(){ Date epoch = new Date(0L); @@ -56,4 +68,32 @@ public class JobParameterTests { assertTrue(jobParameter.equals(testParameter)); } + @Test + public void testHashcode(){ + jobParameter = new JobParameter("test"); + JobParameter testParameter = new JobParameter("test"); + assertEquals(testParameter.hashCode(), jobParameter.hashCode()); + } + + @Test + public void testEqualsWithNull(){ + jobParameter = new JobParameter((String)null); + JobParameter testParameter = new JobParameter((String)null); + assertTrue(jobParameter.equals(testParameter)); + } + + @Test + public void testEqualsWithNullAndDifferentType(){ + jobParameter = new JobParameter((String)null); + JobParameter testParameter = new JobParameter((Date)null); + assertFalse(jobParameter.equals(testParameter)); + } + + @Test + public void testHashcodeWithNull(){ + jobParameter = new JobParameter((String)null); + JobParameter testParameter = new JobParameter((String)null); + assertEquals(testParameter.hashCode(), jobParameter.hashCode()); + } + } \ No newline at end of file diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java index 8284be0ae..be16ee3c6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java @@ -29,6 +29,16 @@ public class JobParametersBuilderTests extends TestCase { assertEquals("string value", parameters.getString("STRING")); } + public void testNullRuntimeParamters(){ + parametersBuilder.addDate("SCHEDULE_DATE", null); + parametersBuilder.addLong("LONG", null); + parametersBuilder.addString("STRING", null); + JobParameters parameters = parametersBuilder.toJobParameters(); + assertEquals(null, parameters.getDate("SCHEDULE_DATE")); + assertEquals(0L, parameters.getLong("LONG")); + assertEquals(null, parameters.getString("STRING")); + } + public void testCopy(){ parametersBuilder.addString("STRING", "string value"); parametersBuilder = new JobParametersBuilder(parametersBuilder.toJobParameters());