Skip to content

Commit 56c1960

Browse files
fix(rest): map invalid history length to InvalidParamsError (#715)
## Description Fixes REST `getTask` error handling when `historyLength` is invalid. Previously, invalid `historyLength` values could throw `IllegalArgumentException` and be returned as an internal error (500). This change maps that case to `InvalidParamsError`, returning the correct client error semantics (422). ## Changes - Update `RestHandler#getTask(...)` to catch `IllegalArgumentException` and return `InvalidParamsError` - Add regression test: - `RestHandlerTest#testGetTaskNegativeHistoryLengthReturns422` ## Validation - Ran targeted REST handler tests and verified they pass Fixes #714 --------- Co-authored-by: Emmanuel Hugonnet <ehsavoie@users.noreply.github.com>
1 parent a667e90 commit 56c1960

2 files changed

Lines changed: 17 additions & 1 deletion

File tree

transport/rest/src/main/java/io/a2a/transport/rest/handler/RestHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,12 @@ public HTTPRestResponse subscribeToTask(ServerCallContext context, String tenant
415415
*/
416416
public HTTPRestResponse getTask(ServerCallContext context, String tenant, String taskId, @Nullable Integer historyLength) {
417417
try {
418-
TaskQueryParams params = new TaskQueryParams(taskId, historyLength, tenant);
418+
TaskQueryParams params;
419+
try {
420+
params = new TaskQueryParams(taskId, historyLength, tenant);
421+
} catch (IllegalArgumentException e) {
422+
throw new InvalidParamsError(e.getMessage());
423+
}
419424
Task task = requestHandler.onGetTask(params, context);
420425
if (task != null) {
421426
return createSuccessResponse(200, io.a2a.grpc.Task.newBuilder(ProtoUtils.ToProto.task(task)));

transport/rest/src/test/java/io/a2a/transport/rest/handler/RestHandlerTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ public void testGetTaskNotFound() {
5858
Assertions.assertTrue(response.getBody().contains("TaskNotFoundError"));
5959
}
6060

61+
@Test
62+
public void testGetTaskNegativeHistoryLengthReturns422() {
63+
RestHandler handler = new RestHandler(CARD, requestHandler, internalExecutor);
64+
65+
RestHandler.HTTPRestResponse response = handler.getTask(callContext, "", MINIMAL_TASK.id(), -1);
66+
67+
Assertions.assertEquals(422, response.getStatusCode());
68+
Assertions.assertEquals("application/problem+json", response.getContentType());
69+
Assertions.assertTrue(response.getBody().contains("InvalidParamsError"));
70+
}
71+
6172
@Test
6273
public void testListTasksStatusWireString() {
6374
RestHandler handler = new RestHandler(CARD, requestHandler, internalExecutor);

0 commit comments

Comments
 (0)