From 554e96206a96318f2acd826ca7a7803a6d72364a Mon Sep 17 00:00:00 2001 From: mhyeon-lee Date: Sat, 1 Nov 2025 02:50:11 +0900 Subject: [PATCH 1/2] fix: merge metadata instead of replacing in TaskManager.TaskStatusUpdateEvent #426 --- .../src/main/java/io/a2a/server/tasks/TaskManager.java | 6 +++++- .../test/java/io/a2a/server/tasks/TaskManagerTest.java | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/server-common/src/main/java/io/a2a/server/tasks/TaskManager.java b/server-common/src/main/java/io/a2a/server/tasks/TaskManager.java index 523b9346f..d72b8409c 100644 --- a/server-common/src/main/java/io/a2a/server/tasks/TaskManager.java +++ b/server-common/src/main/java/io/a2a/server/tasks/TaskManager.java @@ -5,7 +5,9 @@ import static io.a2a.util.Utils.appendArtifactToTask; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import io.a2a.spec.A2AServerException; import io.a2a.spec.Artifact; @@ -78,7 +80,9 @@ Task saveTaskEvent(TaskStatusUpdateEvent event) throws A2AServerException { // Handle metadata from the event if (event.getMetadata() != null) { - builder.metadata(event.getMetadata()); + Map metadata = task.getMetadata() == null ? new HashMap<>() : new HashMap<>(task.getMetadata()); + metadata.putAll(event.getMetadata()); + builder.metadata(metadata); } task = builder.build(); diff --git a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java index 25b5ead11..15e456613 100644 --- a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java +++ b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java @@ -588,7 +588,7 @@ public void testSaveTaskEventMetadataUpdateNull() throws A2AServerException { } @Test - public void testSaveTaskEventMetadataUpdateOverwritesExisting() throws A2AServerException { + public void testSaveTaskEventMetadataMergeExisting() throws A2AServerException { // Test that metadata update overwrites existing metadata Map originalMetadata = new HashMap<>(); originalMetadata.put("original_key", "original_value"); @@ -612,8 +612,10 @@ public void testSaveTaskEventMetadataUpdateOverwritesExisting() throws A2AServer taskManager.saveTaskEvent(event); Task updatedTask = taskManager.getTask(); - assertEquals(newMetadata, updatedTask.getMetadata()); - assertNotEquals(originalMetadata, updatedTask.getMetadata()); + + Map mergedMetadata = new HashMap<>(originalMetadata); + mergedMetadata.putAll(newMetadata); + assertEquals(mergedMetadata, updatedTask.getMetadata()); } @Test From 7d7803ce784748e04177e30d03d24ed67a08aa22 Mon Sep 17 00:00:00 2001 From: mhyeon-lee Date: Tue, 4 Nov 2025 00:26:29 +0900 Subject: [PATCH 2/2] Fix comment --- .../src/test/java/io/a2a/server/tasks/TaskManagerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java index 15e456613..95eddd351 100644 --- a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java +++ b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java @@ -589,7 +589,7 @@ public void testSaveTaskEventMetadataUpdateNull() throws A2AServerException { @Test public void testSaveTaskEventMetadataMergeExisting() throws A2AServerException { - // Test that metadata update overwrites existing metadata + // Test that metadata update merges with existing metadata Map originalMetadata = new HashMap<>(); originalMetadata.put("original_key", "original_value");