Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ Different transport protocols can be configured with specific settings using spe

##### JSON-RPC Transport Configuration

For the JSON-RPC transport, to use the default `JdkA2AHttpClient`, provide a `JSONRPCTransportConfig` created with its default constructor.
For the JSON-RPC transport, to use the default HTTP client (resolved automatically by `A2AHttpClientFactory`), provide a `JSONRPCTransportConfig` created with its default constructor.

To use a custom HTTP client implementation, simply create a `JSONRPCTransportConfig` as follows:

Expand Down Expand Up @@ -441,7 +441,7 @@ Client client = Client

##### HTTP+JSON/REST Transport Configuration

For the HTTP+JSON/REST transport, if you'd like to use the default `JdkA2AHttpClient`, provide a `RestTransportConfig` created with its default constructor.
For the HTTP+JSON/REST transport, to use the default HTTP client (resolved automatically by `A2AHttpClientFactory`), provide a `RestTransportConfig` created with its default constructor.

To use a custom HTTP client implementation, simply create a `RestTransportConfig` as follows:

Expand Down
7 changes: 3 additions & 4 deletions client/base/src/main/java/io/a2a/A2A.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import io.a2a.client.http.A2ACardResolver;
import io.a2a.client.http.A2AHttpClient;
import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.spec.A2AClientError;
import io.a2a.spec.A2AClientJSONError;
import io.a2a.spec.AgentCard;
Expand Down Expand Up @@ -139,7 +138,7 @@ private static Message toMessage(List<Part<?>> parts, Message.Role role, String
* @throws A2AClientJSONError If the response body cannot be decoded as JSON or validated against the AgentCard schema
*/
public static AgentCard getAgentCard(String agentUrl) throws A2AClientError, A2AClientJSONError {
return getAgentCard(new JdkA2AHttpClient(), agentUrl);
return getAgentCard(A2AHttpClientFactory.create(), agentUrl);
}

/**
Expand Down Expand Up @@ -167,7 +166,7 @@ public static AgentCard getAgentCard(A2AHttpClient httpClient, String agentUrl)
* @throws A2AClientJSONError If the response body cannot be decoded as JSON or validated against the AgentCard schema
*/
public static AgentCard getAgentCard(String agentUrl, String relativeCardPath, Map<String, String> authHeaders) throws A2AClientError, A2AClientJSONError {
return getAgentCard(new JdkA2AHttpClient(), agentUrl, relativeCardPath, authHeaders);
return getAgentCard(A2AHttpClientFactory.create(), agentUrl, relativeCardPath, authHeaders);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import io.a2a.client.transport.spi.interceptors.ClientCallInterceptor;
import io.a2a.client.transport.spi.interceptors.PayloadAndHeaders;
import io.a2a.client.http.A2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.http.A2AHttpResponse;
import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.transport.spi.ClientTransport;
import io.a2a.spec.A2AClientError;
import io.a2a.spec.A2AClientException;
Expand Down Expand Up @@ -84,7 +84,7 @@ public JSONRPCTransport(AgentCard agentCard) {

public JSONRPCTransport(A2AHttpClient httpClient, AgentCard agentCard,
String agentUrl, List<ClientCallInterceptor> interceptors) {
this.httpClient = httpClient == null ? new JdkA2AHttpClient() : httpClient;
this.httpClient = httpClient == null ? A2AHttpClientFactory.create() : httpClient;
this.agentCard = agentCard;
this.agentUrl = agentUrl;
this.interceptors = interceptors;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.a2a.client.transport.jsonrpc;

import io.a2a.client.http.A2AHttpClient;
import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.transport.spi.ClientTransportConfigBuilder;

public class JSONRPCTransportConfigBuilder extends ClientTransportConfigBuilder<JSONRPCTransportConfig, JSONRPCTransportConfigBuilder> {
Expand All @@ -18,7 +18,7 @@ public JSONRPCTransportConfigBuilder httpClient(A2AHttpClient httpClient) {
public JSONRPCTransportConfig build() {
// No HTTP client provided, fallback to the default one (JDK-based implementation)
if (httpClient == null) {
httpClient = new JdkA2AHttpClient();
httpClient = A2AHttpClientFactory.create();
}

JSONRPCTransportConfig config = new JSONRPCTransportConfig(httpClient);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.a2a.client.transport.jsonrpc;

import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.transport.spi.ClientTransportProvider;
import io.a2a.spec.A2AClientException;
import io.a2a.spec.AgentCard;
Expand All @@ -11,7 +11,7 @@ public class JSONRPCTransportProvider implements ClientTransportProvider<JSONRPC
@Override
public JSONRPCTransport create(JSONRPCTransportConfig clientTransportConfig, AgentCard agentCard, String agentUrl) throws A2AClientException {
if (clientTransportConfig == null) {
clientTransportConfig = new JSONRPCTransportConfig(new JdkA2AHttpClient());
clientTransportConfig = new JSONRPCTransportConfig(A2AHttpClientFactory.create());
}

return new JSONRPCTransport(clientTransportConfig.getHttpClient(), agentCard, agentUrl, clientTransportConfig.getInterceptors());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.google.protobuf.util.JsonFormat;
import io.a2a.client.http.A2ACardResolver;
import io.a2a.client.http.A2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.http.A2AHttpResponse;
import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.transport.rest.sse.RestSSEEventListener;
import io.a2a.client.transport.spi.ClientTransport;
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
Expand Down Expand Up @@ -63,7 +63,7 @@ public RestTransport(AgentCard agentCard) {

public RestTransport(@Nullable A2AHttpClient httpClient, AgentCard agentCard,
String agentUrl, @Nullable List<ClientCallInterceptor> interceptors) {
this.httpClient = httpClient == null ? new JdkA2AHttpClient() : 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;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.a2a.client.transport.rest;

import io.a2a.client.http.A2AHttpClient;
import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.transport.spi.ClientTransportConfigBuilder;
import org.jspecify.annotations.Nullable;

Expand All @@ -16,9 +16,8 @@ public RestTransportConfigBuilder httpClient(A2AHttpClient httpClient) {

@Override
public RestTransportConfig build() {
// No HTTP client provided, fallback to the default one (JDK-based implementation)
if (httpClient == null) {
httpClient = new JdkA2AHttpClient();
httpClient = A2AHttpClientFactory.create();
}

RestTransportConfig config = new RestTransportConfig(httpClient);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.a2a.client.transport.rest;

import io.a2a.client.http.JdkA2AHttpClient;
import io.a2a.client.http.A2AHttpClientFactory;
import io.a2a.client.transport.spi.ClientTransportProvider;
import io.a2a.spec.A2AClientException;
import io.a2a.spec.AgentCard;
Expand All @@ -17,9 +17,9 @@ public String getTransportProtocol() {
public RestTransport create(RestTransportConfig clientTransportConfig, AgentCard agentCard, String agentUrl) throws A2AClientException {
RestTransportConfig transportConfig = clientTransportConfig;
if (transportConfig == null) {
transportConfig = new RestTransportConfig(new JdkA2AHttpClient());
transportConfig = new RestTransportConfig(A2AHttpClientFactory.create());
}
return new RestTransport(clientTransportConfig.getHttpClient(), agentCard, agentUrl, transportConfig.getInterceptors());
return new RestTransport(transportConfig.getHttpClient(), agentCard, agentUrl, transportConfig.getInterceptors());
}

@Override
Expand Down
48 changes: 48 additions & 0 deletions extras/http-client-android/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-sdk-parent</artifactId>
<version>0.3.4.Beta1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>a2a-java-sdk-http-client-android</artifactId>
<packaging>jar</packaging>

<name>Java SDK A2A HTTP Client: Android</name>
<description>Java SDK for the Agent2Agent Protocol (A2A) - Android HTTP Client</description>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>a2a-java-sdk-http-client</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>a2a-java-sdk-spec</artifactId>
</dependency>

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>a2a-java-sdk-http-client</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mock-server</groupId>
<artifactId>mockserver-netty</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Loading
Loading