From 4000d1d57925e22634d0632de1c662e665b112e2 Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Mon, 21 Sep 2020 13:14:39 +0200 Subject: [PATCH] Polish contribution --- .../batch/item/json/JsonItemReader.java | 6 ++++ .../json/builder/JsonItemReaderBuilder.java | 12 ++++++- .../builder/JsonItemReaderBuilderTest.java | 35 +++++++++---------- 3 files changed, 34 insertions(+), 19 deletions(-) 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 f5f15809a..9980d3e35 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,10 @@ public class JsonItemReader extends AbstractItemCountingItemStreamItemReader< this.jsonObjectReader = jsonObjectReader; setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class)); } + + /** + * Create a new {@link JsonItemReader} instance. + */ public JsonItemReader(){ setExecutionContextName(ClassUtils.getShortName(JsonItemReader.class)); } @@ -108,6 +112,8 @@ public class JsonItemReader extends AbstractItemCountingItemStreamItemReader< @Override protected void doOpen() throws Exception { + Assert.notNull(this.resource, "The resource must not be null."); + Assert.notNull(this.jsonObjectReader, "The json object reader must not be null."); if (!this.resource.exists()) { if (this.strict) { throw new IllegalStateException("Input resource must exist (reader is in 'strict' mode)"); 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 9b9f2848a..ba752462f 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 @@ -1,5 +1,5 @@ /* - * Copyright 2018 the original author or authors. + * Copyright 2018-2020 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. @@ -16,6 +16,9 @@ package org.springframework.batch.item.json.builder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.batch.item.json.JsonItemReader; import org.springframework.batch.item.json.JsonObjectReader; import org.springframework.core.io.Resource; @@ -32,6 +35,8 @@ import org.springframework.util.StringUtils; */ public class JsonItemReaderBuilder { + protected Log logger = LogFactory.getLog(getClass()); + private JsonObjectReader jsonObjectReader; private Resource resource; @@ -144,6 +149,11 @@ public class JsonItemReaderBuilder { Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true."); } + if (this.resource == null) { + logger.debug("The resource is null. This is only a valid scenario when " + + "injecting it later as in when using the MultiResourceItemReader"); + } + JsonItemReader reader = new JsonItemReader<>(); reader.setResource(this.resource); reader.setJsonObjectReader(this.jsonObjectReader); 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 443402e95..148ab25c5 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 @@ -1,5 +1,5 @@ /* - * Copyright 2018 the original author or authors. + * Copyright 2018-2020 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,7 +60,6 @@ public class JsonItemReaderBuilderTest { try { new JsonItemReaderBuilder() .jsonObjectReader(this.jsonObjectReader) - .resource(this.resource) .build(); fail("A name is required when saveState is set to true."); } @@ -91,24 +90,24 @@ public class JsonItemReaderBuilderTest { 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")); + 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")); } }