From fec3d57f22febe2c2d872ab1dc53a33336896ea2 Mon Sep 17 00:00:00 2001 From: jpraet Date: Sun, 9 Mar 2014 14:24:41 +0100 Subject: [PATCH] BATCH-1896 --- .../item/file/transform/DefaultFieldSet.java | 24 +++++--------- .../file/transform/DefaultFieldSetTests.java | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java index d6d1af5ea..be753f181 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java @@ -541,12 +541,8 @@ public class DefaultFieldSet implements FieldSet { */ @Override public Date readDate(int index, Date defaultValue) { - try { - return readDate(index); - } - catch (IllegalArgumentException e) { - return defaultValue; - } + String candidate = readAndTrim(index); + return StringUtils.hasText(candidate) ? parseDate(candidate, dateFormat) : defaultValue; } /* @@ -575,10 +571,10 @@ public class DefaultFieldSet implements FieldSet { @Override public Date readDate(String name, Date defaultValue) { try { - return readDate(name); + return readDate(indexOf(name), defaultValue); } catch (IllegalArgumentException e) { - return defaultValue; + throw new IllegalArgumentException(e.getMessage() + ", name: [" + name + "]"); } } @@ -603,12 +599,8 @@ public class DefaultFieldSet implements FieldSet { */ @Override public Date readDate(int index, String pattern, Date defaultValue) { - try { - return readDate(index, pattern); - } - catch (IllegalArgumentException e) { - return defaultValue; - } + String candidate = readAndTrim(index); + return StringUtils.hasText(candidate) ? readDate(index, pattern) : defaultValue; } /* @@ -637,10 +629,10 @@ public class DefaultFieldSet implements FieldSet { @Override public Date readDate(String name, String pattern, Date defaultValue) { try { - return readDate(name, pattern); + return readDate(indexOf(name), pattern, defaultValue); } catch (IllegalArgumentException e) { - return defaultValue; + throw new IllegalArgumentException(e.getMessage() + ", name: [" + name + "]"); } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DefaultFieldSetTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DefaultFieldSetTests.java index 2ed6ca9ec..68062f16c 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DefaultFieldSetTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DefaultFieldSetTests.java @@ -430,6 +430,37 @@ public class DefaultFieldSetTests { assertEquals(date, fieldSet.readDate("BlankInput", "dd-MM-yyyy", date)); } + @Test + public void testReadDateInvalidWithDefault() throws Exception { + Date defaultDate = new Date(); + try { + fieldSet.readDate(1, defaultDate); + fail("Should throw IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().indexOf("yyyy-MM-dd") > 0); + } + try { + fieldSet.readDate("String", defaultDate); + fail("Should throw IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().indexOf("yyyy-MM-dd") > 0); + assertTrue(e.getMessage().indexOf("name: [String]") > 0); + } + try { + fieldSet.readDate(1, "dd-MM-yyyy", defaultDate); + fail("Should throw IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().indexOf("dd-MM-yyyy") > 0); + } + try { + fieldSet.readDate("String", "dd-MM-yyyy", defaultDate); + fail("Should throw IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().indexOf("dd-MM-yyyy") > 0); + assertTrue(e.getMessage().indexOf("name: [String]") > 0); + } + } + @Test public void testStrictReadDateWithPattern() throws Exception {