From 0e7215abb40ddf8253ae32d640cf47e76055d96b Mon Sep 17 00:00:00 2001 From: mhyeon-lee Date: Thu, 29 Jan 2026 23:06:27 +0900 Subject: [PATCH 1/2] fix: merge metadata appendArtifactToTask metadata --- .../java/io/a2a/server/tasks/TaskManagerTest.java | 5 +++++ spec/src/main/java/io/a2a/util/Utils.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) 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 f14ebc0fe..b01dda050 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 @@ -190,6 +190,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A .artifactId("artifact-id") .name("artifact-1") .parts(Collections.singletonList(new TextPart("existing content"))) + .metadata(Map.of("key1", "value1")) .build(); Task taskWithArtifact = Task.builder(initialTask) .artifacts(Collections.singletonList(existingArtifact)) @@ -201,6 +202,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A .artifactId("artifact-id") .name("artifact-1") .parts(Collections.singletonList(new TextPart("new content"))) + .metadata(Map.of("key2", "value2")) .build(); TaskArtifactUpdateEvent event = TaskArtifactUpdateEvent.builder() .taskId(minimalTask.id()) @@ -217,6 +219,9 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A assertEquals(2, updatedArtifact.parts().size()); assertEquals("existing content", ((TextPart) updatedArtifact.parts().get(0)).text()); assertEquals("new content", ((TextPart) updatedArtifact.parts().get(1)).text()); + + assertEquals("value1", updatedArtifact.metadata().get("key1")); + assertEquals("value2", updatedArtifact.metadata().get("key2")); } @Test diff --git a/spec/src/main/java/io/a2a/util/Utils.java b/spec/src/main/java/io/a2a/util/Utils.java index 792365579..c61784205 100644 --- a/spec/src/main/java/io/a2a/util/Utils.java +++ b/spec/src/main/java/io/a2a/util/Utils.java @@ -3,7 +3,9 @@ import static io.a2a.util.Assert.checkNotNullParam; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Logger; import com.google.gson.Gson; @@ -129,8 +131,18 @@ public static Task appendArtifactToTask(Task task, TaskArtifactUpdateEvent event log.fine(String.format("Appending parts to artifact id %s for task %s", artifactId, taskId)); List> parts = new ArrayList<>(existingArtifact.parts()); parts.addAll(newArtifact.parts()); + + Map metadata = new HashMap<>(); + if (existingArtifact.metadata() != null) { + metadata.putAll(existingArtifact.metadata()); + } + if (newArtifact.metadata() != null) { + metadata.putAll(newArtifact.metadata()); + } + Artifact updated = Artifact.builder(existingArtifact) .parts(parts) + .metadata(metadata) .build(); artifacts.set(existingArtifactIndex, updated); } else { From 253d06840b0e7463b2c604624aa6ba6886fd5406 Mon Sep 17 00:00:00 2001 From: mhyeon-lee Date: Fri, 6 Feb 2026 12:01:16 +0900 Subject: [PATCH 2/2] Fix mergedMetadata maintain null --- spec/src/main/java/io/a2a/util/Utils.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/spec/src/main/java/io/a2a/util/Utils.java b/spec/src/main/java/io/a2a/util/Utils.java index c61784205..44d713f75 100644 --- a/spec/src/main/java/io/a2a/util/Utils.java +++ b/spec/src/main/java/io/a2a/util/Utils.java @@ -132,17 +132,20 @@ public static Task appendArtifactToTask(Task task, TaskArtifactUpdateEvent event List> parts = new ArrayList<>(existingArtifact.parts()); parts.addAll(newArtifact.parts()); - Map metadata = new HashMap<>(); - if (existingArtifact.metadata() != null) { - metadata.putAll(existingArtifact.metadata()); - } - if (newArtifact.metadata() != null) { - metadata.putAll(newArtifact.metadata()); + Map mergedMetadata = null; + if (existingArtifact.metadata() != null || newArtifact.metadata() != null) { + mergedMetadata = new HashMap<>(); + if (existingArtifact.metadata() != null) { + mergedMetadata.putAll(existingArtifact.metadata()); + } + if (newArtifact.metadata() != null) { + mergedMetadata.putAll(newArtifact.metadata()); + } } Artifact updated = Artifact.builder(existingArtifact) .parts(parts) - .metadata(metadata) + .metadata(mergedMetadata) .build(); artifacts.set(existingArtifactIndex, updated); } else {