From 7d9e22a88f824f069f5d2cdeb9ab58e569998d2c Mon Sep 17 00:00:00 2001 From: Kabir Khan Date: Tue, 12 May 2026 15:50:06 +0100 Subject: [PATCH] fix: unify HTTP clients The compat-0.3 modules can use the main HTTP client. Co-Authored-By: Claude Opus 4.6 --- boms/sdk/pom.xml | 7 - boms/sdk/src/it/sdk-usage-test/pom.xml | 6 - compat-0.3/client/base/pom.xml | 2 +- .../org/a2aproject/sdk/compat03/A2A_v0_3.java | 12 +- .../client/ClientBuilder_v0_3_Test.java | 4 +- compat-0.3/client/transport/jsonrpc/pom.xml | 2 +- .../JSONRPCTransportConfigBuilder_v0_3.java | 14 +- .../jsonrpc/JSONRPCTransportConfig_v0_3.java | 10 +- .../JSONRPCTransportProvider_v0_3.java | 4 +- .../jsonrpc/JSONRPCTransport_v0_3.java | 29 +- compat-0.3/client/transport/rest/pom.xml | 2 +- .../transport/rest/RestErrorMapper_v0_3.java | 4 +- .../rest/RestTransportConfigBuilder_v0_3.java | 14 +- .../rest/RestTransportConfig_v0_3.java | 10 +- .../rest/RestTransportProvider_v0_3.java | 9 +- .../transport/rest/RestTransport_v0_3.java | 49 +-- compat-0.3/client/transport/spi/pom.xml | 4 + .../client/http/A2ACardResolver_v0_3.java | 19 +- .../http/A2ACardResolver_v0_3_Test.java | 15 +- .../client/http/JsonMessages_v0_3.java | 2 +- compat-0.3/http-client/pom.xml | 39 --- .../client/http/A2AHttpClient_v0_3.java | 42 --- .../client/http/A2AHttpResponse_v0_3.java | 9 - .../client/http/JdkA2AHttpClient_v0_3.java | 330 ------------------ .../compat03/client/http/package-info.java | 5 - compat-0.3/pom.xml | 8 - .../QuarkusA2AJSONRPC_v0_3_AndroidTest.java | 4 +- .../QuarkusA2AJSONRPC_v0_3_JdkTest.java | 4 +- .../QuarkusA2AJSONRPC_v0_3_VertxTest.java | 4 +- ...usA2AJSONRPC_v0_3_WithAuthAndroidTest.java | 6 +- .../QuarkusA2AJSONRPC_v0_3_WithAuthTest.java | 6 +- ...rkusA2AJSONRPC_v0_3_WithAuthVertxTest.java | 6 +- .../QuarkusA2ARest_v0_3_AndroidTest.java | 4 +- .../quarkus/QuarkusA2ARest_v0_3_JdkTest.java | 4 +- .../QuarkusA2ARest_v0_3_VertxTest.java | 4 +- ...arkusA2ARest_v0_3_WithAuthAndroidTest.java | 6 +- .../QuarkusA2ARest_v0_3_WithAuthTest.java | 6 +- ...QuarkusA2ARest_v0_3_WithAuthVertxTest.java | 6 +- .../conversion/AndroidA2AHttpClient_v0_3.java | 108 ------ .../conversion/VertxA2AHttpClient_v0_3.java | 113 ------ 40 files changed, 138 insertions(+), 794 deletions(-) rename compat-0.3/{http-client => client/transport/spi}/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java (83%) rename compat-0.3/{http-client => client/transport/spi}/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java (91%) rename compat-0.3/{http-client => client/transport/spi}/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java (99%) delete mode 100644 compat-0.3/http-client/pom.xml delete mode 100644 compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpClient_v0_3.java delete mode 100644 compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpResponse_v0_3.java delete mode 100644 compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/JdkA2AHttpClient_v0_3.java delete mode 100644 compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/package-info.java delete mode 100644 compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/AndroidA2AHttpClient_v0_3.java delete mode 100644 compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/VertxA2AHttpClient_v0_3.java diff --git a/boms/sdk/pom.xml b/boms/sdk/pom.xml index 149ebd6d3..e85d715e2 100644 --- a/boms/sdk/pom.xml +++ b/boms/sdk/pom.xml @@ -120,13 +120,6 @@ ${project.version} - - - ${project.groupId} - a2a-java-sdk-compat-0.3-http-client - ${project.version} - - ${project.groupId} diff --git a/boms/sdk/src/it/sdk-usage-test/pom.xml b/boms/sdk/src/it/sdk-usage-test/pom.xml index 851f98ea9..1f73494e9 100644 --- a/boms/sdk/src/it/sdk-usage-test/pom.xml +++ b/boms/sdk/src/it/sdk-usage-test/pom.xml @@ -113,12 +113,6 @@ a2a-java-sdk-compat-0.3-spec-grpc - - - org.a2aproject.sdk - a2a-java-sdk-compat-0.3-http-client - - org.a2aproject.sdk diff --git a/compat-0.3/client/base/pom.xml b/compat-0.3/client/base/pom.xml index 6fa0036ff..5fd78bdbe 100644 --- a/compat-0.3/client/base/pom.xml +++ b/compat-0.3/client/base/pom.xml @@ -20,7 +20,7 @@ ${project.groupId} - a2a-java-sdk-compat-0.3-http-client + a2a-java-sdk-http-client ${project.groupId} diff --git a/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/A2A_v0_3.java b/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/A2A_v0_3.java index 2be60b7ad..dfbc37386 100644 --- a/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/A2A_v0_3.java +++ b/compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/A2A_v0_3.java @@ -4,9 +4,9 @@ import java.util.List; import java.util.Map; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; import org.a2aproject.sdk.compat03.client.http.A2ACardResolver_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientError_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientJSONError_v0_3; import org.a2aproject.sdk.compat03.spec.AgentCard_v0_3; @@ -138,7 +138,7 @@ private static Message_v0_3 toMessage(List> parts, Message_v0_3.Rol * @throws A2AClientJSONError_v0_3 If the response body cannot be decoded as JSON or validated against the AgentCard schema */ public static AgentCard_v0_3 getAgentCard(String agentUrl) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { - return getAgentCard(new JdkA2AHttpClient_v0_3(), agentUrl); + return getAgentCard(A2AHttpClientFactory.create(), agentUrl); } /** @@ -150,7 +150,7 @@ public static AgentCard_v0_3 getAgentCard(String agentUrl) throws A2AClientError * @throws A2AClientError_v0_3 If an HTTP error occurs fetching the card * @throws A2AClientJSONError_v0_3 If the response body cannot be decoded as JSON or validated against the AgentCard schema */ - public static AgentCard_v0_3 getAgentCard(A2AHttpClient_v0_3 httpClient, String agentUrl) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { + public static AgentCard_v0_3 getAgentCard(A2AHttpClient httpClient, String agentUrl) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { return getAgentCard(httpClient, agentUrl, null, null); } @@ -166,7 +166,7 @@ public static AgentCard_v0_3 getAgentCard(A2AHttpClient_v0_3 httpClient, String * @throws A2AClientJSONError_v0_3 If the response body cannot be decoded as JSON or validated against the AgentCard schema */ public static AgentCard_v0_3 getAgentCard(String agentUrl, String relativeCardPath, Map authHeaders) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { - return getAgentCard(new JdkA2AHttpClient_v0_3(), agentUrl, relativeCardPath, authHeaders); + return getAgentCard(A2AHttpClientFactory.create(), agentUrl, relativeCardPath, authHeaders); } /** @@ -181,7 +181,7 @@ public static AgentCard_v0_3 getAgentCard(String agentUrl, String relativeCardPa * @throws A2AClientError_v0_3 If an HTTP error occurs fetching the card * @throws A2AClientJSONError_v0_3 If the response body cannot be decoded as JSON or validated against the AgentCard schema */ - public static AgentCard_v0_3 getAgentCard(A2AHttpClient_v0_3 httpClient, String agentUrl, String relativeCardPath, Map authHeaders) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { + public static AgentCard_v0_3 getAgentCard(A2AHttpClient httpClient, String agentUrl, String relativeCardPath, Map authHeaders) throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { A2ACardResolver_v0_3 resolver = new A2ACardResolver_v0_3(httpClient, agentUrl, relativeCardPath, authHeaders); return resolver.getAgentCard(); } diff --git a/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientBuilder_v0_3_Test.java b/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientBuilder_v0_3_Test.java index 4b4e31d0b..fa910f041 100644 --- a/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientBuilder_v0_3_Test.java +++ b/compat-0.3/client/base/src/test/java/org/a2aproject/sdk/compat03/client/ClientBuilder_v0_3_Test.java @@ -1,7 +1,7 @@ package org.a2aproject.sdk.compat03.client; import org.a2aproject.sdk.compat03.client.config.ClientConfig_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.JdkA2AHttpClient; import org.a2aproject.sdk.compat03.client.transport.grpc.GrpcTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.grpc.GrpcTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; @@ -88,7 +88,7 @@ public void shouldCreateClient_differentConfigurations() throws A2AClientExcepti Client_v0_3 client = Client_v0_3 .builder(card) .withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfigBuilder_v0_3()) - .withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfig_v0_3(new JdkA2AHttpClient_v0_3())) + .withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfig_v0_3(new JdkA2AHttpClient())) .build(); Assertions.assertNotNull(client); diff --git a/compat-0.3/client/transport/jsonrpc/pom.xml b/compat-0.3/client/transport/jsonrpc/pom.xml index fd099d2d0..af1121c5f 100644 --- a/compat-0.3/client/transport/jsonrpc/pom.xml +++ b/compat-0.3/client/transport/jsonrpc/pom.xml @@ -19,7 +19,7 @@ ${project.groupId} - a2a-java-sdk-compat-0.3-http-client + a2a-java-sdk-http-client ${project.groupId} diff --git a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfigBuilder_v0_3.java b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfigBuilder_v0_3.java index be9d95608..557832b97 100644 --- a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfigBuilder_v0_3.java +++ b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfigBuilder_v0_3.java @@ -1,14 +1,14 @@ package org.a2aproject.sdk.compat03.client.transport.jsonrpc; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportConfigBuilder_v0_3; public class JSONRPCTransportConfigBuilder_v0_3 extends ClientTransportConfigBuilder_v0_3 { - private A2AHttpClient_v0_3 httpClient; + private A2AHttpClient httpClient; - public JSONRPCTransportConfigBuilder_v0_3 httpClient(A2AHttpClient_v0_3 httpClient) { + public JSONRPCTransportConfigBuilder_v0_3 httpClient(A2AHttpClient httpClient) { this.httpClient = httpClient; return this; @@ -16,13 +16,13 @@ public JSONRPCTransportConfigBuilder_v0_3 httpClient(A2AHttpClient_v0_3 httpClie @Override public JSONRPCTransportConfig_v0_3 build() { - // No HTTP client provided, fallback to the default one (JDK-based implementation) + // No HTTP client provided, fallback to the default one if (httpClient == null) { - httpClient = new JdkA2AHttpClient_v0_3(); + httpClient = A2AHttpClientFactory.create(); } JSONRPCTransportConfig_v0_3 config = new JSONRPCTransportConfig_v0_3(httpClient); config.setInterceptors(this.interceptors); return config; } -} \ No newline at end of file +} diff --git a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfig_v0_3.java b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfig_v0_3.java index 7e01e3e56..9e67e4640 100644 --- a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfig_v0_3.java +++ b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportConfig_v0_3.java @@ -1,21 +1,21 @@ package org.a2aproject.sdk.compat03.client.transport.jsonrpc; +import org.a2aproject.sdk.client.http.A2AHttpClient; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportConfig_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; public class JSONRPCTransportConfig_v0_3 extends ClientTransportConfig_v0_3 { - private final A2AHttpClient_v0_3 httpClient; + private final A2AHttpClient httpClient; public JSONRPCTransportConfig_v0_3() { this.httpClient = null; } - public JSONRPCTransportConfig_v0_3(A2AHttpClient_v0_3 httpClient) { + public JSONRPCTransportConfig_v0_3(A2AHttpClient httpClient) { this.httpClient = httpClient; } - public A2AHttpClient_v0_3 getHttpClient() { + public A2AHttpClient getHttpClient() { return httpClient; } -} \ No newline at end of file +} diff --git a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportProvider_v0_3.java b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportProvider_v0_3.java index afe66dadf..3787bf117 100644 --- a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportProvider_v0_3.java +++ b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransportProvider_v0_3.java @@ -1,6 +1,6 @@ package org.a2aproject.sdk.compat03.client.transport.jsonrpc; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportProvider_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientException_v0_3; import org.a2aproject.sdk.compat03.spec.AgentCard_v0_3; @@ -11,7 +11,7 @@ public class JSONRPCTransportProvider_v0_3 implements ClientTransportProvider_v0 @Override public JSONRPCTransport_v0_3 create(JSONRPCTransportConfig_v0_3 clientTransportConfig, AgentCard_v0_3 agentCard, String agentUrl) throws A2AClientException_v0_3 { if (clientTransportConfig == null) { - clientTransportConfig = new JSONRPCTransportConfig_v0_3(new JdkA2AHttpClient_v0_3()); + clientTransportConfig = new JSONRPCTransportConfig_v0_3(A2AHttpClientFactory.create()); } return new JSONRPCTransport_v0_3(clientTransportConfig.getHttpClient(), agentCard, agentUrl, clientTransportConfig.getInterceptors()); diff --git a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransport_v0_3.java b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransport_v0_3.java index d379277cd..e7ee7eb47 100644 --- a/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransport_v0_3.java +++ b/compat-0.3/client/transport/jsonrpc/src/main/java/org/a2aproject/sdk/compat03/client/transport/jsonrpc/JSONRPCTransport_v0_3.java @@ -10,13 +10,14 @@ import org.a2aproject.sdk.compat03.json.JsonProcessingException_v0_3; import org.a2aproject.sdk.compat03.json.JsonUtil_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; +import org.a2aproject.sdk.client.http.A2AHttpResponse; +import org.a2aproject.sdk.client.http.ServerSentEvent; import org.a2aproject.sdk.compat03.client.http.A2ACardResolver_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.ClientCallContext_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.ClientCallInterceptor_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.PayloadAndHeaders_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpResponse_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransport_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientError_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientException_v0_3; @@ -69,7 +70,7 @@ public class JSONRPCTransport_v0_3 implements ClientTransport_v0_3 { private static final Class DELETE_TASK_PUSH_NOTIFICATION_CONFIG_RESPONSE_REFERENCE = DeleteTaskPushNotificationConfigResponse_v0_3.class; private static final Class GET_AUTHENTICATED_EXTENDED_CARD_RESPONSE_REFERENCE = GetAuthenticatedExtendedCardResponse_v0_3.class; - private final A2AHttpClient_v0_3 httpClient; + private final A2AHttpClient httpClient; private final String agentUrl; private final List interceptors; private AgentCard_v0_3 agentCard; @@ -83,9 +84,9 @@ public JSONRPCTransport_v0_3(AgentCard_v0_3 agentCard) { this(null, agentCard, agentCard.url(), null); } - public JSONRPCTransport_v0_3(A2AHttpClient_v0_3 httpClient, AgentCard_v0_3 agentCard, + public JSONRPCTransport_v0_3(A2AHttpClient httpClient, AgentCard_v0_3 agentCard, String agentUrl, List interceptors) { - this.httpClient = httpClient == null ? new JdkA2AHttpClient_v0_3() : httpClient; + this.httpClient = httpClient == null ? A2AHttpClientFactory.create() : httpClient; this.agentCard = agentCard; this.agentUrl = agentUrl; this.interceptors = interceptors; @@ -133,9 +134,9 @@ public void sendMessageStreaming(MessageSendParams_v0_3 request, Consumer sseEventListener.onMessage(msg, ref.get()), + event -> sseEventListener.onMessage(event.data(), ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), () -> { // Signal normal stream completion to error handler (null error means success) @@ -314,9 +315,9 @@ public void resubscribe(TaskIdParams_v0_3 request, Consumer sseEventListener.onMessage(msg, ref.get()), + event -> sseEventListener.onMessage(event.data(), ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), () -> { // Signal normal stream completion to error handler (null error means success) @@ -385,16 +386,16 @@ private PayloadAndHeaders_v0_3 applyInterceptors(String methodName, Object paylo } private String sendPostRequest(PayloadAndHeaders_v0_3 payloadAndHeaders) throws IOException, InterruptedException, JsonProcessingException_v0_3 { - A2AHttpClient_v0_3.PostBuilder builder = createPostBuilder(payloadAndHeaders); - A2AHttpResponse_v0_3 response = builder.post(); + A2AHttpClient.PostBuilder builder = createPostBuilder(payloadAndHeaders); + A2AHttpResponse response = builder.post(); if (!response.success()) { throw new IOException("Request failed " + response.status()); } return response.body(); } - private A2AHttpClient_v0_3.PostBuilder createPostBuilder(PayloadAndHeaders_v0_3 payloadAndHeaders) throws JsonProcessingException_v0_3 { - A2AHttpClient_v0_3.PostBuilder postBuilder = httpClient.createPost() + private A2AHttpClient.PostBuilder createPostBuilder(PayloadAndHeaders_v0_3 payloadAndHeaders) throws JsonProcessingException_v0_3 { + A2AHttpClient.PostBuilder postBuilder = httpClient.createPost() .url(agentUrl) .addHeader("Content-Type", "application/json") .body(JsonUtil_v0_3.toJson(payloadAndHeaders.getPayload())); diff --git a/compat-0.3/client/transport/rest/pom.xml b/compat-0.3/client/transport/rest/pom.xml index 2539152af..0b101ed9e 100644 --- a/compat-0.3/client/transport/rest/pom.xml +++ b/compat-0.3/client/transport/rest/pom.xml @@ -35,7 +35,7 @@ ${project.groupId} - a2a-java-sdk-compat-0.3-http-client + a2a-java-sdk-http-client com.google.protobuf diff --git a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestErrorMapper_v0_3.java b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestErrorMapper_v0_3.java index d6732726e..d9b6d1368 100644 --- a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestErrorMapper_v0_3.java +++ b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestErrorMapper_v0_3.java @@ -4,7 +4,7 @@ import com.google.gson.JsonObject; import org.a2aproject.sdk.compat03.json.JsonProcessingException_v0_3; import org.a2aproject.sdk.compat03.json.JsonUtil_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpResponse_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpResponse; import org.a2aproject.sdk.compat03.spec.A2AClientException_v0_3; import org.a2aproject.sdk.compat03.spec.AuthenticatedExtendedCardNotConfiguredError_v0_3; import org.a2aproject.sdk.compat03.spec.ContentTypeNotSupportedError_v0_3; @@ -26,7 +26,7 @@ */ public class RestErrorMapper_v0_3 { - public static A2AClientException_v0_3 mapRestError(A2AHttpResponse_v0_3 response) { + public static A2AClientException_v0_3 mapRestError(A2AHttpResponse response) { return RestErrorMapper_v0_3.mapRestError(response.body(), response.status()); } diff --git a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfigBuilder_v0_3.java b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfigBuilder_v0_3.java index 13794ee3f..cab5e3a82 100644 --- a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfigBuilder_v0_3.java +++ b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfigBuilder_v0_3.java @@ -1,28 +1,28 @@ package org.a2aproject.sdk.compat03.client.transport.rest; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportConfigBuilder_v0_3; import org.jspecify.annotations.Nullable; public class RestTransportConfigBuilder_v0_3 extends ClientTransportConfigBuilder_v0_3 { - private @Nullable A2AHttpClient_v0_3 httpClient; + private @Nullable A2AHttpClient httpClient; - public RestTransportConfigBuilder_v0_3 httpClient(A2AHttpClient_v0_3 httpClient) { + public RestTransportConfigBuilder_v0_3 httpClient(A2AHttpClient httpClient) { this.httpClient = httpClient; return this; } @Override public RestTransportConfig_v0_3 build() { - // No HTTP client provided, fallback to the default one (JDK-based implementation) + // No HTTP client provided, fallback to the default one if (httpClient == null) { - httpClient = new JdkA2AHttpClient_v0_3(); + httpClient = A2AHttpClientFactory.create(); } RestTransportConfig_v0_3 config = new RestTransportConfig_v0_3(httpClient); config.setInterceptors(this.interceptors); return config; } -} \ No newline at end of file +} diff --git a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfig_v0_3.java b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfig_v0_3.java index 0d6b1f859..16428649b 100644 --- a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfig_v0_3.java +++ b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportConfig_v0_3.java @@ -1,22 +1,22 @@ package org.a2aproject.sdk.compat03.client.transport.rest; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClient; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportConfig_v0_3; import org.jspecify.annotations.Nullable; public class RestTransportConfig_v0_3 extends ClientTransportConfig_v0_3 { - private final @Nullable A2AHttpClient_v0_3 httpClient; + private final @Nullable A2AHttpClient httpClient; public RestTransportConfig_v0_3() { this.httpClient = null; } - public RestTransportConfig_v0_3(A2AHttpClient_v0_3 httpClient) { + public RestTransportConfig_v0_3(A2AHttpClient httpClient) { this.httpClient = httpClient; } - public @Nullable A2AHttpClient_v0_3 getHttpClient() { + public @Nullable A2AHttpClient getHttpClient() { return httpClient; } -} \ No newline at end of file +} diff --git a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportProvider_v0_3.java b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportProvider_v0_3.java index 87dcdf5ce..46cf3fa1b 100644 --- a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportProvider_v0_3.java +++ b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransportProvider_v0_3.java @@ -1,6 +1,6 @@ package org.a2aproject.sdk.compat03.client.transport.rest; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransportProvider_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientException_v0_3; import org.a2aproject.sdk.compat03.spec.AgentCard_v0_3; @@ -15,11 +15,10 @@ public String getTransportProtocol() { @Override public RestTransport_v0_3 create(RestTransportConfig_v0_3 clientTransportConfig, AgentCard_v0_3 agentCard, String agentUrl) throws A2AClientException_v0_3 { - RestTransportConfig_v0_3 transportConfig = clientTransportConfig; - if (transportConfig == null) { - transportConfig = new RestTransportConfig_v0_3(new JdkA2AHttpClient_v0_3()); + if (clientTransportConfig == null) { + clientTransportConfig = new RestTransportConfig_v0_3(A2AHttpClientFactory.create()); } - return new RestTransport_v0_3(clientTransportConfig.getHttpClient(), agentCard, agentUrl, transportConfig.getInterceptors()); + return new RestTransport_v0_3(clientTransportConfig.getHttpClient(), agentCard, agentUrl, clientTransportConfig.getInterceptors()); } @Override diff --git a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransport_v0_3.java b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransport_v0_3.java index 7dc0b40fb..6ff2d560d 100644 --- a/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransport_v0_3.java +++ b/compat-0.3/client/transport/rest/src/main/java/org/a2aproject/sdk/compat03/client/transport/rest/RestTransport_v0_3.java @@ -6,10 +6,11 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.MessageOrBuilder; import com.google.protobuf.util.JsonFormat; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; +import org.a2aproject.sdk.client.http.A2AHttpResponse; +import org.a2aproject.sdk.client.http.ServerSentEvent; import org.a2aproject.sdk.compat03.client.http.A2ACardResolver_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpResponse_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.sse.RestSSEEventListener_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.ClientTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.ClientCallContext_v0_3; @@ -58,7 +59,7 @@ public class RestTransport_v0_3 implements ClientTransport_v0_3 { private static final Logger log = Logger.getLogger(RestTransport_v0_3.class.getName()); - private final A2AHttpClient_v0_3 httpClient; + private final A2AHttpClient httpClient; private final String agentUrl; private @Nullable final List interceptors; private AgentCard_v0_3 agentCard; @@ -68,9 +69,9 @@ public RestTransport_v0_3(AgentCard_v0_3 agentCard) { this(null, agentCard, agentCard.url(), null); } - public RestTransport_v0_3(@Nullable A2AHttpClient_v0_3 httpClient, AgentCard_v0_3 agentCard, + public RestTransport_v0_3(@Nullable A2AHttpClient httpClient, AgentCard_v0_3 agentCard, String agentUrl, @Nullable List interceptors) { - this.httpClient = httpClient == null ? new JdkA2AHttpClient_v0_3() : httpClient; + this.httpClient = httpClient == null ? A2AHttpClientFactory.create() : httpClient; this.agentCard = agentCard; this.agentUrl = agentUrl.endsWith("/") ? agentUrl.substring(0, agentUrl.length() - 1) : agentUrl; this.interceptors = interceptors; @@ -110,9 +111,9 @@ public void sendMessageStreaming(MessageSendParams_v0_3 messageSendParams, Consu AtomicReference> ref = new AtomicReference<>(); RestSSEEventListener_v0_3 sseEventListener = new RestSSEEventListener_v0_3(eventConsumer, errorConsumer); try { - A2AHttpClient_v0_3.PostBuilder postBuilder = createPostBuilder(agentUrl + "/v1/message:stream", payloadAndHeaders); + A2AHttpClient.PostBuilder postBuilder = createPostBuilder(agentUrl + "/v1/message:stream", payloadAndHeaders); ref.set(postBuilder.postAsyncSSE( - msg -> sseEventListener.onMessage(msg, ref.get()), + event -> sseEventListener.onMessage(event.data(), ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), () -> { // We don't need to do anything special on completion @@ -140,13 +141,13 @@ public Task_v0_3 getTask(TaskQueryParams_v0_3 taskQueryParams, @Nullable ClientC } else { url = agentUrl + String.format("/v1/tasks/%1s", taskQueryParams.id()); } - A2AHttpClient_v0_3.GetBuilder getBuilder = httpClient.createGet().url(url); + A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url); if (payloadAndHeaders.getHeaders() != null) { for (Map.Entry entry : payloadAndHeaders.getHeaders().entrySet()) { getBuilder.addHeader(entry.getKey(), entry.getValue()); } } - A2AHttpResponse_v0_3 response = getBuilder.get(); + A2AHttpResponse response = getBuilder.get(); if (!response.success()) { throw RestErrorMapper_v0_3.mapRestError(response); } @@ -213,13 +214,13 @@ public TaskPushNotificationConfig_v0_3 getTaskPushNotificationConfiguration(GetT agentCard, context); try { String url = agentUrl + String.format("/v1/tasks/%1s/pushNotificationConfigs/%2s", request.id(), configId); - A2AHttpClient_v0_3.GetBuilder getBuilder = httpClient.createGet().url(url); + A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url); if (payloadAndHeaders.getHeaders() != null) { for (Map.Entry entry : payloadAndHeaders.getHeaders().entrySet()) { getBuilder.addHeader(entry.getKey(), entry.getValue()); } } - A2AHttpResponse_v0_3 response = getBuilder.get(); + A2AHttpResponse response = getBuilder.get(); if (!response.success()) { throw RestErrorMapper_v0_3.mapRestError(response); } @@ -243,13 +244,13 @@ public List listTaskPushNotificationConfigurati agentCard, context); try { String url = agentUrl + String.format("/v1/tasks/%1s/pushNotificationConfigs", request.id()); - A2AHttpClient_v0_3.GetBuilder getBuilder = httpClient.createGet().url(url); + A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url); if (payloadAndHeaders.getHeaders() != null) { for (Map.Entry entry : payloadAndHeaders.getHeaders().entrySet()) { getBuilder.addHeader(entry.getKey(), entry.getValue()); } } - A2AHttpResponse_v0_3 response = getBuilder.get(); + A2AHttpResponse response = getBuilder.get(); if (!response.success()) { throw RestErrorMapper_v0_3.mapRestError(response); } @@ -272,13 +273,13 @@ public void deleteTaskPushNotificationConfigurations(DeleteTaskPushNotificationC agentCard, context); try { String url = agentUrl + String.format("/v1/tasks/%1s/pushNotificationConfigs/%2s", request.id(), request.pushNotificationConfigId()); - A2AHttpClient_v0_3.DeleteBuilder deleteBuilder = httpClient.createDelete().url(url); + A2AHttpClient.DeleteBuilder deleteBuilder = httpClient.createDelete().url(url); if (payloadAndHeaders.getHeaders() != null) { for (Map.Entry entry : payloadAndHeaders.getHeaders().entrySet()) { deleteBuilder.addHeader(entry.getKey(), entry.getValue()); } } - A2AHttpResponse_v0_3 response = deleteBuilder.delete(); + A2AHttpResponse response = deleteBuilder.delete(); if (!response.success()) { throw RestErrorMapper_v0_3.mapRestError(response); } @@ -301,9 +302,9 @@ public void resubscribe(TaskIdParams_v0_3 request, Consumer sseEventListener.onMessage(msg, ref.get()), + event -> sseEventListener.onMessage(event.data(), ref.get()), throwable -> sseEventListener.onError(throwable, ref.get()), () -> { // We don't need to do anything special on completion @@ -332,13 +333,13 @@ public AgentCard_v0_3 getAgentCard(@Nullable ClientCallContext_v0_3 context) thr PayloadAndHeaders_v0_3 payloadAndHeaders = applyInterceptors(GetAuthenticatedExtendedCardRequest_v0_3.METHOD, null, agentCard, context); String url = agentUrl + String.format("/v1/card"); - A2AHttpClient_v0_3.GetBuilder getBuilder = httpClient.createGet().url(url); + A2AHttpClient.GetBuilder getBuilder = httpClient.createGet().url(url); if (payloadAndHeaders.getHeaders() != null) { for (Map.Entry entry : payloadAndHeaders.getHeaders().entrySet()) { getBuilder.addHeader(entry.getKey(), entry.getValue()); } } - A2AHttpResponse_v0_3 response = getBuilder.get(); + A2AHttpResponse response = getBuilder.get(); if (!response.success()) { throw RestErrorMapper_v0_3.mapRestError(response); } @@ -371,8 +372,8 @@ private PayloadAndHeaders_v0_3 applyInterceptors(String methodName, @Nullable Me } private String sendPostRequest(String url, PayloadAndHeaders_v0_3 payloadAndHeaders) throws IOException, InterruptedException, JsonProcessingException_v0_3 { - A2AHttpClient_v0_3.PostBuilder builder = createPostBuilder(url, payloadAndHeaders); - A2AHttpResponse_v0_3 response = builder.post(); + A2AHttpClient.PostBuilder builder = createPostBuilder(url, payloadAndHeaders); + A2AHttpResponse response = builder.post(); if (!response.success()) { log.fine("Error on POST processing " + JsonFormat.printer().print((MessageOrBuilder) payloadAndHeaders.getPayload())); throw RestErrorMapper_v0_3.mapRestError(response); @@ -380,9 +381,9 @@ private String sendPostRequest(String url, PayloadAndHeaders_v0_3 payloadAndHead return response.body(); } - private A2AHttpClient_v0_3.PostBuilder createPostBuilder(String url, PayloadAndHeaders_v0_3 payloadAndHeaders) throws JsonProcessingException_v0_3, InvalidProtocolBufferException { + private A2AHttpClient.PostBuilder createPostBuilder(String url, PayloadAndHeaders_v0_3 payloadAndHeaders) throws JsonProcessingException_v0_3, InvalidProtocolBufferException { log.fine(JsonFormat.printer().print((MessageOrBuilder) payloadAndHeaders.getPayload())); - A2AHttpClient_v0_3.PostBuilder postBuilder = httpClient.createPost() + A2AHttpClient.PostBuilder postBuilder = httpClient.createPost() .url(url) .addHeader("Content-Type", "application/json") .body(JsonFormat.printer().print((MessageOrBuilder) payloadAndHeaders.getPayload())); diff --git a/compat-0.3/client/transport/spi/pom.xml b/compat-0.3/client/transport/spi/pom.xml index b8e8d1730..d4b7c9bb3 100644 --- a/compat-0.3/client/transport/spi/pom.xml +++ b/compat-0.3/client/transport/spi/pom.xml @@ -17,6 +17,10 @@ Java SDK for the Agent2Agent Protocol (A2A) - Client Transport SPI + + ${project.groupId} + a2a-java-sdk-http-client + ${project.groupId} a2a-java-sdk-compat-0.3-spec diff --git a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java b/compat-0.3/client/transport/spi/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java similarity index 83% rename from compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java rename to compat-0.3/client/transport/spi/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java index af554f978..2d91eb195 100644 --- a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java +++ b/compat-0.3/client/transport/spi/src/main/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3.java @@ -5,6 +5,9 @@ import java.net.URISyntaxException; import java.util.Map; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpClientFactory; +import org.a2aproject.sdk.client.http.A2AHttpResponse; import org.a2aproject.sdk.compat03.json.JsonProcessingException_v0_3; import org.a2aproject.sdk.compat03.json.JsonUtil_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientError_v0_3; @@ -13,7 +16,7 @@ import org.jspecify.annotations.Nullable; public class A2ACardResolver_v0_3 { - private final A2AHttpClient_v0_3 httpClient; + private final A2AHttpClient httpClient; private final String url; private final @Nullable Map authHeaders; @@ -21,13 +24,13 @@ public class A2ACardResolver_v0_3 { /** * Get the agent card for an A2A agent. - * The {@code JdkA2AHttpClient} will be used to fetch the agent card. + * The HTTP client will be auto-selected via {@link A2AHttpClientFactory}. * * @param baseUrl the base URL for the agent whose agent card we want to retrieve * @throws A2AClientError_v0_3 if the URL for the agent is invalid */ public A2ACardResolver_v0_3(String baseUrl) throws A2AClientError_v0_3 { - this(new JdkA2AHttpClient_v0_3(), baseUrl, null, null); + this(A2AHttpClientFactory.create(), baseUrl, null, null); } /** @@ -37,7 +40,7 @@ public A2ACardResolver_v0_3(String baseUrl) throws A2AClientError_v0_3 { * @param baseUrl the base URL for the agent whose agent card we want to retrieve * @throws A2AClientError_v0_3 if the URL for the agent is invalid */ - public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl) throws A2AClientError_v0_3 { + public A2ACardResolver_v0_3(A2AHttpClient httpClient, String baseUrl) throws A2AClientError_v0_3 { this(httpClient, baseUrl, null, null); } @@ -48,7 +51,7 @@ public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl) throw * agent URL, defaults to ".well-known/agent-card.json" * @throws A2AClientError_v0_3 if the URL for the agent is invalid */ - public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl, String agentCardPath) throws A2AClientError_v0_3 { + public A2ACardResolver_v0_3(A2AHttpClient httpClient, String baseUrl, String agentCardPath) throws A2AClientError_v0_3 { this(httpClient, baseUrl, agentCardPath, null); } @@ -60,7 +63,7 @@ public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl, Strin * @param authHeaders the HTTP authentication headers to use. May be {@code null} * @throws A2AClientError_v0_3 if the URL for the agent is invalid */ - public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl, @Nullable String agentCardPath, + public A2ACardResolver_v0_3(A2AHttpClient httpClient, String baseUrl, @Nullable String agentCardPath, @Nullable Map authHeaders) throws A2AClientError_v0_3 { this.httpClient = httpClient; String effectiveAgentCardPath = agentCardPath == null || agentCardPath.isEmpty() ? DEFAULT_AGENT_CARD_PATH : agentCardPath; @@ -80,7 +83,7 @@ public A2ACardResolver_v0_3(A2AHttpClient_v0_3 httpClient, String baseUrl, @Null * @throws A2AClientJSONError_v0_3 If the response body cannot be decoded as JSON or validated against the AgentCard schema */ public AgentCard_v0_3 getAgentCard() throws A2AClientError_v0_3, A2AClientJSONError_v0_3 { - A2AHttpClient_v0_3.GetBuilder builder = httpClient.createGet() + A2AHttpClient.GetBuilder builder = httpClient.createGet() .url(url) .addHeader("Content-Type", "application/json"); @@ -92,7 +95,7 @@ public AgentCard_v0_3 getAgentCard() throws A2AClientError_v0_3, A2AClientJSONEr String body; try { - A2AHttpResponse_v0_3 response = builder.get(); + A2AHttpResponse response = builder.get(); if (!response.success()) { throw new A2AClientError_v0_3("Failed to obtain agent card: " + response.status()); } diff --git a/compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java b/compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java similarity index 91% rename from compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java rename to compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java index f632d3e22..658b0f49d 100644 --- a/compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java +++ b/compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/A2ACardResolver_v0_3_Test.java @@ -5,14 +5,17 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; +import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; +import org.a2aproject.sdk.client.http.A2AHttpClient; +import org.a2aproject.sdk.client.http.A2AHttpResponse; +import org.a2aproject.sdk.client.http.ServerSentEvent; import org.a2aproject.sdk.compat03.json.JsonUtil_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientError_v0_3; import org.a2aproject.sdk.compat03.spec.A2AClientJSONError_v0_3; import org.a2aproject.sdk.compat03.spec.AgentCard_v0_3; -import java.util.Map; import org.junit.jupiter.api.Test; public class A2ACardResolver_v0_3_Test { @@ -109,7 +112,7 @@ public void testGetAgentCardRequestError() throws Exception { assertTrue(msg.contains("503")); } - private static class TestHttpClient implements A2AHttpClient_v0_3 { + private static class TestHttpClient implements A2AHttpClient { int status = 200; String body; String url; @@ -129,11 +132,11 @@ public DeleteBuilder createDelete() { return null; } - class TestGetBuilder implements A2AHttpClient_v0_3.GetBuilder { + class TestGetBuilder implements A2AHttpClient.GetBuilder { @Override - public A2AHttpResponse_v0_3 get() throws IOException, InterruptedException { - return new A2AHttpResponse_v0_3() { + public A2AHttpResponse get() throws IOException, InterruptedException { + return new A2AHttpResponse() { @Override public int status() { return status; @@ -152,7 +155,7 @@ public String body() { } @Override - public CompletableFuture getAsyncSSE(Consumer messageConsumer, Consumer errorConsumer, Runnable completeRunnable) throws IOException, InterruptedException { + public CompletableFuture getAsyncSSE(Consumer messageConsumer, Consumer errorConsumer, Runnable completeRunnable) throws IOException, InterruptedException { return null; } diff --git a/compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java b/compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java similarity index 99% rename from compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java rename to compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java index 751dadf6c..54ea3f41e 100644 --- a/compat-0.3/http-client/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java +++ b/compat-0.3/client/transport/spi/src/test/java/org/a2aproject/sdk/compat03/client/http/JsonMessages_v0_3.java @@ -161,4 +161,4 @@ public class JsonMessages_v0_3 { }"""; -} \ No newline at end of file +} diff --git a/compat-0.3/http-client/pom.xml b/compat-0.3/http-client/pom.xml deleted file mode 100644 index 61fb8bd3a..000000000 --- a/compat-0.3/http-client/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.a2aproject.sdk - a2a-java-sdk-compat-0.3-parent - 1.0.0.Beta2-SNAPSHOT - .. - - a2a-java-sdk-compat-0.3-http-client - - jar - - Java SDK A2A Compat 0.3 HTTP Client - Java SDK for the Agent2Agent Protocol (A2A) - HTTP Client (0.3 compat) - - - - ${project.groupId} - a2a-java-sdk-compat-0.3-spec - - - - org.junit.jupiter - junit-jupiter-api - test - - - - org.mock-server - mockserver-netty - test - - - - diff --git a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpClient_v0_3.java b/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpClient_v0_3.java deleted file mode 100644 index 2387e725e..000000000 --- a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpClient_v0_3.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.a2aproject.sdk.compat03.client.http; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; - -public interface A2AHttpClient_v0_3 { - - GetBuilder createGet(); - - PostBuilder createPost(); - - DeleteBuilder createDelete(); - - interface Builder> { - T url(String s); - T addHeaders(Map headers); - T addHeader(String name, String value); - } - - interface GetBuilder extends Builder { - A2AHttpResponse_v0_3 get() throws IOException, InterruptedException; - CompletableFuture getAsyncSSE( - Consumer messageConsumer, - Consumer errorConsumer, - Runnable completeRunnable) throws IOException, InterruptedException; - } - - interface PostBuilder extends Builder { - PostBuilder body(String body); - A2AHttpResponse_v0_3 post() throws IOException, InterruptedException; - CompletableFuture postAsyncSSE( - Consumer messageConsumer, - Consumer errorConsumer, - Runnable completeRunnable) throws IOException, InterruptedException; - } - - interface DeleteBuilder extends Builder { - A2AHttpResponse_v0_3 delete() throws IOException, InterruptedException; - } -} diff --git a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpResponse_v0_3.java b/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpResponse_v0_3.java deleted file mode 100644 index fe082648d..000000000 --- a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/A2AHttpResponse_v0_3.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.a2aproject.sdk.compat03.client.http; - -public interface A2AHttpResponse_v0_3 { - int status(); - - boolean success(); - - String body(); -} diff --git a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/JdkA2AHttpClient_v0_3.java b/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/JdkA2AHttpClient_v0_3.java deleted file mode 100644 index 2d1838b86..000000000 --- a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/JdkA2AHttpClient_v0_3.java +++ /dev/null @@ -1,330 +0,0 @@ -package org.a2aproject.sdk.compat03.client.http; - -import static java.net.HttpURLConnection.HTTP_FORBIDDEN; -import static java.net.HttpURLConnection.HTTP_MULT_CHOICE; -import static java.net.HttpURLConnection.HTTP_OK; -import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; - -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.net.http.HttpResponse.BodyHandler; -import java.net.http.HttpResponse.BodyHandlers; -import java.net.http.HttpResponse.BodySubscribers; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Flow; -import java.util.function.Consumer; -import org.jspecify.annotations.Nullable; - -import org.a2aproject.sdk.common.A2AErrorMessages; - -public class JdkA2AHttpClient_v0_3 implements A2AHttpClient_v0_3 { - - private final HttpClient httpClient; - - public JdkA2AHttpClient_v0_3() { - httpClient = HttpClient.newBuilder() - .version(HttpClient.Version.HTTP_2) - .followRedirects(HttpClient.Redirect.NORMAL) - .build(); - } - - @Override - public GetBuilder createGet() { - return new JdkGetBuilder(); - } - - @Override - public PostBuilder createPost() { - return new JdkPostBuilder(); - } - - @Override - public DeleteBuilder createDelete() { - return new JdkDeleteBuilder(); - } - - private abstract class JdkBuilder> implements Builder { - private String url = ""; - private Map headers = new HashMap<>(); - - @Override - public T url(String url) { - this.url = url; - return self(); - } - - @Override - public T addHeader(String name, String value) { - headers.put(name, value); - return self(); - } - - @Override - public T addHeaders(Map headers) { - if(headers != null && ! headers.isEmpty()) { - for (Map.Entry entry : headers.entrySet()) { - addHeader(entry.getKey(), entry.getValue()); - } - } - return self(); - } - - @SuppressWarnings("unchecked") - T self() { - return (T) this; - } - - protected HttpRequest.Builder createRequestBuilder() throws IOException { - HttpRequest.Builder builder = HttpRequest.newBuilder() - .uri(URI.create(url)); - for (Map.Entry headerEntry : headers.entrySet()) { - builder.header(headerEntry.getKey(), headerEntry.getValue()); - } - return builder; - } - - protected CompletableFuture asyncRequest( - HttpRequest request, - Consumer messageConsumer, - Consumer errorConsumer, - Runnable completeRunnable - ) { - Flow.Subscriber subscriber = new Flow.Subscriber() { - private Flow.@Nullable Subscription subscription; - private volatile boolean errorRaised = false; - - @Override - public void onSubscribe(Flow.Subscription subscription) { - this.subscription = subscription; - this.subscription.request(1); - } - - @Override - public void onNext(String item) { - // SSE messages sometimes start with "data:". Strip that off - if (item != null && item.startsWith("data:")) { - item = item.substring(5).trim(); - if (!item.isEmpty()) { - messageConsumer.accept(item); - } - } - if (subscription != null) { - subscription.request(1); - } - } - - @Override - public void onError(Throwable throwable) { - if (!errorRaised) { - errorRaised = true; - errorConsumer.accept(throwable); - } - if (subscription != null) { - subscription.cancel(); - } - } - - @Override - public void onComplete() { - if (!errorRaised) { - completeRunnable.run(); - } - if (subscription != null) { - subscription.cancel(); - } - } - }; - - // Create a custom body handler that checks status before processing body - BodyHandler bodyHandler = responseInfo -> { - // Check for authentication/authorization errors only - if (responseInfo.statusCode() == HTTP_UNAUTHORIZED || responseInfo.statusCode() == HTTP_FORBIDDEN) { - final String errorMessage; - if (responseInfo.statusCode() == HTTP_UNAUTHORIZED) { - errorMessage = A2AErrorMessages.AUTHENTICATION_FAILED; - } else { - errorMessage = A2AErrorMessages.AUTHORIZATION_FAILED; - } - // Return a body subscriber that immediately signals error - return BodySubscribers.fromSubscriber(new Flow.Subscriber>() { - @Override - public void onSubscribe(Flow.Subscription subscription) { - subscriber.onError(new IOException(errorMessage)); - } - - @Override - public void onNext(List item) { - // Should not be called - } - - @Override - public void onError(Throwable throwable) { - // Should not be called - } - - @Override - public void onComplete() { - // Should not be called - } - }); - } else { - // For all other status codes (including other errors), proceed with normal line subscriber - return BodyHandlers.fromLineSubscriber(subscriber).apply(responseInfo); - } - }; - - // Send the response async, and let the subscriber handle the lines. - return httpClient.sendAsync(request, bodyHandler) - .thenAccept(response -> { - // Handle non-authentication/non-authorization errors here - if (!isSuccessStatus(response.statusCode()) && - response.statusCode() != HTTP_UNAUTHORIZED && - response.statusCode() != HTTP_FORBIDDEN) { - subscriber.onError(new IOException("Request failed with status " + response.statusCode() + ":" + response.body())); - } - }) - .exceptionally(throwable -> { - // Handle network errors (timeouts, connection failures, etc.) - subscriber.onError(throwable); - return null; - }); - } - } - - private class JdkGetBuilder extends JdkBuilder implements A2AHttpClient_v0_3.GetBuilder { - - private HttpRequest.Builder createRequestBuilder(boolean SSE) throws IOException { - HttpRequest.Builder builder = super.createRequestBuilder().GET(); - if (SSE) { - builder.header("Accept", "text/event-stream"); - } - return builder; - } - - @Override - public A2AHttpResponse_v0_3 get() throws IOException, InterruptedException { - HttpRequest request = createRequestBuilder(false) - .build(); - HttpResponse response = - httpClient.send(request, BodyHandlers.ofString(StandardCharsets.UTF_8)); - - if (response.statusCode() == HTTP_UNAUTHORIZED) { - throw new IOException(A2AErrorMessages.AUTHENTICATION_FAILED); - } else if (response.statusCode() == HTTP_FORBIDDEN) { - throw new IOException(A2AErrorMessages.AUTHORIZATION_FAILED); - } - - return new JdkHttpResponse(response); - } - - @Override - public CompletableFuture getAsyncSSE( - Consumer messageConsumer, - Consumer errorConsumer, - Runnable completeRunnable) throws IOException, InterruptedException { - HttpRequest request = createRequestBuilder(true) - .build(); - return super.asyncRequest(request, messageConsumer, errorConsumer, completeRunnable); - } - - } - - private class JdkDeleteBuilder extends JdkBuilder implements A2AHttpClient_v0_3.DeleteBuilder { - - @Override - public A2AHttpResponse_v0_3 delete() throws IOException, InterruptedException { - HttpRequest request = super.createRequestBuilder().DELETE().build(); - HttpResponse response = - httpClient.send(request, BodyHandlers.ofString(StandardCharsets.UTF_8)); - - if (response.statusCode() == HTTP_UNAUTHORIZED) { - throw new IOException(A2AErrorMessages.AUTHENTICATION_FAILED); - } else if (response.statusCode() == HTTP_FORBIDDEN) { - throw new IOException(A2AErrorMessages.AUTHORIZATION_FAILED); - } - - return new JdkHttpResponse(response); - } - - } - - private class JdkPostBuilder extends JdkBuilder implements A2AHttpClient_v0_3.PostBuilder { - String body = ""; - - @Override - public PostBuilder body(String body) { - this.body = body; - return self(); - } - - private HttpRequest.Builder createRequestBuilder(boolean SSE) throws IOException { - HttpRequest.Builder builder = super.createRequestBuilder() - .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)); - if (SSE) { - builder.header("Accept", "text/event-stream"); - } - return builder; - } - - @Override - public A2AHttpResponse_v0_3 post() throws IOException, InterruptedException { - HttpRequest request = createRequestBuilder(false) - .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) - .build(); - HttpResponse response = - httpClient.send(request, BodyHandlers.ofString(StandardCharsets.UTF_8)); - - if (response.statusCode() == HTTP_UNAUTHORIZED) { - throw new IOException(A2AErrorMessages.AUTHENTICATION_FAILED); - } else if (response.statusCode() == HTTP_FORBIDDEN) { - throw new IOException(A2AErrorMessages.AUTHORIZATION_FAILED); - } - - return new JdkHttpResponse(response); - } - - @Override - public CompletableFuture postAsyncSSE( - Consumer messageConsumer, - Consumer errorConsumer, - Runnable completeRunnable) throws IOException, InterruptedException { - HttpRequest request = createRequestBuilder(true) - .build(); - return super.asyncRequest(request, messageConsumer, errorConsumer, completeRunnable); - } - } - - private record JdkHttpResponse(HttpResponse response) implements A2AHttpResponse_v0_3 { - - @Override - public int status() { - return response.statusCode(); - } - - @Override - public boolean success() {// Send the request and get the response - return success(response); - } - - static boolean success(HttpResponse response) { - return response.statusCode() >= HTTP_OK && response.statusCode() < HTTP_MULT_CHOICE; - } - - @Override - public String body() { - return response.body(); - } - } - - private static boolean isSuccessStatus(int statusCode) { - return statusCode >= HTTP_OK && statusCode < HTTP_MULT_CHOICE; - } -} diff --git a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/package-info.java b/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/package-info.java deleted file mode 100644 index 035bf5a62..000000000 --- a/compat-0.3/http-client/src/main/java/org/a2aproject/sdk/compat03/client/http/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -@NullMarked -package org.a2aproject.sdk.compat03.client.http; - -import org.jspecify.annotations.NullMarked; - diff --git a/compat-0.3/pom.xml b/compat-0.3/pom.xml index 9e7af13ae..e3c90533c 100644 --- a/compat-0.3/pom.xml +++ b/compat-0.3/pom.xml @@ -29,11 +29,6 @@ a2a-java-sdk-compat-0.3-spec-grpc ${project.version} - - ${project.groupId} - a2a-java-sdk-compat-0.3-http-client - ${project.version} - ${project.groupId} a2a-java-sdk-compat-0.3-client @@ -118,9 +113,6 @@ spec spec-grpc - - http-client - server-conversion diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_AndroidTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_AndroidTest.java index aac980bc8..86ddaa549 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_AndroidTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_AndroidTest.java @@ -1,9 +1,9 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.AndroidA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; -import org.a2aproject.sdk.compat03.conversion.AndroidA2AHttpClient_v0_3; import io.quarkus.test.junit.QuarkusTest; @QuarkusTest @@ -12,6 +12,6 @@ public class QuarkusA2AJSONRPC_v0_3_AndroidTest extends QuarkusA2AJSONRPC_v0_3_T @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient_v0_3())); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient())); } } diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_JdkTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_JdkTest.java index 831e73dea..6c096b069 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_JdkTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_JdkTest.java @@ -1,7 +1,7 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.JdkA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; import io.quarkus.test.junit.QuarkusTest; @@ -12,6 +12,6 @@ public class QuarkusA2AJSONRPC_v0_3_JdkTest extends QuarkusA2AJSONRPC_v0_3_Test @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient_v0_3())); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient())); } } diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_VertxTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_VertxTest.java index bd7d2f5a4..beda8276a 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_VertxTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_VertxTest.java @@ -1,9 +1,9 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.VertxA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; -import org.a2aproject.sdk.compat03.conversion.VertxA2AHttpClient_v0_3; import io.quarkus.test.junit.QuarkusTest; import io.vertx.core.Vertx; import jakarta.inject.Inject; @@ -17,6 +17,6 @@ public class QuarkusA2AJSONRPC_v0_3_VertxTest extends QuarkusA2AJSONRPC_v0_3_Tes @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient_v0_3(vertx))); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient(vertx))); } } diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthAndroidTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthAndroidTest.java index 45e8fbeee..5085bb276 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthAndroidTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthAndroidTest.java @@ -1,11 +1,11 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.AndroidA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; import org.a2aproject.sdk.compat03.conversion.AbstractA2AServerWithAuthTest_v0_3; -import org.a2aproject.sdk.compat03.conversion.AndroidA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.conversion.AuthTestProfile_v0_3; import org.a2aproject.sdk.compat03.spec.TransportProtocol_v0_3; import io.quarkus.test.junit.QuarkusTest; @@ -37,13 +37,13 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfigBuilder_v0_3() - .httpClient(new AndroidA2AHttpClient_v0_3()) + .httpClient(new AndroidA2AHttpClient()) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient_v0_3())); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient())); } } diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthTest.java index e158c28c2..2122bfff8 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthTest.java @@ -1,7 +1,7 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.JdkA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; @@ -37,13 +37,13 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfigBuilder_v0_3() - .httpClient(new JdkA2AHttpClient_v0_3()) + .httpClient(new JdkA2AHttpClient()) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient_v0_3())); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient())); } } diff --git a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthVertxTest.java b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthVertxTest.java index ba37d6b9b..d836c6fe2 100644 --- a/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthVertxTest.java +++ b/compat-0.3/reference/jsonrpc/src/test/java/org/a2aproject/sdk/compat03/server/apps/quarkus/QuarkusA2AJSONRPC_v0_3_WithAuthVertxTest.java @@ -1,12 +1,12 @@ package org.a2aproject.sdk.compat03.server.apps.quarkus; +import org.a2aproject.sdk.client.http.VertxA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.jsonrpc.JSONRPCTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; import org.a2aproject.sdk.compat03.conversion.AbstractA2AServerWithAuthTest_v0_3; import org.a2aproject.sdk.compat03.conversion.AuthTestProfile_v0_3; -import org.a2aproject.sdk.compat03.conversion.VertxA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.spec.TransportProtocol_v0_3; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.TestProfile; @@ -42,13 +42,13 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, new JSONRPCTransportConfigBuilder_v0_3() - .httpClient(new VertxA2AHttpClient_v0_3(vertx)) + .httpClient(new VertxA2AHttpClient(vertx)) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(JSONRPCTransport_v0_3.class, - new JSONRPCTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient_v0_3(vertx))); + new JSONRPCTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient(vertx))); } } diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_AndroidTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_AndroidTest.java index 6d1f5cfdd..4b70e86ca 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_AndroidTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_AndroidTest.java @@ -1,9 +1,9 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.AndroidA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; -import org.a2aproject.sdk.compat03.conversion.AndroidA2AHttpClient_v0_3; import io.quarkus.test.junit.QuarkusTest; @QuarkusTest @@ -12,6 +12,6 @@ public class QuarkusA2ARest_v0_3_AndroidTest extends QuarkusA2ARest_v0_3_Test { @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient_v0_3())); + new RestTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient())); } } diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_JdkTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_JdkTest.java index 8ec2191ba..fc6c578a2 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_JdkTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_JdkTest.java @@ -1,7 +1,7 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.JdkA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; import io.quarkus.test.junit.QuarkusTest; @@ -12,6 +12,6 @@ public class QuarkusA2ARest_v0_3_JdkTest extends QuarkusA2ARest_v0_3_Test { @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient_v0_3())); + new RestTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient())); } } diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_VertxTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_VertxTest.java index 410c80feb..599738c3b 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_VertxTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_VertxTest.java @@ -1,9 +1,9 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.VertxA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; -import org.a2aproject.sdk.compat03.conversion.VertxA2AHttpClient_v0_3; import io.quarkus.test.junit.QuarkusTest; import io.vertx.core.Vertx; import jakarta.inject.Inject; @@ -17,6 +17,6 @@ public class QuarkusA2ARest_v0_3_VertxTest extends QuarkusA2ARest_v0_3_Test { @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient_v0_3(vertx))); + new RestTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient(vertx))); } } diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthAndroidTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthAndroidTest.java index b17ec5e57..6a339e7c4 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthAndroidTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthAndroidTest.java @@ -1,11 +1,11 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.AndroidA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; import org.a2aproject.sdk.compat03.conversion.AbstractA2AServerWithAuthTest_v0_3; -import org.a2aproject.sdk.compat03.conversion.AndroidA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.conversion.AuthTestProfile_v0_3; import org.a2aproject.sdk.compat03.spec.TransportProtocol_v0_3; import io.quarkus.test.junit.QuarkusTest; @@ -38,14 +38,14 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, new RestTransportConfigBuilder_v0_3() - .httpClient(new AndroidA2AHttpClient_v0_3()) + .httpClient(new AndroidA2AHttpClient()) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient_v0_3())); + new RestTransportConfigBuilder_v0_3().httpClient(new AndroidA2AHttpClient())); } @Test diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthTest.java index 984850d2b..5ab5f5b75 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthTest.java @@ -1,7 +1,7 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.JdkA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; -import org.a2aproject.sdk.compat03.client.http.JdkA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; @@ -38,14 +38,14 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, new RestTransportConfigBuilder_v0_3() - .httpClient(new JdkA2AHttpClient_v0_3()) + .httpClient(new JdkA2AHttpClient()) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient_v0_3())); + new RestTransportConfigBuilder_v0_3().httpClient(new JdkA2AHttpClient())); } @Test diff --git a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthVertxTest.java b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthVertxTest.java index 087b30535..f5d4e1c58 100644 --- a/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthVertxTest.java +++ b/compat-0.3/reference/rest/src/test/java/org/a2aproject/sdk/compat03/server/rest/quarkus/QuarkusA2ARest_v0_3_WithAuthVertxTest.java @@ -1,12 +1,12 @@ package org.a2aproject.sdk.compat03.server.rest.quarkus; +import org.a2aproject.sdk.client.http.VertxA2AHttpClient; import org.a2aproject.sdk.compat03.client.ClientBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransport_v0_3; import org.a2aproject.sdk.compat03.client.transport.rest.RestTransportConfigBuilder_v0_3; import org.a2aproject.sdk.compat03.client.transport.spi.interceptors.auth.AuthInterceptor_v0_3; import org.a2aproject.sdk.compat03.conversion.AbstractA2AServerWithAuthTest_v0_3; import org.a2aproject.sdk.compat03.conversion.AuthTestProfile_v0_3; -import org.a2aproject.sdk.compat03.conversion.VertxA2AHttpClient_v0_3; import org.a2aproject.sdk.compat03.spec.TransportProtocol_v0_3; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.TestProfile; @@ -43,14 +43,14 @@ protected void configureTransportWithAuth(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, new RestTransportConfigBuilder_v0_3() - .httpClient(new VertxA2AHttpClient_v0_3(vertx)) + .httpClient(new VertxA2AHttpClient(vertx)) .addInterceptor(authInterceptor)); } @Override protected void configureTransport(ClientBuilder_v0_3 builder) { builder.withTransport(RestTransport_v0_3.class, - new RestTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient_v0_3(vertx))); + new RestTransportConfigBuilder_v0_3().httpClient(new VertxA2AHttpClient(vertx))); } @Test diff --git a/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/AndroidA2AHttpClient_v0_3.java b/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/AndroidA2AHttpClient_v0_3.java deleted file mode 100644 index 778d42fd7..000000000 --- a/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/AndroidA2AHttpClient_v0_3.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.a2aproject.sdk.compat03.conversion; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; - -import org.a2aproject.sdk.client.http.A2AHttpClient; -import org.a2aproject.sdk.client.http.AndroidA2AHttpClient; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpResponse_v0_3; - -/** - * Adapts {@link AndroidA2AHttpClient} to the {@link A2AHttpClient_v0_3} interface, - * bridging the v0.3 SSE callback ({@code Consumer}) to the v1.0 SSE callback - * ({@code Consumer}) by extracting the event data payload. - */ -public class AndroidA2AHttpClient_v0_3 implements A2AHttpClient_v0_3 { - - private final AndroidA2AHttpClient delegate = new AndroidA2AHttpClient(); - - @Override - public GetBuilder createGet() { - return new GetBuilderAdapter(delegate.createGet()); - } - - @Override - public PostBuilder createPost() { - return new PostBuilderAdapter(delegate.createPost()); - } - - @Override - public DeleteBuilder createDelete() { - return new DeleteBuilderAdapter(delegate.createDelete()); - } - - private static A2AHttpResponse_v0_3 adapt(org.a2aproject.sdk.client.http.A2AHttpResponse r) { - return new A2AHttpResponse_v0_3() { - @Override public int status() { return r.status(); } - @Override public boolean success() { return r.success(); } - @Override public String body() { return r.body(); } - }; - } - - private static class GetBuilderAdapter implements GetBuilder { - private final A2AHttpClient.GetBuilder delegate; - - GetBuilderAdapter(A2AHttpClient.GetBuilder delegate) { - this.delegate = delegate; - } - - @Override public GetBuilder url(String s) { delegate.url(s); return this; } - @Override public GetBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public GetBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - - @Override - public A2AHttpResponse_v0_3 get() throws IOException, InterruptedException { - return adapt(delegate.get()); - } - - @Override - public CompletableFuture getAsyncSSE(Consumer mc, Consumer ec, Runnable cr) - throws IOException, InterruptedException { - return delegate.getAsyncSSE(event -> mc.accept(event.data()), ec, cr); - } - } - - private static class PostBuilderAdapter implements PostBuilder { - private final A2AHttpClient.PostBuilder delegate; - - PostBuilderAdapter(A2AHttpClient.PostBuilder delegate) { - this.delegate = delegate; - } - - @Override public PostBuilder url(String s) { delegate.url(s); return this; } - @Override public PostBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public PostBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - @Override public PostBuilder body(String body) { delegate.body(body); return this; } - - @Override - public A2AHttpResponse_v0_3 post() throws IOException, InterruptedException { - return adapt(delegate.post()); - } - - @Override - public CompletableFuture postAsyncSSE(Consumer mc, Consumer ec, Runnable cr) - throws IOException, InterruptedException { - return delegate.postAsyncSSE(event -> mc.accept(event.data()), ec, cr); - } - } - - private static class DeleteBuilderAdapter implements DeleteBuilder { - private final A2AHttpClient.DeleteBuilder delegate; - - DeleteBuilderAdapter(A2AHttpClient.DeleteBuilder delegate) { - this.delegate = delegate; - } - - @Override public DeleteBuilder url(String s) { delegate.url(s); return this; } - @Override public DeleteBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public DeleteBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - - @Override - public A2AHttpResponse_v0_3 delete() throws IOException, InterruptedException { - return adapt(delegate.delete()); - } - } -} diff --git a/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/VertxA2AHttpClient_v0_3.java b/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/VertxA2AHttpClient_v0_3.java deleted file mode 100644 index 24fac7060..000000000 --- a/compat-0.3/server-conversion/src/test/java/org/a2aproject/sdk/compat03/conversion/VertxA2AHttpClient_v0_3.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.a2aproject.sdk.compat03.conversion; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; - -import org.a2aproject.sdk.client.http.A2AHttpClient; -import org.a2aproject.sdk.client.http.VertxA2AHttpClient; -import org.a2aproject.sdk.compat03.client.http.A2AHttpClient_v0_3; -import org.a2aproject.sdk.compat03.client.http.A2AHttpResponse_v0_3; -import io.vertx.core.Vertx; - -/** - * Adapts {@link VertxA2AHttpClient} to the {@link A2AHttpClient_v0_3} interface, - * bridging the v0.3 SSE callback ({@code Consumer}) to the v1.0 SSE callback - * ({@code Consumer}) by extracting the event data payload. - */ -public class VertxA2AHttpClient_v0_3 implements A2AHttpClient_v0_3 { - - private final VertxA2AHttpClient delegate; - - public VertxA2AHttpClient_v0_3(Vertx vertx) { - this.delegate = new VertxA2AHttpClient(vertx); - } - - @Override - public GetBuilder createGet() { - return new GetBuilderAdapter(delegate.createGet()); - } - - @Override - public PostBuilder createPost() { - return new PostBuilderAdapter(delegate.createPost()); - } - - @Override - public DeleteBuilder createDelete() { - return new DeleteBuilderAdapter(delegate.createDelete()); - } - - private static A2AHttpResponse_v0_3 adapt(org.a2aproject.sdk.client.http.A2AHttpResponse r) { - return new A2AHttpResponse_v0_3() { - @Override public int status() { return r.status(); } - @Override public boolean success() { return r.success(); } - @Override public String body() { return r.body(); } - }; - } - - private static class GetBuilderAdapter implements GetBuilder { - private final A2AHttpClient.GetBuilder delegate; - - GetBuilderAdapter(A2AHttpClient.GetBuilder delegate) { - this.delegate = delegate; - } - - @Override public GetBuilder url(String s) { delegate.url(s); return this; } - @Override public GetBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public GetBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - - @Override - public A2AHttpResponse_v0_3 get() throws IOException, InterruptedException { - return adapt(delegate.get()); - } - - @Override - public CompletableFuture getAsyncSSE(Consumer mc, Consumer ec, Runnable cr) - throws IOException, InterruptedException { - return delegate.getAsyncSSE(event -> mc.accept(event.data()), ec, cr); - } - } - - private static class PostBuilderAdapter implements PostBuilder { - private final A2AHttpClient.PostBuilder delegate; - - PostBuilderAdapter(A2AHttpClient.PostBuilder delegate) { - this.delegate = delegate; - } - - @Override public PostBuilder url(String s) { delegate.url(s); return this; } - @Override public PostBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public PostBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - @Override public PostBuilder body(String body) { delegate.body(body); return this; } - - @Override - public A2AHttpResponse_v0_3 post() throws IOException, InterruptedException { - return adapt(delegate.post()); - } - - @Override - public CompletableFuture postAsyncSSE(Consumer mc, Consumer ec, Runnable cr) - throws IOException, InterruptedException { - return delegate.postAsyncSSE(event -> mc.accept(event.data()), ec, cr); - } - } - - private static class DeleteBuilderAdapter implements DeleteBuilder { - private final A2AHttpClient.DeleteBuilder delegate; - - DeleteBuilderAdapter(A2AHttpClient.DeleteBuilder delegate) { - this.delegate = delegate; - } - - @Override public DeleteBuilder url(String s) { delegate.url(s); return this; } - @Override public DeleteBuilder addHeader(String n, String v) { delegate.addHeader(n, v); return this; } - @Override public DeleteBuilder addHeaders(Map h) { delegate.addHeaders(h); return this; } - - @Override - public A2AHttpResponse_v0_3 delete() throws IOException, InterruptedException { - return adapt(delegate.delete()); - } - } -}