diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/JsonItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/JsonItemReader.java index 5599191d39..f5f15809a8 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/JsonItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/JsonItemReader.java @@ -73,6 +73,9 @@ public JsonItemReader(Resource resource, JsonObjectReader jsonObjectReader) { this.jsonObjectReader = jsonObjectReader; setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class)); } + public JsonItemReader(){ + setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class)); + } /** * Set the {@link JsonObjectReader} to use to read and map Json fragments to domain objects. diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilder.java index 92bb485a9f..9b9f2848af 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilder.java @@ -140,12 +140,13 @@ public JsonItemReaderBuilder currentItemCount(int currentItemCount) { */ public JsonItemReader build() { Assert.notNull(this.jsonObjectReader, "A json object reader is required."); - Assert.notNull(this.resource, "A resource is required."); if (this.saveState) { Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true."); } - JsonItemReader reader = new JsonItemReader<>(this.resource, this.jsonObjectReader); + JsonItemReader reader = new JsonItemReader<>(); + reader.setResource(this.resource); + reader.setJsonObjectReader(this.jsonObjectReader); reader.setName(this.name); reader.setStrict(this.strict); reader.setSaveState(this.saveState); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilderTest.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilderTest.java index f5506e7279..443402e95e 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilderTest.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilderTest.java @@ -57,17 +57,6 @@ public void testValidation() { iae.getMessage()); } - try { - new JsonItemReaderBuilder() - .jsonObjectReader(this.jsonObjectReader) - .build(); - fail("A resource is required."); - } - catch (IllegalArgumentException iae) { - assertEquals("A resource is required.", - iae.getMessage()); - } - try { new JsonItemReaderBuilder() .jsonObjectReader(this.jsonObjectReader) @@ -102,4 +91,24 @@ public void testConfiguration() { Object executionContext = getField(itemReader, "executionContextUserSupport"); Assert.assertEquals("jsonItemReader", getField(executionContext, "name")); } + @Test + public void shouldBuildJsonItemReaderWhenResourceIsNotProvided(){ + JsonItemReader itemReader = new JsonItemReaderBuilder() + .jsonObjectReader(this.jsonObjectReader) + .saveState(true) + .strict(true) + .name("jsonItemReader") + .maxItemCount(100) + .currentItemCount(50) + .build(); + + Assert.assertEquals(this.jsonObjectReader, getField(itemReader, "jsonObjectReader")); + Assert.assertEquals(100, getField(itemReader, "maxItemCount")); + Assert.assertEquals(50, getField(itemReader, "currentItemCount")); + Assert.assertTrue((Boolean) getField(itemReader, "saveState")); + Assert.assertTrue((Boolean) getField(itemReader, "strict")); + Object executionContext = getField(itemReader, "executionContextUserSupport"); + Assert.assertEquals("jsonItemReader", getField(executionContext, "name")); + + } }