diff --git a/client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransport.java b/client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransport.java index f47cf4267..207ccc45b 100644 --- a/client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransport.java +++ b/client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransport.java @@ -1,5 +1,15 @@ package io.a2a.client.transport.grpc; +import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD; +import static io.a2a.spec.A2AMethods.DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SEND_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD; import static io.a2a.util.Assert.checkNotNullParam; import java.util.List; @@ -18,17 +28,7 @@ import io.a2a.grpc.A2AServiceGrpc.A2AServiceStub; import io.a2a.grpc.utils.ProtoUtils.FromProto; import io.a2a.grpc.utils.ProtoUtils.ToProto; -import io.a2a.jsonrpc.common.wrappers.CancelTaskRequest; -import io.a2a.jsonrpc.common.wrappers.DeleteTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.GetTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.GetTaskRequest; -import io.a2a.jsonrpc.common.wrappers.ListTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.ListTasksRequest; import io.a2a.jsonrpc.common.wrappers.ListTasksResult; -import io.a2a.jsonrpc.common.wrappers.SendMessageRequest; -import io.a2a.jsonrpc.common.wrappers.SendStreamingMessageRequest; -import io.a2a.jsonrpc.common.wrappers.SetTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.SubscribeToTaskRequest; import io.a2a.spec.A2AClientException; import io.a2a.spec.AgentCard; import io.a2a.spec.DeleteTaskPushNotificationConfigParams; @@ -95,7 +95,7 @@ public EventKind sendMessage(MessageSendParams request, @Nullable ClientCallCont MessageSendParams tenantRequest = createRequestWithTenant(request); io.a2a.grpc.SendMessageRequest sendMessageRequest = createGrpcSendMessageRequest(tenantRequest, context); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendMessageRequest.METHOD, sendMessageRequest, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_MESSAGE_METHOD, sendMessageRequest, agentCard, context); try { @@ -121,7 +121,7 @@ public void sendMessageStreaming(MessageSendParams request, Consumer streamObserver = new EventStreamObserver(eventConsumer, errorConsumer); @@ -143,7 +143,7 @@ public Task getTask(TaskQueryParams request, @Nullable ClientCallContext context } requestBuilder.setTenant(resolveTenant(request.tenant())); io.a2a.grpc.GetTaskRequest getTaskRequest = requestBuilder.build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskRequest.METHOD, getTaskRequest, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_METHOD, getTaskRequest, agentCard, context); try { @@ -162,8 +162,7 @@ public Task cancelTask(TaskIdParams request, @Nullable ClientCallContext context .setName("tasks/" + request.id()) .setTenant(resolveTenant(request.tenant())) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(CancelTaskRequest.METHOD, cancelTaskRequest, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(CANCEL_TASK_METHOD, cancelTaskRequest, agentCard, context); try { A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders); @@ -201,8 +200,7 @@ public ListTasksResult listTasks(ListTasksParams request, @Nullable ClientCallCo } requestBuilder.setTenant(resolveTenant(request.tenant())); io.a2a.grpc.ListTasksRequest listTasksRequest = requestBuilder.build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTasksRequest.METHOD, listTasksRequest, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_METHOD, listTasksRequest, agentCard, context); try { A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders); @@ -233,8 +231,7 @@ public TaskPushNotificationConfig setTaskPushNotificationConfiguration(TaskPushN .setConfigId(configId != null ? configId : request.taskId()) .setTenant(resolveTenant(request.tenant())) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SetTaskPushNotificationConfigRequest.METHOD, - grpcRequest, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context); try { A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders); @@ -254,8 +251,7 @@ public TaskPushNotificationConfig getTaskPushNotificationConfiguration( .setName(getTaskPushNotificationConfigName(request)) .setTenant(resolveTenant(request.tenant())) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskPushNotificationConfigRequest.METHOD, - grpcRequest, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context); try { A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders); @@ -277,7 +273,7 @@ public ListTaskPushNotificationConfigResult listTaskPushNotificationConfiguratio .setPageSize(request.pageSize()) .setPageToken(request.pageToken()) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTaskPushNotificationConfigRequest.METHOD, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context); try { @@ -298,8 +294,7 @@ public void deleteTaskPushNotificationConfigurations(DeleteTaskPushNotificationC .setName(getTaskPushNotificationConfigName(request.id(), request.pushNotificationConfigId())) .setTenant(resolveTenant(request.tenant())) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(DeleteTaskPushNotificationConfigRequest.METHOD, - grpcRequest, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context); try { A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders); @@ -319,8 +314,7 @@ public void resubscribe(TaskIdParams request, Consumer event .setTenant(resolveTenant(request.tenant())) .setName("tasks/" + request.id()) .build(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SubscribeToTaskRequest.METHOD, - grpcRequest, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SUBSCRIBE_TO_TASK_METHOD, grpcRequest, agentCard, context); StreamObserver streamObserver = new EventStreamObserver(eventConsumer, errorConsumer); diff --git a/client/transport/jsonrpc/src/main/java/io/a2a/client/transport/jsonrpc/JSONRPCTransport.java b/client/transport/jsonrpc/src/main/java/io/a2a/client/transport/jsonrpc/JSONRPCTransport.java index b9a8da1e1..69e291988 100644 --- a/client/transport/jsonrpc/src/main/java/io/a2a/client/transport/jsonrpc/JSONRPCTransport.java +++ b/client/transport/jsonrpc/src/main/java/io/a2a/client/transport/jsonrpc/JSONRPCTransport.java @@ -1,5 +1,16 @@ package io.a2a.client.transport.jsonrpc; +import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD; +import static io.a2a.spec.A2AMethods.DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.GET_EXTENDED_AGENT_CARD_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SEND_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD; import static io.a2a.util.Assert.checkNotNullParam; import java.io.IOException; @@ -24,27 +35,17 @@ import io.a2a.jsonrpc.common.json.JsonProcessingException; import io.a2a.jsonrpc.common.wrappers.A2AMessage; import io.a2a.jsonrpc.common.wrappers.A2AResponse; -import io.a2a.jsonrpc.common.wrappers.CancelTaskRequest; import io.a2a.jsonrpc.common.wrappers.CancelTaskResponse; -import io.a2a.jsonrpc.common.wrappers.DeleteTaskPushNotificationConfigRequest; import io.a2a.jsonrpc.common.wrappers.DeleteTaskPushNotificationConfigResponse; import io.a2a.jsonrpc.common.wrappers.GetAuthenticatedExtendedCardRequest; import io.a2a.jsonrpc.common.wrappers.GetAuthenticatedExtendedCardResponse; -import io.a2a.jsonrpc.common.wrappers.GetTaskPushNotificationConfigRequest; import io.a2a.jsonrpc.common.wrappers.GetTaskPushNotificationConfigResponse; -import io.a2a.jsonrpc.common.wrappers.GetTaskRequest; import io.a2a.jsonrpc.common.wrappers.GetTaskResponse; -import io.a2a.jsonrpc.common.wrappers.ListTaskPushNotificationConfigRequest; import io.a2a.jsonrpc.common.wrappers.ListTaskPushNotificationConfigResponse; -import io.a2a.jsonrpc.common.wrappers.ListTasksRequest; import io.a2a.jsonrpc.common.wrappers.ListTasksResponse; import io.a2a.jsonrpc.common.wrappers.ListTasksResult; -import io.a2a.jsonrpc.common.wrappers.SendMessageRequest; import io.a2a.jsonrpc.common.wrappers.SendMessageResponse; -import io.a2a.jsonrpc.common.wrappers.SendStreamingMessageRequest; -import io.a2a.jsonrpc.common.wrappers.SetTaskPushNotificationConfigRequest; import io.a2a.jsonrpc.common.wrappers.SetTaskPushNotificationConfigResponse; -import io.a2a.jsonrpc.common.wrappers.SubscribeToTaskRequest; import io.a2a.spec.A2AClientError; import io.a2a.spec.A2AClientException; import io.a2a.spec.A2AError; @@ -93,12 +94,12 @@ public JSONRPCTransport(@Nullable A2AHttpClient httpClient, @Nullable AgentCard @Override public EventKind sendMessage(MessageSendParams request, @Nullable ClientCallContext context) throws A2AClientException { checkNotNullParam("request", request); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendMessageRequest.METHOD, ProtoUtils.ToProto.sendMessageRequest(request), + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_MESSAGE_METHOD, ProtoUtils.ToProto.sendMessageRequest(request), agentCard, context); try { - String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders, SendMessageRequest.METHOD); - SendMessageResponse response = unmarshalResponse(httpResponseBody, SendMessageRequest.METHOD); + String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders, SEND_MESSAGE_METHOD); + SendMessageResponse response = unmarshalResponse(httpResponseBody, SEND_MESSAGE_METHOD); return response.getResult(); } catch (A2AClientException e) { throw e; @@ -112,14 +113,14 @@ public void sendMessageStreaming(MessageSendParams request, Consumer errorConsumer, @Nullable ClientCallContext context) throws A2AClientException { checkNotNullParam("request", request); checkNotNullParam("eventConsumer", eventConsumer); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendStreamingMessageRequest.METHOD, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_STREAMING_MESSAGE_METHOD, ProtoUtils.ToProto.sendMessageRequest(request), agentCard, context); final AtomicReference> ref = new AtomicReference<>(); SSEEventListener sseEventListener = new SSEEventListener(eventConsumer, errorConsumer); try { - A2AHttpClient.PostBuilder builder = createPostBuilder(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders, SendStreamingMessageRequest.METHOD); + A2AHttpClient.PostBuilder builder = createPostBuilder(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders, SEND_STREAMING_MESSAGE_METHOD); ref.set(builder.postAsyncSSE( msg -> sseEventListener.onMessage(msg, ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), @@ -139,12 +140,12 @@ public void sendMessageStreaming(MessageSendParams request, Consumer event checkNotNullParam("request", request); checkNotNullParam("eventConsumer", eventConsumer); checkNotNullParam("errorConsumer", errorConsumer); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SubscribeToTaskRequest.METHOD, - ProtoUtils.ToProto.subscribeToTaskRequest(request), agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SUBSCRIBE_TO_TASK_METHOD, ProtoUtils.ToProto.subscribeToTaskRequest(request), agentCard, context); AtomicReference> ref = new AtomicReference<>(); SSEEventListener sseEventListener = new SSEEventListener(eventConsumer, errorConsumer); try { - A2AHttpClient.PostBuilder builder = createPostBuilder(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders,SubscribeToTaskRequest.METHOD); + A2AHttpClient.PostBuilder builder = createPostBuilder(Utils.buildBaseUrl(agentInterface, request.tenant()), payloadAndHeaders, SUBSCRIBE_TO_TASK_METHOD); ref.set(builder.postAsyncSSE( msg -> sseEventListener.onMessage(msg, ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), @@ -307,13 +304,12 @@ public AgentCard getAgentCard(@Nullable ClientCallContext context) throws A2ACli .jsonrpc(A2AMessage.JSONRPC_VERSION) .build(); // id will be randomly generated - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetAuthenticatedExtendedCardRequest.METHOD, - ProtoUtils.ToProto.extendedAgentCard(getExtendedAgentCardRequest), agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_EXTENDED_AGENT_CARD_METHOD, + ProtoUtils.ToProto.extendedAgentCard(), agentCard, context); try { - String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, ""), payloadAndHeaders,GetAuthenticatedExtendedCardRequest.METHOD); - GetAuthenticatedExtendedCardResponse response = unmarshalResponse(httpResponseBody, - GetAuthenticatedExtendedCardRequest.METHOD); + String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, ""), payloadAndHeaders, GET_EXTENDED_AGENT_CARD_METHOD); + GetAuthenticatedExtendedCardResponse response = unmarshalResponse(httpResponseBody, GET_EXTENDED_AGENT_CARD_METHOD); agentCard = response.getResult(); needsExtendedCard = false; return agentCard; diff --git a/client/transport/rest/src/main/java/io/a2a/client/transport/rest/RestTransport.java b/client/transport/rest/src/main/java/io/a2a/client/transport/rest/RestTransport.java index f3d3100ef..adf8e089e 100644 --- a/client/transport/rest/src/main/java/io/a2a/client/transport/rest/RestTransport.java +++ b/client/transport/rest/src/main/java/io/a2a/client/transport/rest/RestTransport.java @@ -1,5 +1,15 @@ package io.a2a.client.transport.rest; +import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD; +import static io.a2a.spec.A2AMethods.DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SEND_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD; import static io.a2a.util.Assert.checkNotNullParam; import java.io.IOException; @@ -28,17 +38,7 @@ import io.a2a.grpc.utils.ProtoUtils; import io.a2a.jsonrpc.common.json.JsonProcessingException; import io.a2a.jsonrpc.common.json.JsonUtil; -import io.a2a.jsonrpc.common.wrappers.CancelTaskRequest; -import io.a2a.jsonrpc.common.wrappers.DeleteTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.GetTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.GetTaskRequest; -import io.a2a.jsonrpc.common.wrappers.ListTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.ListTasksRequest; import io.a2a.jsonrpc.common.wrappers.ListTasksResult; -import io.a2a.jsonrpc.common.wrappers.SendMessageRequest; -import io.a2a.jsonrpc.common.wrappers.SendStreamingMessageRequest; -import io.a2a.jsonrpc.common.wrappers.SetTaskPushNotificationConfigRequest; -import io.a2a.jsonrpc.common.wrappers.SubscribeToTaskRequest; import io.a2a.spec.A2AClientError; import io.a2a.spec.A2AClientException; import io.a2a.spec.AgentCard; @@ -83,7 +83,7 @@ public RestTransport(@Nullable A2AHttpClient httpClient, AgentCard agentCard, public EventKind sendMessage(MessageSendParams messageSendParams, @Nullable ClientCallContext context) throws A2AClientException { checkNotNullParam("messageSendParams", messageSendParams); io.a2a.grpc.SendMessageRequest.Builder builder = io.a2a.grpc.SendMessageRequest.newBuilder(ProtoUtils.ToProto.sendMessageRequest(messageSendParams)); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendMessageRequest.METHOD, builder, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_MESSAGE_METHOD, builder, agentCard, context); try { String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, messageSendParams.tenant()) + "/message:send", payloadAndHeaders); io.a2a.grpc.SendMessageResponse.Builder responseBuilder = io.a2a.grpc.SendMessageResponse.newBuilder(); @@ -108,8 +108,7 @@ public void sendMessageStreaming(MessageSendParams messageSendParams, Consumer> ref = new AtomicReference<>(); RestSSEEventListener sseEventListener = new RestSSEEventListener(eventConsumer, errorConsumer); try { @@ -134,8 +133,7 @@ public Task getTask(TaskQueryParams taskQueryParams, @Nullable ClientCallContext checkNotNullParam("taskQueryParams", taskQueryParams); io.a2a.grpc.GetTaskRequest.Builder builder = io.a2a.grpc.GetTaskRequest.newBuilder(); builder.setName("tasks/" + taskQueryParams.id()); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskRequest.METHOD, builder, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_METHOD, builder, agentCard, context); try { StringBuilder url = new StringBuilder(Utils.buildBaseUrl(agentInterface, taskQueryParams.tenant())); if (taskQueryParams.historyLength() != null && taskQueryParams.historyLength() > 0) { @@ -169,8 +167,7 @@ public Task cancelTask(TaskIdParams taskIdParams, @Nullable ClientCallContext co checkNotNullParam("taskIdParams", taskIdParams); io.a2a.grpc.CancelTaskRequest.Builder builder = io.a2a.grpc.CancelTaskRequest.newBuilder(); builder.setName("tasks/" + taskIdParams.id()); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(CancelTaskRequest.METHOD, builder, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(CANCEL_TASK_METHOD, builder, agentCard, context); try { String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, taskIdParams.tenant()) + String.format("/tasks/%1s:cancel", taskIdParams.id()), payloadAndHeaders); io.a2a.grpc.Task.Builder responseBuilder = io.a2a.grpc.Task.newBuilder(); @@ -209,8 +206,7 @@ public ListTasksResult listTasks(ListTasksParams request, @Nullable ClientCallCo builder.setIncludeArtifacts(true); } - PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTasksRequest.METHOD, builder, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_METHOD, builder, agentCard, context); try { // Build query string @@ -282,7 +278,7 @@ public TaskPushNotificationConfig setTaskPushNotificationConfiguration(TaskPushN if (request.pushNotificationConfig().id() != null) { builder.setConfigId(request.pushNotificationConfig().id()); } - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SetTaskPushNotificationConfigRequest.METHOD, builder, agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, builder, agentCard, context); try { String httpResponseBody = sendPostRequest(Utils.buildBaseUrl(agentInterface, request.tenant()) + String.format("/tasks/%1s/pushNotificationConfigs", request.taskId()), payloadAndHeaders); io.a2a.grpc.TaskPushNotificationConfig.Builder responseBuilder = io.a2a.grpc.TaskPushNotificationConfig.newBuilder(); @@ -310,7 +306,7 @@ public TaskPushNotificationConfig getTaskPushNotificationConfiguration(GetTaskPu builder.setName(String.format("/tasks/%1s/pushNotificationConfigs/", request.id())); url.append(builder.getName()); } - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskPushNotificationConfigRequest.METHOD, builder, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, builder, agentCard, context); try { A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url.toString()); @@ -340,7 +336,7 @@ public ListTaskPushNotificationConfigResult listTaskPushNotificationConfiguratio io.a2a.grpc.ListTaskPushNotificationConfigRequest.Builder builder = io.a2a.grpc.ListTaskPushNotificationConfigRequest.newBuilder(); builder.setParent(String.format("/tasks/%1s/pushNotificationConfigs", request.id())); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTaskPushNotificationConfigRequest.METHOD, builder, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, builder, agentCard, context); try { String url = Utils.buildBaseUrl(agentInterface, request.tenant()) + String.format("/tasks/%1s/pushNotificationConfigs", request.id()); @@ -369,7 +365,7 @@ public ListTaskPushNotificationConfigResult listTaskPushNotificationConfiguratio public void deleteTaskPushNotificationConfigurations(DeleteTaskPushNotificationConfigParams request, @Nullable ClientCallContext context) throws A2AClientException { checkNotNullParam("request", request); io.a2a.grpc.DeleteTaskPushNotificationConfigRequestOrBuilder builder = io.a2a.grpc.DeleteTaskPushNotificationConfigRequest.newBuilder(); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(DeleteTaskPushNotificationConfigRequest.METHOD, builder, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, builder, agentCard, context); try { String url = Utils.buildBaseUrl(agentInterface, request.tenant()) + String.format("/tasks/%1s/pushNotificationConfigs/%2s", request.id(), request.pushNotificationConfigId()); @@ -396,7 +392,7 @@ public void resubscribe(TaskIdParams request, Consumer event checkNotNullParam("request", request); io.a2a.grpc.SubscribeToTaskRequest.Builder builder = io.a2a.grpc.SubscribeToTaskRequest.newBuilder(); builder.setName("tasks/" + request.id()); - PayloadAndHeaders payloadAndHeaders = applyInterceptors(SubscribeToTaskRequest.METHOD, builder, + PayloadAndHeaders payloadAndHeaders = applyInterceptors(SUBSCRIBE_TO_TASK_METHOD, builder, agentCard, context); AtomicReference> ref = new AtomicReference<>(); RestSSEEventListener sseEventListener = new RestSSEEventListener(eventConsumer, errorConsumer); @@ -430,8 +426,7 @@ public AgentCard getAgentCard(@Nullable ClientCallContext context) throws A2ACli if (!needsExtendedCard) { return agentCard; } - PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskRequest.METHOD, null, - agentCard, context); + PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_METHOD, null, agentCard, context); String url = Utils.buildBaseUrl(agentInterface, "") + "/extendedAgentCard"; A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url); if (payloadAndHeaders.getHeaders() != null) { diff --git a/jsonrpc-common/pom.xml b/jsonrpc-common/pom.xml index 0ae4e2544..f566ad9a3 100644 --- a/jsonrpc-common/pom.xml +++ b/jsonrpc-common/pom.xml @@ -13,14 +13,13 @@ jar - Java SDK A2A Internal + Java SDK A2A JSONRPC Common Java SDK for the Agent2Agent Protocol (A2A) - Internal implementation utilities (not part of public API) ${project.groupId} a2a-java-sdk-spec - ${project.version} com.google.code.gson diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/CancelTaskRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/CancelTaskRequest.java index abe3db4b9..836cb6e06 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/CancelTaskRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/CancelTaskRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD; + import java.util.UUID; import io.a2a.spec.TaskIdParams; @@ -25,9 +27,6 @@ */ public final class CancelTaskRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name for canceling tasks. */ - public static final String METHOD = "CancelTask"; - /** * Creates a new CancelTaskRequest with the specified JSON-RPC parameters. * @@ -37,7 +36,7 @@ public final class CancelTaskRequest extends NonStreamingJSONRPCRequest @@ -19,9 +22,6 @@ */ public final class DeleteTaskPushNotificationConfigRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name for deleting push notification configurations. */ - public static final String METHOD = "DeleteTaskPushNotificationConfig"; - /** * Creates a new DeleteTaskPushNotificationConfigRequest with the specified JSON-RPC parameters. * @@ -31,7 +31,7 @@ public final class DeleteTaskPushNotificationConfigRequest extends NonStreamingJ * @throws IllegalArgumentException if jsonrpc version is invalid, method is not "DeleteTaskPushNotificationConfig", or id is not a string/integer/null */ public DeleteTaskPushNotificationConfigRequest(String jsonrpc, Object id, DeleteTaskPushNotificationConfigParams params) { - super(jsonrpc, METHOD, id, params); + super(jsonrpc, DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, id, params); } /** diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetAuthenticatedExtendedCardRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetAuthenticatedExtendedCardRequest.java index 93b73b186..5fb2f00bb 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetAuthenticatedExtendedCardRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetAuthenticatedExtendedCardRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.GET_EXTENDED_AGENT_CARD_METHOD; + import java.util.UUID; import io.a2a.spec.AgentCard; @@ -31,9 +33,6 @@ */ public final class GetAuthenticatedExtendedCardRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name for getting extended agent card. */ - public static final String METHOD = "GetExtendedAgentCard"; - /** * Constructs request with full parameters. * @@ -41,7 +40,7 @@ public final class GetAuthenticatedExtendedCardRequest extends NonStreamingJSONR * @param id the request ID */ public GetAuthenticatedExtendedCardRequest(String jsonrpc, Object id) { - super(jsonrpc, METHOD, id); + super(jsonrpc, GET_EXTENDED_AGENT_CARD_METHOD, id); } /** diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskPushNotificationConfigRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskPushNotificationConfigRequest.java index 02bfa60de..e0f11be83 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskPushNotificationConfigRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskPushNotificationConfigRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; + import java.util.UUID; import io.a2a.spec.GetTaskPushNotificationConfigParams; @@ -20,9 +22,6 @@ */ public final class GetTaskPushNotificationConfigRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "GetTaskPushNotificationConfig"; - /** * Constructs request with all parameters. * @@ -31,7 +30,7 @@ public final class GetTaskPushNotificationConfigRequest extends NonStreamingJSON * @param params the request parameters */ public GetTaskPushNotificationConfigRequest(String jsonrpc, Object id, GetTaskPushNotificationConfigParams params) { - super(jsonrpc, METHOD, id, params); + super(jsonrpc, GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, id, params); } /** diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskRequest.java index abcef3d37..a08abe1be 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/GetTaskRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.GET_TASK_METHOD; + import java.util.UUID; import io.a2a.spec.Task; @@ -21,9 +23,6 @@ */ public final class GetTaskRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "GetTask"; - /** * Constructs request with all parameters. * @@ -32,7 +31,7 @@ public final class GetTaskRequest extends NonStreamingJSONRPCRequest @@ -20,9 +23,6 @@ */ public final class ListTaskPushNotificationConfigRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "ListTaskPushNotificationConfig"; - /** * Constructs request with all parameters. * @@ -31,7 +31,7 @@ public final class ListTaskPushNotificationConfigRequest extends NonStreamingJSO * @param params the request parameters */ public ListTaskPushNotificationConfigRequest(String jsonrpc, Object id, ListTaskPushNotificationConfigParams params) { - super(jsonrpc, METHOD, id, params); + super(jsonrpc, LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, id, params); } /** diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/ListTasksRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/ListTasksRequest.java index 59301fabf..aa8d656bc 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/ListTasksRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/ListTasksRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD; + import java.util.UUID; import io.a2a.spec.ListTasksParams; @@ -9,9 +11,6 @@ */ public final class ListTasksRequest extends NonStreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "ListTasks"; - /** * Constructs request with all parameters. * @@ -20,7 +19,7 @@ public final class ListTasksRequest extends NonStreamingJSONRPCRequest * This class includes a fluent {@link Builder} for convenient request construction. The method - * name is fixed as {@value #METHOD} and is set automatically by the constructor. + * name is fixed as "SendMessage" and is set automatically by the constructor. * * @see SendStreamingMessageRequest * @see MessageSendParams @@ -32,11 +34,6 @@ */ public final class SendMessageRequest extends NonStreamingJSONRPCRequest { - /** - * The JSON-RPC method name for sending a message: "SendMessage". - */ - public static final String METHOD = "SendMessage"; - /** * Constructs a SendMessageRequest with the specified JSON-RPC fields. *

@@ -49,7 +46,7 @@ public final class SendMessageRequest extends NonStreamingJSONRPCRequest - * The method name is automatically set to {@value SendMessageRequest#METHOD} and cannot be changed. + * The method name is automatically set to "SendMessage" and cannot be changed. * If no ID is provided, a UUID will be auto-generated when {@link #build()} is called. *

* Example usage: diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SendStreamingMessageRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SendStreamingMessageRequest.java index 239ec2022..704b70435 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SendStreamingMessageRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SendStreamingMessageRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; + import java.util.UUID; import io.a2a.spec.MessageSendParams; @@ -24,9 +26,6 @@ */ public final class SendStreamingMessageRequest extends StreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "SendStreamingMessage"; - /** * Constructs request with all parameters. * @@ -35,7 +34,7 @@ public final class SendStreamingMessageRequest extends StreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "SetTaskPushNotificationConfig"; - /** * Constructs request with all parameters. * @@ -32,7 +31,7 @@ public final class SetTaskPushNotificationConfigRequest extends NonStreamingJSON * @param params the request parameters */ public SetTaskPushNotificationConfigRequest(String jsonrpc, Object id, TaskPushNotificationConfig params) { - super(jsonrpc, METHOD, id, params); + super(jsonrpc, SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, id, params); } /** diff --git a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SubscribeToTaskRequest.java b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SubscribeToTaskRequest.java index c3de3ffcd..27acb3a14 100644 --- a/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SubscribeToTaskRequest.java +++ b/jsonrpc-common/src/main/java/io/a2a/jsonrpc/common/wrappers/SubscribeToTaskRequest.java @@ -1,5 +1,7 @@ package io.a2a.jsonrpc.common.wrappers; +import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD; + import java.util.UUID; import io.a2a.spec.StreamingEventKind; @@ -27,9 +29,6 @@ */ public final class SubscribeToTaskRequest extends StreamingJSONRPCRequest { - /** The JSON-RPC method name. */ - public static final String METHOD = "SubscribeToTask"; - /** * Constructs request with all parameters. * @@ -38,7 +37,7 @@ public final class SubscribeToTaskRequest extends StreamingJSONRPCRequest ${project.groupId} a2a-java-sdk-jsonrpc-common - ${project.version} com.google.protobuf @@ -97,7 +96,7 @@ io.github.ascopes protobuf-maven-plugin - 4.0.2 + 4.0.3 ${skip.protobuf.generate} true diff --git a/spec-grpc/src/main/java/io/a2a/grpc/utils/JSONRPCUtils.java b/spec-grpc/src/main/java/io/a2a/grpc/utils/JSONRPCUtils.java index 3d475ebce..37b1e9f34 100644 --- a/spec-grpc/src/main/java/io/a2a/grpc/utils/JSONRPCUtils.java +++ b/spec-grpc/src/main/java/io/a2a/grpc/utils/JSONRPCUtils.java @@ -11,6 +11,9 @@ import static io.a2a.spec.A2AErrorCodes.TASK_NOT_CANCELABLE_ERROR_CODE; import static io.a2a.spec.A2AErrorCodes.TASK_NOT_FOUND_ERROR_CODE; import static io.a2a.spec.A2AErrorCodes.UNSUPPORTED_OPERATION_ERROR_CODE; +import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD; +import static io.a2a.spec.A2AMethods.GET_EXTENDED_AGENT_CARD_METHOD; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; import java.io.IOException; import java.io.StringWriter; @@ -72,6 +75,15 @@ import io.a2a.util.Utils; import org.jspecify.annotations.Nullable; +import static io.a2a.spec.A2AMethods.DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_METHOD; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD; +import static io.a2a.spec.A2AMethods.LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SEND_MESSAGE_METHOD; +import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD; + /** * Utilities for converting between JSON-RPC 2.0 messages and Protocol Buffer objects. *

@@ -186,55 +198,55 @@ public static A2ARequest parseRequestBody(String body) throws JsonMappingExce private static A2ARequest parseMethodRequest(String version, Object id, String method, JsonElement paramsNode) throws InvalidParamsError, MethodNotFoundJsonMappingException, JsonProcessingException { switch (method) { - case GetTaskRequest.METHOD -> { + case GET_TASK_METHOD -> { io.a2a.grpc.GetTaskRequest.Builder builder = io.a2a.grpc.GetTaskRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new GetTaskRequest(version, id, ProtoUtils.FromProto.taskQueryParams(builder)); } - case CancelTaskRequest.METHOD -> { + case CANCEL_TASK_METHOD -> { io.a2a.grpc.CancelTaskRequest.Builder builder = io.a2a.grpc.CancelTaskRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new CancelTaskRequest(version, id, ProtoUtils.FromProto.taskIdParams(builder)); } - case ListTasksRequest.METHOD -> { + case LIST_TASK_METHOD -> { io.a2a.grpc.ListTasksRequest.Builder builder = io.a2a.grpc.ListTasksRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new ListTasksRequest(version, id, ProtoUtils.FromProto.listTasksParams(builder)); } - case SetTaskPushNotificationConfigRequest.METHOD -> { + case SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.SetTaskPushNotificationConfigRequest.Builder builder = io.a2a.grpc.SetTaskPushNotificationConfigRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new SetTaskPushNotificationConfigRequest(version, id, ProtoUtils.FromProto.setTaskPushNotificationConfig(builder)); } - case GetTaskPushNotificationConfigRequest.METHOD -> { + case GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.GetTaskPushNotificationConfigRequest.Builder builder = io.a2a.grpc.GetTaskPushNotificationConfigRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new GetTaskPushNotificationConfigRequest(version, id, ProtoUtils.FromProto.getTaskPushNotificationConfigParams(builder)); } - case SendMessageRequest.METHOD -> { + case SEND_MESSAGE_METHOD -> { io.a2a.grpc.SendMessageRequest.Builder builder = io.a2a.grpc.SendMessageRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new SendMessageRequest(version, id, ProtoUtils.FromProto.messageSendParams(builder)); } - case ListTaskPushNotificationConfigRequest.METHOD -> { + case LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.ListTaskPushNotificationConfigRequest.Builder builder = io.a2a.grpc.ListTaskPushNotificationConfigRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new ListTaskPushNotificationConfigRequest(version, id, ProtoUtils.FromProto.listTaskPushNotificationConfigParams(builder)); } - case DeleteTaskPushNotificationConfigRequest.METHOD -> { + case DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.DeleteTaskPushNotificationConfigRequest.Builder builder = io.a2a.grpc.DeleteTaskPushNotificationConfigRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new DeleteTaskPushNotificationConfigRequest(version, id, ProtoUtils.FromProto.deleteTaskPushNotificationConfigParams(builder)); } - case GetAuthenticatedExtendedCardRequest.METHOD -> { + case GET_EXTENDED_AGENT_CARD_METHOD -> { return new GetAuthenticatedExtendedCardRequest(version, id); } - case SendStreamingMessageRequest.METHOD -> { + case SEND_STREAMING_MESSAGE_METHOD -> { io.a2a.grpc.SendMessageRequest.Builder builder = io.a2a.grpc.SendMessageRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new SendStreamingMessageRequest(version, id, ProtoUtils.FromProto.messageSendParams(builder)); } - case SubscribeToTaskRequest.METHOD -> { + case SUBSCRIBE_TO_TASK_METHOD -> { io.a2a.grpc.SubscribeToTaskRequest.Builder builder = io.a2a.grpc.SubscribeToTaskRequest.newBuilder(); parseRequestBody(paramsNode, builder, id); return new SubscribeToTaskRequest(version, id, ProtoUtils.FromProto.taskIdParams(builder)); @@ -268,32 +280,32 @@ public static A2AResponse parseResponseBody(String body, String method) throw return parseError(jsonRpc.getAsJsonObject("error"), id, method); } switch (method) { - case GetTaskRequest.METHOD -> { + case GET_TASK_METHOD -> { io.a2a.grpc.Task.Builder builder = io.a2a.grpc.Task.newBuilder(); parseRequestBody(paramsNode, builder, id); return new GetTaskResponse(id, ProtoUtils.FromProto.task(builder)); } - case CancelTaskRequest.METHOD -> { + case CANCEL_TASK_METHOD -> { io.a2a.grpc.Task.Builder builder = io.a2a.grpc.Task.newBuilder(); parseRequestBody(paramsNode, builder, id); return new CancelTaskResponse(id, ProtoUtils.FromProto.task(builder)); } - case ListTasksRequest.METHOD -> { + case LIST_TASK_METHOD -> { io.a2a.grpc.ListTasksResponse.Builder builder = io.a2a.grpc.ListTasksResponse.newBuilder(); parseRequestBody(paramsNode, builder, id); return new ListTasksResponse(id, ProtoUtils.FromProto.listTasksResult(builder)); } - case SetTaskPushNotificationConfigRequest.METHOD -> { + case SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.TaskPushNotificationConfig.Builder builder = io.a2a.grpc.TaskPushNotificationConfig.newBuilder(); parseRequestBody(paramsNode, builder, id); return new SetTaskPushNotificationConfigResponse(id, ProtoUtils.FromProto.taskPushNotificationConfig(builder)); } - case GetTaskPushNotificationConfigRequest.METHOD -> { + case GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.TaskPushNotificationConfig.Builder builder = io.a2a.grpc.TaskPushNotificationConfig.newBuilder(); parseRequestBody(paramsNode, builder, id); return new GetTaskPushNotificationConfigResponse(id, ProtoUtils.FromProto.taskPushNotificationConfig(builder)); } - case SendMessageRequest.METHOD -> { + case SEND_MESSAGE_METHOD -> { io.a2a.grpc.SendMessageResponse.Builder builder = io.a2a.grpc.SendMessageResponse.newBuilder(); parseRequestBody(paramsNode, builder, id); if (builder.hasMsg()) { @@ -301,15 +313,15 @@ public static A2AResponse parseResponseBody(String body, String method) throw } return new SendMessageResponse(id, ProtoUtils.FromProto.task(builder.getTask())); } - case ListTaskPushNotificationConfigRequest.METHOD -> { + case LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { io.a2a.grpc.ListTaskPushNotificationConfigResponse.Builder builder = io.a2a.grpc.ListTaskPushNotificationConfigResponse.newBuilder(); parseRequestBody(paramsNode, builder, id); return new ListTaskPushNotificationConfigResponse(id, ProtoUtils.FromProto.listTaskPushNotificationConfigResult(builder)); } - case DeleteTaskPushNotificationConfigRequest.METHOD -> { + case DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { return new DeleteTaskPushNotificationConfigResponse(id); } - case GetAuthenticatedExtendedCardRequest.METHOD -> { + case GET_EXTENDED_AGENT_CARD_METHOD -> { io.a2a.grpc.AgentCard.Builder builder = io.a2a.grpc.AgentCard.newBuilder(); parseRequestBody(paramsNode, builder, id); return new GetAuthenticatedExtendedCardResponse(id, ProtoUtils.FromProto.agentCard(builder)); @@ -322,28 +334,28 @@ public static A2AResponse parseResponseBody(String body, String method) throw public static A2AResponse parseError(JsonObject error, Object id, String method) throws JsonMappingException { A2AError rpcError = processError(error); switch (method) { - case GetTaskRequest.METHOD -> { + case GET_TASK_METHOD -> { return new GetTaskResponse(id, rpcError); } - case CancelTaskRequest.METHOD -> { + case CANCEL_TASK_METHOD -> { return new CancelTaskResponse(id, rpcError); } - case ListTasksRequest.METHOD -> { + case LIST_TASK_METHOD -> { return new ListTasksResponse(id, rpcError); } - case SetTaskPushNotificationConfigRequest.METHOD -> { + case SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { return new SetTaskPushNotificationConfigResponse(id, rpcError); } - case GetTaskPushNotificationConfigRequest.METHOD -> { + case GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { return new GetTaskPushNotificationConfigResponse(id, rpcError); } - case SendMessageRequest.METHOD -> { + case SEND_MESSAGE_METHOD -> { return new SendMessageResponse(id, rpcError); } - case ListTaskPushNotificationConfigRequest.METHOD -> { + case LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { return new ListTaskPushNotificationConfigResponse(id, rpcError); } - case DeleteTaskPushNotificationConfigRequest.METHOD -> { + case DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD -> { return new DeleteTaskPushNotificationConfigResponse(id, rpcError); } default -> diff --git a/spec-grpc/src/main/java/io/a2a/grpc/utils/ProtoUtils.java b/spec-grpc/src/main/java/io/a2a/grpc/utils/ProtoUtils.java index 83cc91d4b..b4e9a1755 100644 --- a/spec-grpc/src/main/java/io/a2a/grpc/utils/ProtoUtils.java +++ b/spec-grpc/src/main/java/io/a2a/grpc/utils/ProtoUtils.java @@ -23,7 +23,6 @@ import io.a2a.grpc.mapper.TaskQueryParamsMapper; import io.a2a.grpc.mapper.TaskStateMapper; import io.a2a.grpc.mapper.TaskStatusUpdateEventMapper; -import io.a2a.jsonrpc.common.wrappers.GetAuthenticatedExtendedCardRequest; import io.a2a.jsonrpc.common.wrappers.ListTasksResult; import io.a2a.spec.AgentCard; import io.a2a.spec.DeleteTaskPushNotificationConfigParams; @@ -56,7 +55,7 @@ public static io.a2a.grpc.AgentCard agentCard(AgentCard agentCard) { return AgentCardMapper.INSTANCE.toProto(agentCard); } - public static io.a2a.grpc.GetExtendedAgentCardRequest extendedAgentCard(GetAuthenticatedExtendedCardRequest request) { + public static io.a2a.grpc.GetExtendedAgentCardRequest extendedAgentCard() { return GetExtendedAgentCardRequest.newBuilder().build(); } diff --git a/spec-grpc/src/test/java/io/a2a/grpc/utils/JSONRPCUtilsTest.java b/spec-grpc/src/test/java/io/a2a/grpc/utils/JSONRPCUtilsTest.java index 603a9f443..61506c88e 100644 --- a/spec-grpc/src/test/java/io/a2a/grpc/utils/JSONRPCUtilsTest.java +++ b/spec-grpc/src/test/java/io/a2a/grpc/utils/JSONRPCUtilsTest.java @@ -1,6 +1,8 @@ package io.a2a.grpc.utils; import static io.a2a.grpc.utils.JSONRPCUtils.ERROR_MESSAGE; +import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; +import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -285,7 +287,7 @@ public void testGenerateSetTaskPushNotificationConfigResponse_Success() throws E """; SetTaskPushNotificationConfigResponse response = - (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(responseJson, SetTaskPushNotificationConfigRequest.METHOD); + (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(responseJson, SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); assertNotNull(response); assertEquals(1, response.getId()); @@ -311,7 +313,7 @@ public void testGenerateGetTaskPushNotificationConfigResponse_Success() throws E """; GetTaskPushNotificationConfigResponse response = - (GetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(responseJson, GetTaskPushNotificationConfigRequest.METHOD); + (GetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(responseJson, GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); assertNotNull(response); assertEquals(2, response.getId()); @@ -334,7 +336,7 @@ public void testParseErrorResponse_InvalidParams() throws Exception { """; SetTaskPushNotificationConfigResponse response = - (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(errorResponse, SetTaskPushNotificationConfigRequest.METHOD); + (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(errorResponse, SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); assertNotNull(response); assertEquals(5, response.getId()); @@ -358,7 +360,7 @@ public void testParseErrorResponse_ParseError() throws Exception { """; SetTaskPushNotificationConfigResponse response = - (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(errorResponse, SetTaskPushNotificationConfigRequest.METHOD); + (SetTaskPushNotificationConfigResponse) JSONRPCUtils.parseResponseBody(errorResponse, SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); assertNotNull(response); assertEquals(6, response.getId()); diff --git a/spec/src/main/java/io/a2a/spec/A2AMethods.java b/spec/src/main/java/io/a2a/spec/A2AMethods.java new file mode 100644 index 000000000..0ffdf6e30 --- /dev/null +++ b/spec/src/main/java/io/a2a/spec/A2AMethods.java @@ -0,0 +1,17 @@ + +package io.a2a.spec; + +public interface A2AMethods { + String CANCEL_TASK_METHOD = "CancelTask"; + String DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "DeleteTaskPushNotificationConfig"; + String GET_EXTENDED_AGENT_CARD_METHOD = "GetExtendedAgentCard"; + String GET_TASK_METHOD = "GetTask"; + String GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "GetTaskPushNotificationConfig"; + String LIST_TASK_METHOD = "ListTasks"; + String LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "ListTaskPushNotificationConfig"; + String SEND_MESSAGE_METHOD = "SendMessage"; + String SEND_STREAMING_MESSAGE_METHOD = "SendStreamingMessage"; + String SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "SetTaskPushNotificationConfig"; + String SUBSCRIBE_TO_TASK_METHOD = "SubscribeToTask"; + +} diff --git a/tests/server-common/src/test/java/io/a2a/server/apps/common/AbstractA2AServerTest.java b/tests/server-common/src/test/java/io/a2a/server/apps/common/AbstractA2AServerTest.java index 49e4d85aa..de1240c98 100644 --- a/tests/server-common/src/test/java/io/a2a/server/apps/common/AbstractA2AServerTest.java +++ b/tests/server-common/src/test/java/io/a2a/server/apps/common/AbstractA2AServerTest.java @@ -1,5 +1,6 @@ package io.a2a.server.apps.common; +import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD; import static io.a2a.spec.AgentCard.CURRENT_PROTOCOL_VERSION; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -1695,7 +1696,7 @@ private CompletableFuture>> initialiseStreamingReque .build(); String body = ""; if (request instanceof SendStreamingMessageRequest streamingRequest) { - body = JSONRPCUtils.toJsonRPCRequest((String) streamingRequest.getId(), SendStreamingMessageRequest.METHOD, ProtoUtils.ToProto.sendMessageRequest(streamingRequest.getParams())); + body = JSONRPCUtils.toJsonRPCRequest((String) streamingRequest.getId(), SEND_STREAMING_MESSAGE_METHOD, ProtoUtils.ToProto.sendMessageRequest(streamingRequest.getParams())); } // Create the request