Skip to content

Commit 514d890

Browse files
committed
feat: add support for HTTP+JSON/REST
Signed-off-by: Emmanuel Hugonnet <[email protected]>
1 parent 24de6cc commit 514d890

File tree

10 files changed

+755
-0
lines changed

10 files changed

+755
-0
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,11 @@
197197
<artifactId>a2a-java-sdk-reference-jsonrpc</artifactId>
198198
<version>${project.version}</version>
199199
</dependency>
200+
<dependency>
201+
<groupId>${project.groupId}</groupId>
202+
<artifactId>a2a-java-sdk-transport-httprest</artifactId>
203+
<version>${project.version}</version>
204+
</dependency>
200205
</dependencies>
201206
</dependencyManagement>
202207

@@ -322,6 +327,7 @@
322327
<module>tests/server-common</module>
323328
<module>transport/jsonrpc</module>
324329
<module>transport/grpc</module>
330+
<module>transport/httprest</module>
325331
</modules>
326332

327333
<profiles>

server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import io.a2a.spec.StreamingEventKind;
4545
import io.a2a.spec.Task;
4646
import io.a2a.spec.TaskIdParams;
47+
import io.a2a.spec.TaskListParams;
4748
import io.a2a.spec.TaskNotFoundError;
4849
import io.a2a.spec.TaskPushNotificationConfig;
4950
import io.a2a.spec.TaskQueryParams;
@@ -114,6 +115,12 @@ public Task onGetTask(TaskQueryParams params, ServerCallContext context) throws
114115
return task;
115116
}
116117

118+
@Override
119+
public List<Task> onListTasks(TaskListParams params, ServerCallContext context) throws JSONRPCError {
120+
LOGGER.debug("onListTasks");
121+
return taskStore.listAll();
122+
}
123+
117124
@Override
118125
public Task onCancelTask(TaskIdParams params, ServerCallContext context) throws JSONRPCError {
119126
Task task = taskStore.get(params.id());

server-common/src/main/java/io/a2a/server/requesthandlers/RequestHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,18 @@
1414
import io.a2a.spec.Task;
1515
import io.a2a.spec.TaskIdParams;
1616
import io.a2a.spec.TaskPushNotificationConfig;
17+
import io.a2a.spec.TaskListParams;
1718
import io.a2a.spec.TaskQueryParams;
1819

1920
public interface RequestHandler {
2021
Task onGetTask(
2122
TaskQueryParams params,
2223
ServerCallContext context) throws JSONRPCError;
2324

25+
List<Task> onListTasks(
26+
TaskListParams params,
27+
ServerCallContext context) throws JSONRPCError;
28+
2429
Task onCancelTask(
2530
TaskIdParams params,
2631
ServerCallContext context) throws JSONRPCError;

server-common/src/main/java/io/a2a/server/tasks/InMemoryTaskStore.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package io.a2a.server.tasks;
22

3+
import java.util.ArrayList;
34
import java.util.Collections;
45
import java.util.HashMap;
6+
import java.util.List;
57
import java.util.Map;
68
import java.util.concurrent.ConcurrentHashMap;
79
import java.util.concurrent.ConcurrentMap;
@@ -29,4 +31,9 @@ public Task get(String taskId) {
2931
public void delete(String taskId) {
3032
tasks.remove(taskId);
3133
}
34+
35+
@Override
36+
public List<Task> listAll() {
37+
return new ArrayList<>(tasks.values());
38+
}
3239
}

server-common/src/main/java/io/a2a/server/tasks/TaskStore.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.a2a.server.tasks;
22

3+
import java.util.List;
4+
35
import io.a2a.spec.Task;
46

57
public interface TaskStore {
@@ -8,4 +10,6 @@ public interface TaskStore {
810
Task get(String taskId);
911

1012
void delete(String taskId);
13+
14+
List<Task> listAll();
1115
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.a2a.spec;
2+
3+
import java.util.Map;
4+
5+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6+
import com.fasterxml.jackson.annotation.JsonInclude;
7+
8+
/**
9+
* Parameters for listing tasks.
10+
*/
11+
@JsonInclude(JsonInclude.Include.NON_ABSENT)
12+
@JsonIgnoreProperties(ignoreUnknown = true)
13+
public record TaskListParams(Map<String, Object> metadata) {
14+
15+
public TaskListParams() {
16+
this(null);
17+
}
18+
}

transport/httprest/pom.xml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
3+
xmlns="http://maven.apache.org/POM/4.0.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.github.a2asdk</groupId>
9+
<artifactId>a2a-java-sdk-parent</artifactId>
10+
<version>0.3.0.Beta1-SNAPSHOT</version>
11+
<relativePath>../../pom.xml</relativePath>
12+
</parent>
13+
<artifactId>a2a-java-sdk-transport-httprest</artifactId>
14+
15+
<packaging>jar</packaging>
16+
17+
<name>Java SDK A2A Transport: HTTP+JSON/REST</name>
18+
<description>Java SDK for the Agent2Agent Protocol (A2A) - HTTP+JSON/REST Transport</description>
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>io.github.a2asdk</groupId>
23+
<artifactId>a2a-java-sdk-server-common</artifactId>
24+
</dependency>
25+
<dependency>
26+
<groupId>${project.groupId}</groupId>
27+
<artifactId>a2a-java-sdk-server-common</artifactId>
28+
<version>${project.version}</version>
29+
<type>test-jar</type>
30+
<scope>test</scope>
31+
</dependency>
32+
<dependency>
33+
<groupId>ch.qos.logback</groupId>
34+
<artifactId>logback-classic</artifactId>
35+
<scope>test</scope>
36+
</dependency>
37+
<dependency>
38+
<groupId>org.junit.jupiter</groupId>
39+
<artifactId>junit-jupiter-api</artifactId>
40+
<scope>test</scope>
41+
</dependency>
42+
<dependency>
43+
<groupId>org.mockito</groupId>
44+
<artifactId>mockito-core</artifactId>
45+
<scope>test</scope>
46+
</dependency>
47+
<dependency>
48+
<groupId>com.fasterxml.jackson.datatype</groupId>
49+
<artifactId>jackson-datatype-jsr310</artifactId>
50+
</dependency>
51+
52+
</dependencies>
53+
54+
</project>

0 commit comments

Comments
 (0)