diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbservletwebservicesinwar/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbservletwebservicesinwar/webclient/Client.java
index 1bda942..3797941 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbservletwebservicesinwar/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbservletwebservicesinwar/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package webclient;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 import ejbclient.*;
@@ -33,12 +33,12 @@
             webclient.Hello hiport2;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 String ret1 = hiport1.sayHello("All");
                 String ret2 = hiport2.sayHello("All");
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-2/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-2/webclient/Client.java
index c73bd01..b263ee0 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-2/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-2/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package client;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -29,12 +29,12 @@
         Hello hiport;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 String ret = hiport.sayHello("All");
                 PrintWriter out = resp.getWriter();
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-3/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-3/webclient/Client.java
index c73bd01..b263ee0 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-3/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-3/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package client;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -29,12 +29,12 @@
         Hello hiport;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 String ret = hiport.sayHello("All");
                 PrintWriter out = resp.getWriter();
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-interceptor/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-interceptor/webclient/Client.java
index c73bd01..b263ee0 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-interceptor/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-interceptor/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package client;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -29,12 +29,12 @@
         Hello hiport;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 String ret = hiport.sayHello("All");
                 PrintWriter out = resp.getWriter();
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-sessioncontext/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-sessioncontext/webclient/Client.java
index c73bd01..b263ee0 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-sessioncontext/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/ejbwebservicesinwar-sessioncontext/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package client;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -29,12 +29,12 @@
         Hello hiport;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 String ret = hiport.sayHello("All");
                 PrintWriter out = resp.getWriter();
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java
index e9d8aae..8052095 100644
--- a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java
@@ -16,8 +16,8 @@
 
 package client;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -34,12 +34,12 @@
         Hello hiport;
 
        public void doGet(HttpServletRequest req, HttpServletResponse resp) 
-		throws javax.servlet.ServletException {
+		throws jakarta.servlet.ServletException {
            doPost(req, resp);
        }
 
        public void doPost(HttpServletRequest req, HttpServletResponse resp)
-              throws javax.servlet.ServletException {
+              throws jakarta.servlet.ServletException {
             try {
                 com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
                 String ret = hiport.sayHello("All");
