Skip to content

Commit 7ce0ec3

Browse files
committed
refactor: Complete migration from Jackson to Gson across codebase
Replace Jackson ObjectMapper with Gson throughout the codebase to eliminate Jackson dependency and provide custom serialization control. Key Changes: - Created JsonUtil.java with Gson-based OBJECT_MAPPER singleton - Implemented 9 custom TypeAdapters for complex type handling: * OffsetDateTimeTypeAdapter - ISO-8601 datetime serialization * JSONRPCErrorTypeAdapter - Polymorphic error deserialization (12 error types) * ThrowableTypeAdapter - Avoids Java 17+ reflection restrictions * TaskStateTypeAdapter - Wire format enum serialization * RoleTypeAdapter - Message.Role enum handling * PartKindTypeAdapter - Part.Kind enum handling * PartTypeAdapter - Polymorphic Part deserialization (Text/File/Data) * StreamingEventKindTypeAdapter - Event type deserialization * FileContentTypeAdapter - FileWithBytes/FileWithUri discrimination - Added TaskSerializationTest with 21 comprehensive tests covering: * Round-trip serialization for all Task components * Direct JSON deserialization tests * All Part types and FileContent variants - Removed Jackson-specific deserializers and annotations - Updated all usages across 142 files (client, server, extras, tests) - Removed Jackson dependencies from spec/pom.xml Technical Details: - Thread-safe singleton OBJECT_MAPPER with all adapters registered - Handles polymorphic types via two-pass parsing strategy - Maintains wire format compatibility with existing JSON-RPC protocol - Preserves null-safety with NullAway/JSpecify conventions Breaking Changes: None - wire format remains compatible Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
1 parent c2551bc commit 7ce0ec3

147 files changed

Lines changed: 3746 additions & 1643 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

boms/sdk/pom.xml

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
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.4.0.Alpha1-SNAPSHOT</version>
11+
<relativePath>../../pom.xml</relativePath>
12+
</parent>
13+
14+
<artifactId>a2a-java-sdk-bom</artifactId>
15+
<packaging>pom</packaging>
16+
17+
<name>A2A Java SDK - BOM</name>
18+
<description>Bill of Materials (BOM) for A2A Java SDK core modules and dependencies</description>
19+
20+
<dependencyManagement>
21+
<dependencies>
22+
<!-- A2A SDK Core Modules -->
23+
24+
<!-- Spec modules -->
25+
<dependency>
26+
<groupId>${project.groupId}</groupId>
27+
<artifactId>a2a-java-sdk-spec</artifactId>
28+
<version>${project.version}</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>${project.groupId}</groupId>
32+
<artifactId>a2a-java-sdk-spec-grpc</artifactId>
33+
<version>${project.version}</version>
34+
</dependency>
35+
36+
<!-- Common modules -->
37+
<dependency>
38+
<groupId>${project.groupId}</groupId>
39+
<artifactId>a2a-java-sdk-common</artifactId>
40+
<version>${project.version}</version>
41+
</dependency>
42+
<dependency>
43+
<groupId>${project.groupId}</groupId>
44+
<artifactId>a2a-java-sdk-http-client</artifactId>
45+
<version>${project.version}</version>
46+
</dependency>
47+
48+
<!-- Server modules -->
49+
<dependency>
50+
<groupId>${project.groupId}</groupId>
51+
<artifactId>a2a-java-sdk-server-common</artifactId>
52+
<version>${project.version}</version>
53+
</dependency>
54+
55+
<!-- Integration modules -->
56+
<dependency>
57+
<groupId>${project.groupId}</groupId>
58+
<artifactId>a2a-java-sdk-microprofile-config</artifactId>
59+
<version>${project.version}</version>
60+
</dependency>
61+
62+
<!-- Client modules -->
63+
<dependency>
64+
<groupId>${project.groupId}</groupId>
65+
<artifactId>a2a-java-sdk-client</artifactId>
66+
<version>${project.version}</version>
67+
</dependency>
68+
<dependency>
69+
<groupId>${project.groupId}</groupId>
70+
<artifactId>a2a-java-sdk-client-transport-spi</artifactId>
71+
<version>${project.version}</version>
72+
</dependency>
73+
<dependency>
74+
<groupId>${project.groupId}</groupId>
75+
<artifactId>a2a-java-sdk-client-transport-jsonrpc</artifactId>
76+
<version>${project.version}</version>
77+
</dependency>
78+
<dependency>
79+
<groupId>${project.groupId}</groupId>
80+
<artifactId>a2a-java-sdk-client-transport-grpc</artifactId>
81+
<version>${project.version}</version>
82+
</dependency>
83+
<dependency>
84+
<groupId>${project.groupId}</groupId>
85+
<artifactId>a2a-java-sdk-client-transport-rest</artifactId>
86+
<version>${project.version}</version>
87+
</dependency>
88+
89+
<!-- Transport modules -->
90+
<dependency>
91+
<groupId>${project.groupId}</groupId>
92+
<artifactId>a2a-java-sdk-transport-grpc</artifactId>
93+
<version>${project.version}</version>
94+
</dependency>
95+
<dependency>
96+
<groupId>${project.groupId}</groupId>
97+
<artifactId>a2a-java-sdk-transport-jsonrpc</artifactId>
98+
<version>${project.version}</version>
99+
</dependency>
100+
<dependency>
101+
<groupId>${project.groupId}</groupId>
102+
<artifactId>a2a-java-sdk-transport-rest</artifactId>
103+
<version>${project.version}</version>
104+
</dependency>
105+
106+
<!-- Test utilities -->
107+
<dependency>
108+
<groupId>${project.groupId}</groupId>
109+
<artifactId>a2a-java-sdk-tests-server-common</artifactId>
110+
<version>${project.version}</version>
111+
<scope>test</scope>
112+
</dependency>
113+
<dependency>
114+
<groupId>${project.groupId}</groupId>
115+
<artifactId>a2a-java-sdk-tests-server-common</artifactId>
116+
<type>test-jar</type>
117+
<scope>test</scope>
118+
<version>${project.version}</version>
119+
</dependency>
120+
<dependency>
121+
<groupId>${project.groupId}</groupId>
122+
<artifactId>a2a-java-sdk-server-common</artifactId>
123+
<type>test-jar</type>
124+
<scope>test</scope>
125+
<version>${project.version}</version>
126+
</dependency>
127+
128+
<!-- Third-party BOMs (import scope) -->
129+
<dependency>
130+
<groupId>io.grpc</groupId>
131+
<artifactId>grpc-bom</artifactId>
132+
<version>${grpc.version}</version>
133+
<type>pom</type>
134+
<scope>import</scope>
135+
</dependency>
136+
<dependency>
137+
<groupId>org.slf4j</groupId>
138+
<artifactId>slf4j-bom</artifactId>
139+
<version>${slf4j.version}</version>
140+
<type>pom</type>
141+
<scope>import</scope>
142+
</dependency>
143+
144+
<!-- Core dependencies -->
145+
<dependency>
146+
<groupId>com.google.protobuf</groupId>
147+
<artifactId>protobuf-java</artifactId>
148+
<version>${protobuf-java.version}</version>
149+
</dependency>
150+
<dependency>
151+
<groupId>io.smallrye.reactive</groupId>
152+
<artifactId>mutiny-zero</artifactId>
153+
<version>${mutiny-zero.version}</version>
154+
</dependency>
155+
156+
<!-- Jakarta APIs -->
157+
<dependency>
158+
<groupId>jakarta.enterprise</groupId>
159+
<artifactId>jakarta.enterprise.cdi-api</artifactId>
160+
<version>${jakarta.enterprise.cdi-api.version}</version>
161+
</dependency>
162+
<dependency>
163+
<groupId>jakarta.inject</groupId>
164+
<artifactId>jakarta.inject-api</artifactId>
165+
<version>${jakarta.inject.jakarta.inject-api.version}</version>
166+
</dependency>
167+
<dependency>
168+
<groupId>jakarta.json</groupId>
169+
<artifactId>jakarta.json-api</artifactId>
170+
<version>${jakarta.json-api.version}</version>
171+
<scope>provided</scope>
172+
</dependency>
173+
<dependency>
174+
<groupId>jakarta.ws.rs</groupId>
175+
<artifactId>jakarta.ws.rs-api</artifactId>
176+
<version>${jakarta.ws.rs-api.version}</version>
177+
<scope>provided</scope>
178+
</dependency>
179+
180+
<!-- JSpecify annotations -->
181+
<dependency>
182+
<groupId>org.jspecify</groupId>
183+
<artifactId>jspecify</artifactId>
184+
<version>1.0.0</version>
185+
<scope>provided</scope>
186+
</dependency>
187+
188+
<!-- Test dependencies -->
189+
<dependency>
190+
<groupId>org.junit.jupiter</groupId>
191+
<artifactId>junit-jupiter-api</artifactId>
192+
<version>${junit.version}</version>
193+
<scope>test</scope>
194+
</dependency>
195+
<dependency>
196+
<groupId>io.rest-assured</groupId>
197+
<artifactId>rest-assured</artifactId>
198+
<version>${rest-assured.version}</version>
199+
<scope>test</scope>
200+
</dependency>
201+
<dependency>
202+
<groupId>org.mockito</groupId>
203+
<artifactId>mockito-core</artifactId>
204+
<version>${mockito-core.version}</version>
205+
<scope>test</scope>
206+
</dependency>
207+
<dependency>
208+
<groupId>org.mock-server</groupId>
209+
<artifactId>mockserver-netty</artifactId>
210+
<version>${mockserver.version}</version>
211+
<scope>test</scope>
212+
</dependency>
213+
<dependency>
214+
<groupId>ch.qos.logback</groupId>
215+
<artifactId>logback-classic</artifactId>
216+
<version>${logback.version}</version>
217+
<scope>test</scope>
218+
</dependency>
219+
</dependencies>
220+
</dependencyManagement>
221+
222+
<build>
223+
<plugins>
224+
<plugin>
225+
<groupId>org.apache.maven.plugins</groupId>
226+
<artifactId>maven-invoker-plugin</artifactId>
227+
<version>3.8.0</version>
228+
<configuration>
229+
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
230+
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
231+
<settingsFile>src/it/settings.xml</settingsFile>
232+
<goals>
233+
<goal>clean</goal>
234+
<goal>verify</goal>
235+
</goals>
236+
<streamLogs>false</streamLogs>
237+
<streamLogsOnFailures>true</streamLogsOnFailures>
238+
<invokerPropertiesFile>invoker.properties</invokerPropertiesFile>
239+
<!-- Install test-utils module before running integration tests -->
240+
<extraArtifacts>
241+
<extraArtifact>io.github.a2asdk:a2a-java-bom-test-utils:${project.version}:jar</extraArtifact>
242+
</extraArtifacts>
243+
</configuration>
244+
<executions>
245+
<execution>
246+
<id>integration-test</id>
247+
<goals>
248+
<goal>install</goal>
249+
<goal>run</goal>
250+
</goals>
251+
</execution>
252+
</executions>
253+
</plugin>
254+
</plugins>
255+
</build>
256+
257+
</project>

boms/test-utils/pom.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
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.4.0.Alpha1-SNAPSHOT</version>
11+
<relativePath>../../pom.xml</relativePath>
12+
</parent>
13+
14+
<artifactId>a2a-java-bom-test-utils</artifactId>
15+
<packaging>jar</packaging>
16+
17+
<name>A2A Java SDK - BOM Test Utilities</name>
18+
<description>Shared utilities for BOM integration tests</description>
19+
20+
<properties>
21+
<maven.compiler.source>17</maven.compiler.source>
22+
<maven.compiler.target>17</maven.compiler.target>
23+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24+
</properties>
25+
26+
<build>
27+
<plugins>
28+
<plugin>
29+
<groupId>org.apache.maven.plugins</groupId>
30+
<artifactId>maven-compiler-plugin</artifactId>
31+
<version>3.14.1</version>
32+
</plugin>
33+
</plugins>
34+
</build>
35+
</project>

client/transport/jsonrpc/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,20 @@
3333
<groupId>${project.groupId}</groupId>
3434
<artifactId>a2a-java-sdk-spec</artifactId>
3535
</dependency>
36+
<dependency>
37+
<groupId>${project.groupId}</groupId>
38+
<artifactId>a2a-java-sdk-spec-grpc</artifactId>
39+
</dependency>
40+
<dependency>
41+
<groupId>com.google.protobuf</groupId>
42+
<artifactId>protobuf-java-util</artifactId>
43+
<scope>provided</scope>
44+
</dependency>
45+
<dependency>
46+
<groupId>com.google.protobuf</groupId>
47+
<artifactId>protobuf-java</artifactId>
48+
<scope>provided</scope>
49+
</dependency>
3650
<dependency>
3751
<groupId>org.junit.jupiter</groupId>
3852
<artifactId>junit-jupiter-api</artifactId>

0 commit comments

Comments
 (0)