diff --git a/transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java b/transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java index ad4e29cc1..4b93cfe22 100644 --- a/transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java +++ b/transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java @@ -415,7 +415,12 @@ public HTTPRestResponse subscribeToTask(ServerCallContext context, String tenant */ public HTTPRestResponse getTask(ServerCallContext context, String tenant, String taskId, @Nullable Integer historyLength) { try { - TaskQueryParams params = new TaskQueryParams(taskId, historyLength, tenant); + TaskQueryParams params; + try { + params = new TaskQueryParams(taskId, historyLength, tenant); + } catch (IllegalArgumentException e) { + throw new InvalidParamsError(e.getMessage()); + } Task task = requestHandler.onGetTask(params, context); if (task != null) { return createSuccessResponse(200, io.a2a.grpc.Task.newBuilder(ProtoUtils.ToProto.task(task))); diff --git a/transport/rest/src/test/java/io/a2a/transport/rest/handler/RestHandlerTest.java b/transport/rest/src/test/java/io/a2a/transport/rest/handler/RestHandlerTest.java index f896f0af2..a8fefe07c 100644 --- a/transport/rest/src/test/java/io/a2a/transport/rest/handler/RestHandlerTest.java +++ b/transport/rest/src/test/java/io/a2a/transport/rest/handler/RestHandlerTest.java @@ -58,6 +58,17 @@ public void testGetTaskNotFound() { Assertions.assertTrue(response.getBody().contains("TaskNotFoundError")); } + @Test + public void testGetTaskNegativeHistoryLengthReturns422() { + RestHandler handler = new RestHandler(CARD, requestHandler, internalExecutor); + + RestHandler.HTTPRestResponse response = handler.getTask(callContext, "", MINIMAL_TASK.id(), -1); + + Assertions.assertEquals(422, response.getStatusCode()); + Assertions.assertEquals("application/problem+json", response.getContentType()); + Assertions.assertTrue(response.getBody().contains("InvalidParamsError")); + } + @Test public void testListTasksStatusWireString() { RestHandler handler = new RestHandler(CARD, requestHandler, internalExecutor);