Skip to content

Commit f4b612f

Browse files
committed
Using proper split modules
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
1 parent ff8372b commit f4b612f

File tree

15 files changed

+2351
-10
lines changed

15 files changed

+2351
-10
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package io.a2a.client.sse;
2+
3+
import static io.a2a.grpc.StreamResponse.PayloadCase.ARTIFACT_UPDATE;
4+
import static io.a2a.grpc.StreamResponse.PayloadCase.MSG;
5+
import static io.a2a.grpc.StreamResponse.PayloadCase.STATUS_UPDATE;
6+
import static io.a2a.grpc.StreamResponse.PayloadCase.TASK;
7+
8+
import java.util.concurrent.Future;
9+
import java.util.function.Consumer;
10+
import java.util.logging.Logger;
11+
12+
import com.google.protobuf.InvalidProtocolBufferException;
13+
import com.google.protobuf.util.JsonFormat;
14+
import io.a2a.grpc.StreamResponse;
15+
import io.a2a.grpc.utils.ProtoUtils;
16+
import io.a2a.spec.StreamingEventKind;
17+
import java.util.logging.Level;
18+
19+
public class JSONRestSSEEventListener {
20+
21+
private static final Logger log = Logger.getLogger(JSONRestSSEEventListener.class.getName());
22+
private final Consumer<StreamingEventKind> eventHandler;
23+
private final Consumer<Throwable> errorHandler;
24+
25+
public JSONRestSSEEventListener(Consumer<StreamingEventKind> eventHandler,
26+
Consumer<Throwable> errorHandler) {
27+
this.eventHandler = eventHandler;
28+
this.errorHandler = errorHandler;
29+
}
30+
31+
public void onMessage(String message, Future<Void> completableFuture) {
32+
try {
33+
io.a2a.grpc.StreamResponse.Builder builder = io.a2a.grpc.StreamResponse.newBuilder();
34+
JsonFormat.parser().merge(message, builder);
35+
handleMessage(builder.build(), completableFuture);
36+
} catch (InvalidProtocolBufferException e) {
37+
Logger.getLogger(JSONRestSSEEventListener.class.getName()).log(Level.SEVERE, null, e);
38+
errorHandler.accept(e);
39+
}
40+
}
41+
42+
public void onError(Throwable throwable, Future<Void> future) {
43+
if (errorHandler != null) {
44+
errorHandler.accept(throwable);
45+
}
46+
future.cancel(true); // close SSE channel
47+
}
48+
49+
private void handleMessage(StreamResponse response, Future<Void> future) {
50+
StreamingEventKind event;
51+
switch (response.getPayloadCase()) {
52+
case MSG:
53+
event = ProtoUtils.FromProto.message(response.getMsg());
54+
break;
55+
case TASK:
56+
event = ProtoUtils.FromProto.task(response.getTask());
57+
break;
58+
case STATUS_UPDATE:
59+
event = ProtoUtils.FromProto.taskStatusUpdateEvent(response.getStatusUpdate());
60+
break;
61+
case ARTIFACT_UPDATE:
62+
event = ProtoUtils.FromProto.taskArtifactUpdateEvent(response.getArtifactUpdate());
63+
break;
64+
default:
65+
log.warning("Invalid stream response " + response.getPayloadCase());
66+
errorHandler.accept(new IllegalStateException("Invalid stream response from server: " + response.getPayloadCase()));
67+
return;
68+
}
69+
eventHandler.accept(event);
70+
}
71+
72+
}

client/transport/jsonrest/main/java/io/a2a/client/transport/JSONRestTransport.java

Lines changed: 354 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.a2a.client.transport;
2+
3+
import java.util.List;
4+
5+
import io.a2a.client.ClientCallInterceptor;
6+
import io.a2a.client.ClientConfig;
7+
import io.a2a.spec.AgentCard;
8+
import io.a2a.spec.TransportProtocol;
9+
10+
public class JSONRestTransportProvider implements ClientTransportProvider {
11+
12+
@Override
13+
public ClientTransport create(ClientConfig clientConfig, AgentCard agentCard,
14+
String agentUrl, List<ClientCallInterceptor> interceptors) {
15+
return new JSONRestTransport(clientConfig.getHttpClient(), agentCard, agentUrl, interceptors);
16+
}
17+
18+
@Override
19+
public String getTransportProtocol() {
20+
return TransportProtocol.HTTP_JSON.asString();
21+
}
22+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
io.a2a.client.transport.JSONRPCTransportProvider
2+
io.a2a.client.transport.GrpcTransportProvider
3+
io.a2a.client.transport.JSONRestTransportProvider

client/transport/jsonrest/pom.xml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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-client-transport-jsonrest</artifactId>
14+
<packaging>jar</packaging>
15+
16+
<name>Java SDK A2A Client Transport: JSON+HTTP/REST</name>
17+
<description>Java SDK for the Agent2Agent Protocol (A2A) - JSON+HTTP/REST Client Transport</description>
18+
19+
<dependencies>
20+
<dependency>
21+
<groupId>${project.groupId}</groupId>
22+
<artifactId>a2a-java-sdk-client-config</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>${project.groupId}</groupId>
26+
<artifactId>a2a-java-sdk-common</artifactId>
27+
</dependency>
28+
<dependency>
29+
<groupId>${project.groupId}</groupId>
30+
<artifactId>a2a-java-sdk-spec</artifactId>
31+
</dependency>
32+
<dependency>
33+
<groupId>${project.groupId}</groupId>
34+
<artifactId>a2a-java-sdk-spec-grpc</artifactId>
35+
</dependency>
36+
<dependency>
37+
<groupId>${project.groupId}</groupId>
38+
<artifactId>a2a-java-sdk-client-transport-spi</artifactId>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.junit.jupiter</groupId>
42+
<artifactId>junit-jupiter-api</artifactId>
43+
<scope>test</scope>
44+
</dependency>
45+
46+
<dependency>
47+
<groupId>org.mock-server</groupId>
48+
<artifactId>mockserver-netty</artifactId>
49+
<scope>test</scope>
50+
</dependency>
51+
</dependencies>
52+
53+
</project>

0 commit comments

Comments
 (0)