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 474b7b784..351c3543a 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 @@ -61,10 +61,10 @@ public class GrpcTransport implements ClientTransport { AuthInterceptor.AUTHORIZATION, Metadata.ASCII_STRING_MARSHALLER); private static final Metadata.Key EXTENSIONS_KEY = Metadata.Key.of( - A2AHeaders.X_A2A_EXTENSIONS, + A2AHeaders.A2A_EXTENSIONS.toLowerCase(), Metadata.ASCII_STRING_MARSHALLER); private static final Metadata.Key VERSION_KEY = Metadata.Key.of( - A2AHeaders.X_A2A_VERSION, + A2AHeaders.A2A_VERSION.toLowerCase(), Metadata.ASCII_STRING_MARSHALLER); private final A2AServiceBlockingV2Stub blockingStub; private final A2AServiceStub asyncStub; @@ -380,8 +380,8 @@ private io.a2a.grpc.SendMessageRequest createGrpcSendMessageRequest(MessageSendP /** * Creates gRPC metadata from ClientCallContext headers. - * Extracts headers like X-A2A-Extensions and sets them as gRPC metadata. - * + * Extracts headers like a2a-extensions and sets them as gRPC metadata. + * The headers are lower-cased (compared to the HTTP headers). * @param context the client call context containing headers, may be null * @param payloadAndHeaders the payload and headers wrapper, may be null * @return the gRPC metadata @@ -390,14 +390,14 @@ private Metadata createGrpcMetadata(@Nullable ClientCallContext context, @Nullab Metadata metadata = new Metadata(); if (context != null && context.getHeaders() != null) { - // Set X-A2A-Version header if present - String versionHeader = context.getHeaders().get(A2AHeaders.X_A2A_VERSION); + // Set a2a-version header if present + String versionHeader = context.getHeaders().get(A2AHeaders.A2A_VERSION.toLowerCase()); if (versionHeader != null) { metadata.put(VERSION_KEY, versionHeader); } - // Set X-A2A-Extensions header if present - String extensionsHeader = context.getHeaders().get(A2AHeaders.X_A2A_EXTENSIONS); + // Set a2a-extensions header if present + String extensionsHeader = context.getHeaders().get(A2AHeaders.A2A_EXTENSIONS.toLowerCase()); if (extensionsHeader != null) { metadata.put(EXTENSIONS_KEY, extensionsHeader); } diff --git a/common/src/main/java/io/a2a/common/A2AHeaders.java b/common/src/main/java/io/a2a/common/A2AHeaders.java index f050333aa..ffbbebda9 100644 --- a/common/src/main/java/io/a2a/common/A2AHeaders.java +++ b/common/src/main/java/io/a2a/common/A2AHeaders.java @@ -9,13 +9,13 @@ public final class A2AHeaders { * HTTP header name for A2A protocol version. * Used to communicate the protocol version that the client is using. */ - public static final String X_A2A_VERSION = "X-A2A-Version"; + public static final String A2A_VERSION = "A2A-Version"; /** * HTTP header name for A2A extensions. * Used to communicate which extensions are requested by the client. */ - public static final String X_A2A_EXTENSIONS = "X-A2A-Extensions"; + public static final String A2A_EXTENSIONS = "A2A-Extensions"; /** * HTTP header name for a push notification token. diff --git a/reference/grpc/src/main/java/io/a2a/server/grpc/quarkus/A2AExtensionsInterceptor.java b/reference/grpc/src/main/java/io/a2a/server/grpc/quarkus/A2AExtensionsInterceptor.java index c024a92f0..f985e7cd1 100644 --- a/reference/grpc/src/main/java/io/a2a/server/grpc/quarkus/A2AExtensionsInterceptor.java +++ b/reference/grpc/src/main/java/io/a2a/server/grpc/quarkus/A2AExtensionsInterceptor.java @@ -21,8 +21,8 @@ * *

Captured Information

* * diff --git a/transport/grpc/src/main/java/io/a2a/transport/grpc/handler/GrpcHandler.java b/transport/grpc/src/main/java/io/a2a/transport/grpc/handler/GrpcHandler.java index cf58e9da9..159d687c2 100644 --- a/transport/grpc/src/main/java/io/a2a/transport/grpc/handler/GrpcHandler.java +++ b/transport/grpc/src/main/java/io/a2a/transport/grpc/handler/GrpcHandler.java @@ -600,8 +600,8 @@ public void deleteTaskPushNotificationConfig(io.a2a.grpc.DeleteTaskPushNotificat *
  • HTTP headers extracted from metadata
  • *
  • gRPC method name
  • *
  • Peer information (client connection details)
  • - *
  • A2A protocol version from {@code X-A2A-Version} header (via context)
  • - *
  • Required extensions from {@code X-A2A-Extensions} header (via context)
  • + *
  • A2A protocol version from {@code A2A-Version} header (via context)
  • + *
  • Required extensions from {@code A2A-Extensions} header (via context)
  • * * *

    Custom Context Creation: @@ -901,7 +901,7 @@ public static void setStreamingSubscribedRunnable(Runnable runnable) { protected abstract Executor getExecutor(); /** - * Attempts to extract the X-A2A-Version header from the current gRPC context. + * Attempts to extract the A2A-Version header from the current gRPC context. * This will only work if a server interceptor has been configured to capture * the metadata and store it in the context. * @@ -917,7 +917,7 @@ public static void setStreamingSubscribedRunnable(Runnable runnable) { } /** - * Attempts to extract the X-A2A-Extensions header from the current gRPC context. + * Attempts to extract the A2A-Extensions header from the current gRPC context. * This will only work if a server interceptor has been configured to capture * the metadata and store it in the context. *