Skip to content

Commit 0116494

Browse files
quafffmbenhassine
authored andcommitted
Fix serializing JobParameter with Jackson 2
Closes GH-5191 Signed-off-by: Yanming Zhou <[email protected]>
1 parent 9ae7775 commit 0116494

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
*
107107
* @author Marten Deinum
108108
* @author Mahmoud Ben Hassine
109+
* @author Yanming Zhou
109110
* @since 3.0.7
110111
* @see ExecutionContextSerializer
111112
* @deprecated Since 6.0 in favor of {@link JacksonExecutionContextStringSerializer}.
@@ -210,12 +211,16 @@ public void serializeWithType(JobParameter value, JsonGenerator gen, SerializerP
210211
@Override
211212
public void serialize(JobParameter jobParameter, JsonGenerator jsonGenerator,
212213
SerializerProvider serializerProvider) throws IOException {
214+
jsonGenerator.writeStartObject();
215+
jsonGenerator.writeFieldName(NAME_KEY_NAME);
216+
jsonGenerator.writeObject(jobParameter.name());
213217
jsonGenerator.writeFieldName(VALUE_KEY_NAME);
214218
jsonGenerator.writeObject(jobParameter.value());
215219
jsonGenerator.writeFieldName(TYPE_KEY_NAME);
216220
jsonGenerator.writeString(jobParameter.type().getName());
217221
jsonGenerator.writeFieldName(IDENTIFYING_KEY_NAME);
218-
jsonGenerator.writeObject(jobParameter.identifying());
222+
jsonGenerator.writeBoolean(jobParameter.identifying());
223+
jsonGenerator.writeEndObject();
219224
}
220225

221226
}

spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializerTests.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@
3131
import com.fasterxml.jackson.annotation.JsonTypeInfo;
3232
import org.junit.jupiter.api.Test;
3333

34+
import org.springframework.batch.core.job.parameters.JobParameter;
35+
import org.springframework.batch.core.job.parameters.JobParameters;
36+
import org.springframework.batch.core.job.parameters.JobParametersBuilder;
3437
import org.springframework.batch.core.repository.ExecutionContextSerializer;
3538

3639
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
3740
import static org.junit.jupiter.api.Assertions.assertEquals;
41+
import static org.junit.jupiter.api.Assertions.assertFalse;
3842
import static org.junit.jupiter.api.Assertions.assertNotNull;
3943
import static org.junit.jupiter.api.Assertions.assertThrows;
4044
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -43,7 +47,9 @@
4347
* @author Marten Deinum
4448
* @author Michael Minella
4549
* @author Mahmoud Ben Hassine
50+
* @author Yanming Zhou
4651
*/
52+
@SuppressWarnings("removal")
4753
class Jackson2ExecutionContextStringSerializerTests extends AbstractExecutionContextSerializerTests {
4854

4955
private final ExecutionContextSerializer serializer = new Jackson2ExecutionContextStringSerializer(
@@ -174,6 +180,7 @@ public static class UnmappedDomesticNumber extends UnmappedPhoneNumber {
174180
}
175181

176182
@Test
183+
@SuppressWarnings("unchecked")
177184
void arrayAsListSerializationTest() throws IOException {
178185
// given
179186
List<String> list = Arrays.asList("foo", "bar");
@@ -232,4 +239,34 @@ void testJavaTimeLocalDateSerialization() throws IOException {
232239
assertEquals(now, deserializedNow);
233240
}
234241

242+
@Test
243+
void testJobParametersSerialization() throws IOException {
244+
// given
245+
Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer();
246+
LocalDate now = LocalDate.now();
247+
JobParameters jobParameters = new JobParametersBuilder()
248+
.addJobParameter("date", LocalDate.now(), LocalDate.class)
249+
.addJobParameter("foo", "bar", String.class, false)
250+
.toJobParameters();
251+
Map<String, Object> map = new HashMap<>();
252+
map.put("jobParameters", jobParameters);
253+
254+
// when
255+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
256+
serializer.serialize(map, outputStream);
257+
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
258+
Map<String, Object> deserializedContext = serializer.deserialize(inputStream);
259+
260+
// then
261+
JobParameters deserializedJobParameters = (JobParameters) deserializedContext.get("jobParameters");
262+
JobParameter<?> dateJobParameter = deserializedJobParameters.getParameter("date");
263+
assertNotNull(dateJobParameter);
264+
assertEquals(now, dateJobParameter.value());
265+
assertTrue(dateJobParameter.identifying());
266+
JobParameter<?> fooJobParameter = deserializedJobParameters.getParameter("foo");
267+
assertNotNull(fooJobParameter);
268+
assertEquals("bar", fooJobParameter.value());
269+
assertFalse(fooJobParameter.identifying());
270+
}
271+
235272
}

0 commit comments

Comments
 (0)