From 3dad936b6dbb4468873fe725beea0361ff221383 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Wed, 4 Feb 2026 16:25:17 +0100 Subject: [PATCH 1/2] Fix Jackson deserialization pb Signed-off-by: Franck LECUYER --- .../monitor/server/services/ConsumerService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java index f2ea5fc..bbbd33e 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java @@ -7,6 +7,7 @@ package org.gridsuite.monitor.server.services; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.gridsuite.monitor.commons.MessageType; import org.gridsuite.monitor.commons.ProcessExecutionStatusUpdate; @@ -71,7 +72,7 @@ private void handleStepStatusUpdate(UUID executionId, Message message) { } private void handleStepsStatusesUpdate(UUID executionId, Message message) { - List processExecutionSteps = parsePayload(message.getPayload(), List.class); + List processExecutionSteps = parsePayload(message.getPayload(), new TypeReference>() { }); monitorService.updateStepsStatuses(executionId, processExecutionSteps); } @@ -82,4 +83,12 @@ private T parsePayload(String payload, Class clazz) { throw new UncheckedIOException("Failed to parse payload as " + clazz.getSimpleName(), e); } } + + private T parsePayload(String payload, TypeReference typeReference) { + try { + return objectMapper.readValue(payload, typeReference); + } catch (JsonProcessingException e) { + throw new UncheckedIOException("Failed to parse payload", e); + } + } } From bbaef7ec6a7aaaf51db7daf52e3f2de552de12b2 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Wed, 4 Feb 2026 16:48:33 +0100 Subject: [PATCH 2/2] Improve coverage Signed-off-by: Franck LECUYER --- .../server/services/ConsumerService.java | 2 +- .../server/services/ConsumerServiceTest.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java index bbbd33e..d134038 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ConsumerService.java @@ -88,7 +88,7 @@ private T parsePayload(String payload, TypeReference typeReference) { try { return objectMapper.readValue(payload, typeReference); } catch (JsonProcessingException e) { - throw new UncheckedIOException("Failed to parse payload", e); + throw new UncheckedIOException("Failed to parse payload as " + typeReference.getType().getTypeName(), e); } } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ConsumerServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ConsumerServiceTest.java index ac13844..ffb86b8 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ConsumerServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ConsumerServiceTest.java @@ -99,6 +99,24 @@ void consumeMonitorUpdateThrowsOnInvalidJson() { verify(monitorService, never()).updateStepStatus(any(), any()); } + @Test + void consumeMonitorUpdateStepsStatusesThrowsOnInvalidJson() { + UUID executionId = UUID.randomUUID(); + String invalidPayload = "{invalid json}"; + Map headers = new HashMap<>(); + headers.put(ConsumerService.HEADER_MESSAGE_TYPE, MessageType.STEPS_STATUSES_UPDATE.toString()); + headers.put(ConsumerService.HEADER_EXECUTION_ID, executionId.toString()); + Message message = new GenericMessage<>(invalidPayload, headers); + Consumer> consumer = consumerService.consumeMonitorUpdate(); + + assertThatThrownBy(() -> consumer.accept(message)) + .isInstanceOf(UncheckedIOException.class) + .hasMessageContaining("Failed to parse payload as java.util.List"); + + verify(monitorService, never()).updateExecutionStatus(any(), any(), any(), any(), any()); + verify(monitorService, never()).updateStepsStatuses(any(), any()); + } + @Test void consumeProcessExecutionStepUpdateMessage() throws JsonProcessingException { UUID executionId = UUID.randomUUID();