diff --git a/a2a-java-sdk-server-jakarta.iml b/a2a-java-sdk-server-jakarta.iml
new file mode 100644
index 0000000..4d4ebba
--- /dev/null
+++ b/a2a-java-sdk-server-jakarta.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/impl/pom.xml b/impl/pom.xml
new file mode 100644
index 0000000..d4f1711
--- /dev/null
+++ b/impl/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+
+
+ org.wildfly.extras.a2a
+ a2a-java-sdk-server-jakarta-parent
+ 0.2.3.Beta2-SNAPSHOT
+
+
+ a2a-java-sdk-server-jakarta
+
+ jar
+
+ WildFly Extras - Java A2A SDK for Jakarta
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-server-common
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ provided
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ test
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java
similarity index 87%
rename from src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java
rename to impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java
index 9195849..3cbfc45 100644
--- a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java
+++ b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java
@@ -28,7 +28,7 @@ public class A2ARequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
- if (requestContext.getMethod().equals("POST") && requestContext.hasEntity()) {
+ if (isA2ARequest(requestContext)) {
try (InputStream entityInputStream = requestContext.getEntityStream()) {
byte[] requestBodyBytes = entityInputStream.readAllBytes();
String requestBody = new String(requestBodyBytes);
@@ -49,6 +49,14 @@ public void filter(ContainerRequestContext requestContext) {
}
}
+ private boolean isA2ARequest(ContainerRequestContext requestContext) {
+ String path = requestContext.getUriInfo().getPath().trim();
+ if (path.equals("/") || path.startsWith("/agent/") || path.startsWith("/.well-known/")) {
+ return requestContext.getMethod().equals("POST") && requestContext.hasEntity();
+ }
+ return false;
+ }
+
private static boolean isStreamingRequest(String requestBody) {
return requestBody.contains(SendStreamingMessageRequest.METHOD) ||
requestBody.contains(TaskResubscriptionRequest.METHOD);
diff --git a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java
similarity index 99%
rename from src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java
rename to impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java
index d38e614..22a967c 100644
--- a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java
+++ b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java
@@ -208,7 +208,7 @@ private JSONRPCResponse> generateErrorResponse(JSONRPCRequest> request, JSON
return new JSONRPCErrorResponse(request.getId(), error);
}
- static void setStreamingIsSubscribedRunnable(Runnable streamingIsSubscribedRunnable) {
+ public static void setStreamingIsSubscribedRunnable(Runnable streamingIsSubscribedRunnable) {
A2AServerResource.streamingIsSubscribedRunnable = streamingIsSubscribedRunnable;
}
diff --git a/src/main/resources/META-INF/beans.xml b/impl/src/main/resources/META-INF/beans.xml
similarity index 100%
rename from src/main/resources/META-INF/beans.xml
rename to impl/src/main/resources/META-INF/beans.xml
diff --git a/src/test/resources/WEB-INF/web.xml b/impl/src/main/resources/WEB-INF/web.xml
similarity index 74%
rename from src/test/resources/WEB-INF/web.xml
rename to impl/src/main/resources/WEB-INF/web.xml
index 2678fbc..4330758 100644
--- a/src/test/resources/WEB-INF/web.xml
+++ b/impl/src/main/resources/WEB-INF/web.xml
@@ -4,9 +4,4 @@
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
-
-
- 30
-
-
diff --git a/pom.xml b/pom.xml
index 9cabdd0..a715565 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,13 +11,13 @@
org.wildfly.extras.a2a
- a2a-java-sdk-server-jakarta
+ a2a-java-sdk-server-jakarta-parent
0.2.3.Beta2-SNAPSHOT
- jar
+ pom
- WildFly Extras - Java A2A SDK for Jakarta
- Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta
+ WildFly Extras - Java A2A SDK for Jakarta Parent
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Parent
https://github.com/wildfly-extras/a2a-java-sdk-server-jakarta
@@ -43,9 +43,13 @@
-
+ ${project.build.directory}${file.separator}wildfly
36.0.1.Final
- 0.2.3.Beta1
+ ${project.version}
+
+ 1.1.1
+
+ 1.0.0.Final
2.2
5.12.2
5.1.0.Beta11
@@ -53,7 +57,7 @@
1.2.6
10.0.0.Final
3.3.4
- 5.5.1
+ 5.5.5
${project.build.directory}${file.separator}wildfly
@@ -61,6 +65,7 @@
true
+
@@ -92,96 +97,68 @@
pom
import
+
+ io.github.a2asdk
+ a2a-java-sdk-client
+ ${version.sdk}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-common
+ ${version.sdk}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-server-common
+ ${version.sdk}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-spec
+ ${version.sdk}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ ${version.sdk}
+
+
+ io.smallrye.reactive
+ mutiny-zero
+ ${version.mutiny-zero}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ test
+ ${version.sdk}
+
+
+ io.rest-assured
+ rest-assured
+ ${version.rest-assured}
+ test
+
+
+ org.jboss.logging
+ commons-logging-jboss-logging
+ ${version.jboss-commons-logging}
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${version.junit}
+ test
+
+
+ org.hamcrest
+ hamcrest
+ ${version.hamcrest}
+ test
+
-
-
- io.github.a2asdk
- a2a-java-sdk-server-common
- ${version.sdk}
-
-
- io.github.a2asdk
- a2a-java-sdk-tests-server-common
- ${version.sdk}
- provided
-
-
- io.github.a2asdk
- a2a-java-sdk-tests-server-common
- test-jar
- test
- ${version.sdk}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- provided
-
-
- jakarta.enterprise
- jakarta.enterprise.cdi-api
- provided
-
-
- jakarta.inject
- jakarta.inject-api
- provided
-
-
- jakarta.json
- jakarta.json-api
- provided
-
-
- jakarta.ws.rs
- jakarta.ws.rs-api
- provided
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- test
-
-
- io.rest-assured
- rest-assured
- ${version.rest-assured}
- test
-
-
- org.jboss.arquillian.junit5
- arquillian-junit5-container
- test
-
-
- org.wildfly.arquillian
- wildfly-arquillian-container-managed
- test
-
-
- org.jboss.shrinkwrap
- shrinkwrap-api
- test
-
-
- org.junit.jupiter
- junit-jupiter
- ${version.junit}
- test
-
-
- org.jboss.threads
- jboss-threads
- test
-
-
- org.hamcrest
- hamcrest
- ${version.hamcrest}
- test
-
-
@@ -259,27 +236,6 @@
-
- org.apache.maven.plugins
- maven-dependency-plugin
- 3.8.1
-
- ${project.build.directory}/lib
-
-
-
- copy
- generate-test-resources
-
- copy-dependencies
-
-
- test
- provided
-
-
-
-
org.apache.maven.plugins
maven-source-plugin
@@ -320,27 +276,20 @@
+
+ maven-assembly-plugin
+ 3.7.1
+
-
-
- org.wildfly.glow
- wildfly-glow-arquillian-plugin
-
-
- org.wildfly.plugins
- wildfly-maven-plugin
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
+
+ impl
+ wildfly-jar
+ tests/common
+ tests/impl
+ tests/wildfly-jar
+
debug.profile
diff --git a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java b/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java
deleted file mode 100644
index 161aec3..0000000
--- a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.wildfly.extras.a2a.server.apps.jakarta;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-
-import io.a2a.server.apps.common.AbstractA2AServerTest;
-import io.a2a.server.apps.common.AgentCardProducer;
-import io.a2a.server.apps.common.AgentExecutorProducer;
-import io.a2a.server.events.InMemoryQueueManager;
-import io.a2a.server.tasks.TaskStore;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit5.container.annotation.ArquillianTest;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-
-@ArquillianTest
-@ApplicationScoped
-public class JakartaA2AServerTest extends AbstractA2AServerTest {
-
- public JakartaA2AServerTest() {
- super(8080);
- }
-
- @Deployment
- public static WebArchive createTestArchive() throws IOException {
- final List prefixes = List.of(
- "a2a-java-sdk-client",
- "a2a-java-sdk-common",
- "a2a-java-sdk-server-common",
- "a2a-java-sdk-spec",
- "jackson",
- "mutiny",
- "slf4j",
- "rest-assured",
- "groovy",
- "http",
- "commons",
- "xml-path",
- "json-path",
- "hamcrest"
- );
- List libraries = new ArrayList<>();
- try (DirectoryStream stream = Files.newDirectoryStream(Paths.get("target").resolve("lib"))) {
- for (Path file : stream) {
- String fileName = file.getFileName().toString();
- if (prefixes.stream().anyMatch(fileName::startsWith)) {
- libraries.add(file.toFile());
- }
- }
- }
- WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war")
- .addAsLibraries(libraries.toArray(new File[libraries.size()]))
- .addClass(AbstractA2AServerTest.class)
- .addClass(AgentCardProducer.class)
- .addClass(AgentExecutorProducer.class)
- .addClass(JakartaA2AServerTest.class)
- .addClass(A2ARequestFilter.class)
- .addClass(A2AServerResource.class)
- .addClass(RestApplication.class)
- .addAsManifestResource("META-INF/beans.xml", "beans.xml")
- .addAsWebInfResource("META-INF/beans.xml", "beans.xml")
- .addAsWebInfResource("WEB-INF/web.xml", "web.xml");
- return archive;
- }
-
- @Inject
- TaskStore taskStore;
-
- @Inject
- InMemoryQueueManager queueManager;
-
- @Override
- protected TaskStore getTaskStore() {
- return taskStore;
- }
-
- @Override
- protected InMemoryQueueManager getQueueManager() {
- return queueManager;
- }
-
- @Override
- protected void setStreamingSubscribedRunnable(Runnable runnable) {
- A2AServerResource.setStreamingIsSubscribedRunnable(runnable);
- }
-}
diff --git a/tests/common/pom.xml b/tests/common/pom.xml
new file mode 100644
index 0000000..240950d
--- /dev/null
+++ b/tests/common/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+
+
+ org.wildfly.extras.a2a
+ a2a-java-sdk-server-jakarta-parent
+ 0.2.3.Beta2-SNAPSHOT
+ ../../pom.xml
+
+
+ a2a-java-sdk-server-jakarta-test-common
+
+ jar
+
+ WildFly Extras - Java A2A SDK for Jakarta - Test Utils
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Test Utils
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-server-common
+ provided
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ provided
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ provided
+
+
+ jakarta.enterprise
+ jakarta.enterprise.cdi-api
+ provided
+
+
+ jakarta.inject
+ jakarta.inject-api
+ provided
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+ provided
+
+
+
\ No newline at end of file
diff --git a/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java
new file mode 100644
index 0000000..b180605
--- /dev/null
+++ b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java
@@ -0,0 +1,105 @@
+package org.wildfly.extras.a2a.server.jakarta.test.common;
+
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.HttpHeaders;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
+import io.a2a.server.apps.common.TestUtilsBean;
+import io.a2a.spec.Task;
+import io.a2a.spec.TaskArtifactUpdateEvent;
+import io.a2a.spec.TaskStatusUpdateEvent;
+import io.a2a.util.Utils;
+
+@Path("/test")
+@ApplicationScoped
+public class A2ATestResource {
+ @Inject
+ TestUtilsBean testUtilsBean;
+
+ private final AtomicInteger streamingSubscribedCount = new AtomicInteger(0);
+
+ @PostConstruct
+ public void init() {
+ //A2AServerResource.setStreamingIsSubscribedRunnable(streamingSubscribedCount::incrementAndGet);
+ }
+
+
+ @POST
+ @Path("/task")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response saveTask(String body) throws Exception {
+ Task task = Utils.OBJECT_MAPPER.readValue(body, Task.class);
+ testUtilsBean.saveTask(task);
+ return Response.ok().build();
+ }
+
+ @GET
+ @Path("/task/{taskId}")
+ public Response getTask(@PathParam("taskId") String taskId) throws Exception {
+ Task task = testUtilsBean.getTask(taskId);
+ if (task == null) {
+ return Response.status(404).build();
+ }
+ return Response.ok()
+ .entity(Utils.OBJECT_MAPPER.writeValueAsString(task))
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ }
+
+ @DELETE
+ @Path("/task/{taskId}")
+ public Response deleteTask(@PathParam("taskId") String taskId) {
+ Task task = testUtilsBean.getTask(taskId);
+ if (task == null) {
+ return Response.status(404).build();
+ }
+ testUtilsBean.deleteTask(taskId);
+ return Response.ok()
+ .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+ .build();
+ }
+
+ @POST
+ @Path("/queue/ensure/{taskId}")
+ public Response ensureQueue(@PathParam("taskId") String taskId) {
+ testUtilsBean.ensureQueue(taskId);
+ return Response.ok().build();
+ }
+
+ @POST
+ @Path("/queue/enqueueTaskStatusUpdateEvent/{taskId}")
+ public Response enqueueTaskStatusUpdateEvent(@PathParam("taskId") String taskId, String body) throws Exception {
+ TaskStatusUpdateEvent event = Utils.OBJECT_MAPPER.readValue(body, TaskStatusUpdateEvent.class);
+ testUtilsBean.enqueueEvent(taskId, event);
+ return Response.ok().build();
+ }
+
+ @POST
+ @Path("/queue/enqueueTaskArtifactUpdateEvent/{taskId}")
+ public Response enqueueTaskArtifactUpdateEvent(@PathParam("taskId") String taskId, String body) throws Exception {
+ TaskArtifactUpdateEvent event = Utils.OBJECT_MAPPER.readValue(body, TaskArtifactUpdateEvent.class);
+ testUtilsBean.enqueueEvent(taskId, event);
+ return Response.ok().build();
+ }
+
+ @GET
+ @Path("/streamingSubscribedCount")
+ @Produces(TEXT_PLAIN)
+ public Response getStreamingSubscribedCount() {
+ return Response.ok(String.valueOf(streamingSubscribedCount.get()), TEXT_PLAIN).build();
+ }
+}
diff --git a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java
similarity index 72%
rename from src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java
rename to tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java
index 7f3aff8..3746c84 100644
--- a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java
+++ b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java
@@ -1,4 +1,4 @@
-package org.wildfly.extras.a2a.server.apps.jakarta;
+package org.wildfly.extras.a2a.server.jakarta.test.common;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
diff --git a/tests/common/src/main/resources/META-INF/services/org.wildfly.extras.a2a.server.apps.jakarta.TestingHook b/tests/common/src/main/resources/META-INF/services/org.wildfly.extras.a2a.server.apps.jakarta.TestingHook
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/resources/arquillian.xml b/tests/common/src/main/resources/arquillian.xml
similarity index 100%
rename from src/test/resources/arquillian.xml
rename to tests/common/src/main/resources/arquillian.xml
diff --git a/tests/impl/pom.xml b/tests/impl/pom.xml
new file mode 100644
index 0000000..c2ba055
--- /dev/null
+++ b/tests/impl/pom.xml
@@ -0,0 +1,137 @@
+
+
+ 4.0.0
+
+
+ org.wildfly.extras.a2a
+ a2a-java-sdk-server-jakarta-parent
+ 0.2.3.Beta2-SNAPSHOT
+ ../../pom.xml
+
+
+ a2a-java-sdk-server-jakarta-tests
+
+ jar
+
+ WildFly Extras - Java A2A SDK for Jakarta - Tests
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Tests
+
+
+
+ ${project.groupId}
+ a2a-java-sdk-server-jakarta
+ ${project.version}
+ test
+
+
+ ${project.groupId}
+ a2a-java-sdk-server-jakarta-test-common
+ ${project.version}
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-server-common
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ test
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ test
+
+
+ jakarta.enterprise
+ jakarta.enterprise.cdi-api
+ test
+
+
+ jakarta.inject
+ jakarta.inject-api
+ test
+
+
+ jakarta.json
+ jakarta.json-api
+ test
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ test
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.jboss.arquillian.junit5
+ arquillian-junit5-container
+ test
+
+
+ org.wildfly.arquillian
+ wildfly-arquillian-container-managed
+ test
+
+
+ org.jboss.logging
+ commons-logging-jboss-logging
+ test
+
+
+ org.jboss.shrinkwrap
+ shrinkwrap-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.jboss.threads
+ jboss-threads
+ test
+
+
+ org.hamcrest
+ hamcrest
+ test
+
+
+
+
+
+ org.wildfly.glow
+ wildfly-glow-arquillian-plugin
+
+
+ org.wildfly.plugins
+ wildfly-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+
+
\ No newline at end of file
diff --git a/src/scripts/configure_logger.cli b/tests/impl/src/scripts/configure_logger.cli
similarity index 100%
rename from src/scripts/configure_logger.cli
rename to tests/impl/src/scripts/configure_logger.cli
diff --git a/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java b/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java
new file mode 100644
index 0000000..7313384
--- /dev/null
+++ b/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java
@@ -0,0 +1,71 @@
+package org.wildfly.extras.a2a.server.apps.jakarta;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.a2a.A2A;
+import io.a2a.server.PublicAgentCard;
+import io.a2a.server.apps.common.AbstractA2AServerTest;
+import io.a2a.spec.Event;
+import io.a2a.util.Assert;
+import mutiny.zero.ZeroPublisher;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.jboss.arquillian.junit5.container.annotation.ArquillianTest;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.wildfly.extras.a2a.server.jakarta.test.common.A2ATestResource;
+import org.wildfly.extras.a2a.server.jakarta.test.common.RestApplication;
+
+
+@ArquillianTest
+@RunAsClient
+public class JakartaA2AServerTest extends AbstractA2AServerTest {
+
+ public JakartaA2AServerTest() {
+ super(8080);
+ }
+
+ @Deployment
+ public static WebArchive createTestArchive() throws Exception {
+ final JavaArchive[] libraries = List.of(
+ // a2a-java-sdk-client.jar
+ getJarForClass(A2A.class),
+ // a2a-java-sdk-common.jar
+ getJarForClass(Assert.class),
+ // a2a-java-sdk-server-common.jar
+ getJarForClass(PublicAgentCard.class),
+ // a2a-java-sdk-spec.jar
+ getJarForClass(Event.class),
+ // mutiny-zero.jar. This is provided by some WildFly layers, but not always, and not in
+ // the server provisioned by Glow when inspecting our war
+ getJarForClass(ZeroPublisher.class)).toArray(new JavaArchive[0]);
+
+
+ WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war")
+ .addAsLibraries(libraries)
+ // Extra dependencies needed by the tests
+ .addPackage(AbstractA2AServerTest.class.getPackage())
+ .addPackage(A2AServerResource.class.getPackage())
+ .addPackage(A2ATestResource.class.getPackage())
+ // Add deployment descriptors
+ .addAsManifestResource("META-INF/beans.xml", "beans.xml")
+ .addAsWebInfResource("META-INF/beans.xml", "beans.xml")
+ .addAsWebInfResource("WEB-INF/web.xml", "web.xml");
+ archive.toString(true);
+ return archive;
+ }
+
+ static JavaArchive getJarForClass(Class> clazz) throws Exception {
+ File f = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI());
+ return ShrinkWrap.createFromZipFile(JavaArchive.class, f);
+ }
+}
diff --git a/src/test/resources/logging.properties b/tests/impl/src/test/resources/logging.properties
similarity index 100%
rename from src/test/resources/logging.properties
rename to tests/impl/src/test/resources/logging.properties
diff --git a/tests/wildfly-jar/pom.xml b/tests/wildfly-jar/pom.xml
new file mode 100644
index 0000000..8622be2
--- /dev/null
+++ b/tests/wildfly-jar/pom.xml
@@ -0,0 +1,132 @@
+
+
+ 4.0.0
+
+
+ org.wildfly.extras.a2a
+ a2a-java-sdk-server-jakarta-parent
+ 0.2.3.Beta2-SNAPSHOT
+ ../../pom.xml
+
+
+ a2a-java-sdk-server-jakarta-tests-wildfly
+
+ jar
+
+ WildFly Extras - Java A2A SDK for Jakarta - Tests - WildFly Jar
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Tests - WildFly Jar
+
+
+
+ ${project.groupId}
+ a2a-java-sdk-server-jakarta-wildfly
+ ${project.version}
+ test
+
+
+ ${project.groupId}
+ a2a-java-sdk-server-jakarta-test-common
+ ${project.version}
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ test
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ test
+
+
+ jakarta.enterprise
+ jakarta.enterprise.cdi-api
+ test
+
+
+ jakarta.inject
+ jakarta.inject-api
+ test
+
+
+ jakarta.json
+ jakarta.json-api
+ test
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ test
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.jboss.arquillian.junit5
+ arquillian-junit5-container
+ test
+
+
+ org.wildfly.arquillian
+ wildfly-arquillian-container-managed
+ test
+
+
+ org.jboss.logging
+ commons-logging-jboss-logging
+ test
+
+
+ org.jboss.shrinkwrap
+ shrinkwrap-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.jboss.threads
+ jboss-threads
+ test
+
+
+ org.hamcrest
+ hamcrest
+ test
+
+
+
+
+
+ org.wildfly.glow
+ wildfly-glow-arquillian-plugin
+
+
+ org.wildfly.plugins
+ wildfly-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+
+
\ No newline at end of file
diff --git a/tests/wildfly-jar/src/scripts/configure_logger.cli b/tests/wildfly-jar/src/scripts/configure_logger.cli
new file mode 100644
index 0000000..a45fb24
--- /dev/null
+++ b/tests/wildfly-jar/src/scripts/configure_logger.cli
@@ -0,0 +1,2 @@
+/subsystem=logging/logger=org.jboss.weld:add(level=DEBUG)
+/subsystem=logging/logger=io.a2a:add(level=DEBUG)
\ No newline at end of file
diff --git a/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java b/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java
new file mode 100644
index 0000000..42cfeed
--- /dev/null
+++ b/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java
@@ -0,0 +1,51 @@
+package org.wildfly.extras.a2a.server.apps.jakarta;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.a2a.server.apps.common.AbstractA2AServerTest;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.jboss.arquillian.junit5.container.annotation.ArquillianTest;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.wildfly.extras.a2a.server.jakarta.test.common.A2ATestResource;
+import org.wildfly.extras.a2a.server.jakarta.test.common.RestApplication;
+
+
+@ArquillianTest
+@RunAsClient
+public class WildFlyJarJakartaA2AServerTest extends AbstractA2AServerTest {
+
+ public WildFlyJarJakartaA2AServerTest() {
+ super(8080);
+ }
+
+ @Deployment
+ public static WebArchive createTestArchive() throws Exception {
+
+ // Get wildfly-jar path
+ JavaArchive wildFlyJar = ShrinkWrap.createFromZipFile(JavaArchive.class,
+ new File(A2AServerResource.class.getProtectionDomain().getCodeSource().getLocation().toURI()));
+
+ WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war")
+ .addAsLibrary(wildFlyJar)
+ // Extra dependencies needed by the tests
+ .addPackage(AbstractA2AServerTest.class.getPackage())
+ .addPackage(A2ATestResource.class.getPackage())
+ // Add deployment descriptors
+ .addAsManifestResource("META-INF/beans.xml", "beans.xml")
+ .addAsWebInfResource("META-INF/beans.xml", "beans.xml")
+ .addAsWebInfResource("WEB-INF/web.xml", "web.xml");
+ archive.toString(true);
+ return archive;
+ }
+}
diff --git a/tests/wildfly-jar/src/test/resources/logging.properties b/tests/wildfly-jar/src/test/resources/logging.properties
new file mode 100644
index 0000000..17885c8
--- /dev/null
+++ b/tests/wildfly-jar/src/test/resources/logging.properties
@@ -0,0 +1,29 @@
+#
+# Copyright The WildFly Authors
+# SPDX-License-Identifier: Apache-2.0
+#
+
+# Additional logger names to configure (root logger is always configured)
+loggers=sun.rmi,org.jboss.shrinkwrap,org.apache.http.wire
+logger.org.jboss.shrinkwrap.level=INFO
+logger.sun.rmi.level=WARNING
+logger.org.apache.http.wire.level=WARN
+
+# Root logger level
+logger.level=WARN
+
+# Root logger handlers
+logger.handlers=FILE
+
+# File handler configuration
+handler.FILE=org.jboss.logmanager.handlers.FileHandler
+handler.FILE.properties=autoFlush,append,fileName
+handler.FILE.autoFlush=true
+handler.FILE.fileName=./target/test.log
+handler.FILE.formatter=PATTERN
+handler.FILE.append=true
+
+# Formatter pattern configuration
+formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
+formatter.PATTERN.properties=pattern
+formatter.PATTERN.pattern=%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
diff --git a/wildfly-jar/pom.xml b/wildfly-jar/pom.xml
new file mode 100644
index 0000000..1b6ab8c
--- /dev/null
+++ b/wildfly-jar/pom.xml
@@ -0,0 +1,182 @@
+
+
+ 4.0.0
+
+
+ org.wildfly.extras.a2a
+ a2a-java-sdk-server-jakarta-parent
+ 0.2.3.Beta2-SNAPSHOT
+
+
+ a2a-java-sdk-server-jakarta-wildfly
+
+ jar
+
+ WildFly Extras - Java A2A SDK for Jakarta - WildFly Jar
+ Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Jar for WildFly
+
+ 3.7.1
+
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-client
+
+
+ *
+ *
+
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-common
+
+
+ *
+ *
+
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-server-common
+
+
+ *
+ *
+
+
+
+
+ io.github.a2asdk
+ a2a-java-sdk-spec
+
+
+ *
+ *
+
+
+
+
+ io.smallrye.reactive
+ mutiny-zero
+
+
+ *
+ *
+
+
+
+
+ ${project.groupId}
+ a2a-java-sdk-server-jakarta
+ ${project.version}
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test
+
+
+ io.github.a2asdk
+ a2a-java-sdk-tests-server-common
+ test-jar
+ test
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ provided
+
+
+ jakarta.enterprise
+ jakarta.enterprise.cdi-api
+ provided
+
+
+ jakarta.inject
+ jakarta.inject-api
+ provided
+
+
+ jakarta.json
+ jakarta.json-api
+ provided
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.jboss.arquillian.junit5
+ arquillian-junit5-container
+ test
+
+
+ org.wildfly.arquillian
+ wildfly-arquillian-container-managed
+ test
+
+
+ org.jboss.logging
+ commons-logging-jboss-logging
+ test
+
+
+ org.jboss.shrinkwrap
+ shrinkwrap-api
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.jboss.threads
+ jboss-threads
+ test
+
+
+ org.hamcrest
+ hamcrest
+ test
+
+
+
+
+
+ maven-assembly-plugin
+
+
+ package
+
+ single
+
+
+ false
+
+ jar-with-dependencies
+
+
+
+
+
+
+
+
\ No newline at end of file