Skip to content

Commit 52ce019

Browse files
Santiago Molanofmbenhassine
Santiago Molano
authored andcommitted
Add support to build JsonItemReader when no Resource is provided
Resolves #3731
1 parent fed528e commit 52ce019

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/JsonItemReader.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ public JsonItemReader(Resource resource, JsonObjectReader<T> jsonObjectReader) {
7373
this.jsonObjectReader = jsonObjectReader;
7474
setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class));
7575
}
76+
public JsonItemReader(){
77+
setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class));
78+
}
7679

7780
/**
7881
* Set the {@link JsonObjectReader} to use to read and map Json fragments to domain objects.

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,13 @@ public JsonItemReaderBuilder<T> currentItemCount(int currentItemCount) {
140140
*/
141141
public JsonItemReader<T> build() {
142142
Assert.notNull(this.jsonObjectReader, "A json object reader is required.");
143-
Assert.notNull(this.resource, "A resource is required.");
144143
if (this.saveState) {
145144
Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true.");
146145
}
147146

148-
JsonItemReader<T> reader = new JsonItemReader<>(this.resource, this.jsonObjectReader);
147+
JsonItemReader<T> reader = new JsonItemReader<>();
148+
reader.setResource(this.resource);
149+
reader.setJsonObjectReader(this.jsonObjectReader);
149150
reader.setName(this.name);
150151
reader.setStrict(this.strict);
151152
reader.setSaveState(this.saveState);

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/json/builder/JsonItemReaderBuilderTest.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,6 @@ public void testValidation() {
5757
iae.getMessage());
5858
}
5959

60-
try {
61-
new JsonItemReaderBuilder<String>()
62-
.jsonObjectReader(this.jsonObjectReader)
63-
.build();
64-
fail("A resource is required.");
65-
}
66-
catch (IllegalArgumentException iae) {
67-
assertEquals("A resource is required.",
68-
iae.getMessage());
69-
}
70-
7160
try {
7261
new JsonItemReaderBuilder<String>()
7362
.jsonObjectReader(this.jsonObjectReader)
@@ -102,4 +91,24 @@ public void testConfiguration() {
10291
Object executionContext = getField(itemReader, "executionContextUserSupport");
10392
Assert.assertEquals("jsonItemReader", getField(executionContext, "name"));
10493
}
94+
@Test
95+
public void shouldBuildJsonItemReaderWhenResourceIsNotProvided(){
96+
JsonItemReader<String> itemReader = new JsonItemReaderBuilder<String>()
97+
.jsonObjectReader(this.jsonObjectReader)
98+
.saveState(true)
99+
.strict(true)
100+
.name("jsonItemReader")
101+
.maxItemCount(100)
102+
.currentItemCount(50)
103+
.build();
104+
105+
Assert.assertEquals(this.jsonObjectReader, getField(itemReader, "jsonObjectReader"));
106+
Assert.assertEquals(100, getField(itemReader, "maxItemCount"));
107+
Assert.assertEquals(50, getField(itemReader, "currentItemCount"));
108+
Assert.assertTrue((Boolean) getField(itemReader, "saveState"));
109+
Assert.assertTrue((Boolean) getField(itemReader, "strict"));
110+
Object executionContext = getField(itemReader, "executionContextUserSupport");
111+
Assert.assertEquals("jsonItemReader", getField(executionContext, "name"));
112+
113+
}
105114
}

0 commit comments

Comments
 (0)