You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2022/12/27 14:27:53 UTC

[juneau] 01/01: Upgrade to Servlet 6.0.0

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch jbUpgradeServletTo6
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit bc2d6ff926080a3af32166bd9b1971b6a47f20d7
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Tue Dec 27 09:27:21 2022 -0500

    Upgrade to Servlet 6.0.0
---
 juneau-build-javadoc.sh                            |   2 +-
 .../org/apache/juneau/config/store/FileStore.java  |   1 -
 .../juneau-examples-rest-springboot.launch         |   4 +-
 .../juneau/examples/rest/springboot/App.java       |   4 +-
 .../juneau/examples/rest/RequestEchoResource.java  |   4 +-
 .../juneau-microservice-ftest/.gitignore           |   6 -
 .../juneau-microservice-ftest/files/jetty.xml      |  80 ----------
 .../juneau-microservice-test.cfg                   |  38 -----
 .../juneau-microservice-test.launch                |  18 ---
 .../juneau-microservice-ftest/logs/.gitignore      |   1 -
 .../juneau-microservice-ftest/logs/empty.txt       |   0
 .../juneau-microservice-ftest/pom.xml              | 112 --------------
 .../src/main/java/empty.txt                        |   0
 .../apache/juneau/rest/test/ConfigResource.java    |  40 -----
 .../org/apache/juneau/rest/test/ConfigTest.java    |  64 --------
 .../juneau/rest/test/LargePojosResource.java       |  43 ------
 .../org/apache/juneau/rest/test/RestTestcase.java  |  91 -----------
 .../java/org/apache/juneau/rest/test/Root.java     |  40 -----
 .../apache/juneau/rest/test/TestMicroservice.java  | 171 ---------------------
 .../org/apache/juneau/rest/test/_TestSuite.java    |  42 -----
 .../rest/test/HtmlPropertiesResource.properties    |  31 ----
 .../juneau/rest/test/ParamsResource.properties     |  15 --
 .../rest/test/ParamsResource_ja_JP.properties      |  15 --
 .../microservice/jetty/JettyMicroservice.java      |   2 +-
 .../microservice/springboot/template/App.java      |   2 +-
 juneau-microservice/pom.xml                        |   1 -
 juneau-open-javadoc.sh                             |   2 +-
 .../apache/juneau/rest/client/ResponseContent.java |   9 ++
 .../apache/juneau/rest/mock/MockHttpSession.java   |  33 +---
 .../apache/juneau/rest/mock/MockRestClient.java    |   2 +-
 .../apache/juneau/rest/mock/MockRestRequest.java   |   4 +-
 .../juneau/rest/mock/MockServletRequest.java       |  29 ++--
 .../juneau/rest/mock/MockServletResponse.java      |  20 +--
 .../rest/OverrideableHttpServletRequest.java       |   2 +-
 .../java/org/apache/juneau/rest/RestChildren.java  |   2 +-
 .../java/org/apache/juneau/rest/RestContext.java   |   6 +-
 .../java/org/apache/juneau/rest/RestOpContext.java |   4 +-
 .../java/org/apache/juneau/rest/RestRequest.java   |   4 +-
 .../java/org/apache/juneau/rest/RestResponse.java  |   4 +-
 .../java/org/apache/juneau/rest/RestSession.java   |   5 +-
 .../apache/juneau/rest/annotation/RestDestroy.java |   2 +-
 .../apache/juneau/rest/annotation/RestEndCall.java |   2 +-
 .../apache/juneau/rest/annotation/RestInit.java    |   2 +-
 .../juneau/rest/annotation/RestPostCall.java       |   4 +-
 .../juneau/rest/annotation/RestPostInit.java       |   2 +-
 .../apache/juneau/rest/annotation/RestPreCall.java |   4 +-
 .../juneau/rest/annotation/RestStartCall.java      |   2 +-
 .../org/apache/juneau/rest/arg/CookieList.java     |   2 +-
 .../juneau/rest/arg/HttpServletRequestArgs.java    |   4 +-
 .../juneau/rest/arg/HttpServletResponseArgs.java   |   2 +-
 .../apache/juneau/rest/arg/HttpSessionArgs.java    |   2 +-
 .../apache/juneau/rest/arg/RestRequestArgs.java    |   4 +-
 .../apache/juneau/rest/arg/RestResponseArgs.java   |   2 +-
 .../apache/juneau/rest/debug/DebugEnablement.java  |   2 +-
 .../juneau/rest/httppart/RequestAttributes.java    |   4 +-
 .../juneau/rest/httppart/RequestContent.java       |   2 +-
 .../juneau/rest/httppart/RequestFormParam.java     |   4 +-
 .../juneau/rest/httppart/RequestFormParams.java    |   2 +-
 .../juneau/rest/logger/BasicTestCallLogger.java    |   2 +-
 .../org/apache/juneau/rest/logger/CallLogger.java  |   5 +-
 .../apache/juneau/rest/logger/CallLoggerRule.java  |  13 +-
 .../juneau/rest/matcher/ClientVersionMatcher.java  |   2 +-
 .../rest/matcher/MultipartFormDataMatcher.java     |   2 +-
 .../apache/juneau/rest/matcher/RestMatcher.java    |   2 +-
 .../juneau/rest/matcher/UrlEncodedFormMatcher.java |   2 +-
 .../juneau/rest/processor/ResponseProcessor.java   |   2 +-
 .../apache/juneau/rest/rrpc/RrpcRestOpContext.java |   2 +-
 .../juneau/rest/servlet/BasicRestObject.java       |   2 +-
 .../juneau/rest/servlet/BasicRestObjectGroup.java  |   2 +-
 .../org/apache/juneau/rest/servlet/RestObject.java |   4 +-
 .../apache/juneau/rest/servlet/RestServlet.java    |   6 +-
 .../rest/swagger/BasicSwaggerProviderSession.java  |   2 +-
 .../rest/util/BoundedServletInputStream.java       |   2 +-
 .../rest/util/CachingHttpServletRequest.java       |   6 +-
 .../rest/util/CachingHttpServletResponse.java      |   6 +-
 .../rest/util/FinishableServletOutputStream.java   |   2 +-
 .../org/apache/juneau/rest/util/RestUtils.java     |   2 +-
 .../juneau/rest/vars/RequestAttributeVar.java      |   2 +-
 juneau-sc/juneau-sc-server/pom.xml                 |   5 +
 .../http/remote/Remote_CommonInterfaces_Test.java  |  36 ++---
 .../org/apache/juneau/rest/RestOp_Params_Test.java |   2 +-
 .../rest/Rest_PredefinedStatusCodes_Test.java      |   2 +-
 .../juneau/rest/annotation/RestInit_Test.java      |   2 +-
 .../rest/annotation/RestOp_Matchers_Test.java      |   2 +-
 .../juneau/rest/annotation/RestPostCall_Test.java  |   2 +-
 .../juneau/rest/annotation/RestPreCall_Test.java   |   2 +-
 .../juneau/rest/annotation/RestStartCall_Test.java |   2 +-
 .../rest/test/client/ThirdPartyProxyResource.java  |   2 +-
 pom.xml                                            |   6 +-
 89 files changed, 142 insertions(+), 990 deletions(-)

diff --git a/juneau-build-javadoc.sh b/juneau-build-javadoc.sh
index 8fb3a0e13..17b12b1b1 100755
--- a/juneau-build-javadoc.sh
+++ b/juneau-build-javadoc.sh
@@ -11,7 +11,7 @@
 # * specific language governing permissions and limitations under the License.                                              *
 # ***************************************************************************************************************************
 
-. juneau-env.sh
+. ./juneau-env.sh
 
 function fail_with_message {
 	X_DATE=$(date +'%H:%M:%S') 
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
index f3b5af273..168e6968b 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
@@ -577,7 +577,6 @@ public class FileStore extends ConfigStore {
 			dir.toPath().register(watchService, kinds, modifier);
 		}
 
-		@SuppressWarnings("restriction")
 		private WatchEvent.Modifier lookupModifier(WatcherSensitivity s) {
 			try {
 				switch(s) {
diff --git a/juneau-examples/juneau-examples-rest-springboot/juneau-examples-rest-springboot.launch b/juneau-examples/juneau-examples-rest-springboot/juneau-examples-rest-springboot.launch
index 35cab1ceb..085c063eb 100644
--- a/juneau-examples/juneau-examples-rest-springboot/juneau-examples-rest-springboot.launch
+++ b/juneau-examples/juneau-examples-rest-springboot/juneau-examples-rest-springboot.launch
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+    <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
     <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
         <listEntry value="/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java"/>
     </listAttribute>
@@ -9,10 +10,11 @@
     <booleanAttribute key="org.eclipse.jdt.debug.ui.CONSIDER_INHERITED_MAIN" value="true"/>
     <booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
+    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
     <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/"/>
+    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-18/"/>
     <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.examples.rest.springboot.App"/>
     <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="juneau-examples-rest-springboot"/>
     <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-examples-rest-springboot"/>
diff --git a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
index 4204be8d1..22e95a928 100644
--- a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
+++ b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
@@ -12,8 +12,6 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.examples.rest.springboot;
 
-import javax.servlet.*;
-
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.springboot.*;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -95,7 +93,7 @@ public class App {
 	 * @return The servlet registration mapped to "/*".
 	 */
 	@Bean
-	public ServletRegistrationBean<Servlet> getRootServlet(RootResources rootResources) {
+	public ServletRegistrationBean<jakarta.servlet.Servlet> getRootServlet(RootResources rootResources) {
 		return new ServletRegistrationBean<>(rootResources, "/*");
 	}
 }
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
index f222fa29e..12bd0da13 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RequestEchoResource.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.html.annotation.*;
diff --git a/juneau-microservice/juneau-microservice-ftest/.gitignore b/juneau-microservice/juneau-microservice-ftest/.gitignore
deleted file mode 100644
index 34acf885c..000000000
--- a/juneau-microservice/juneau-microservice-ftest/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/target/
-**/.DS_Store
-.classpath
-.project
-/.settings/
-/bin/
diff --git a/juneau-microservice/juneau-microservice-ftest/files/jetty.xml b/juneau-microservice/juneau-microservice-ftest/files/jetty.xml
deleted file mode 100644
index 30a1fd8e7..000000000
--- a/juneau-microservice/juneau-microservice-ftest/files/jetty.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
-<!--
- ***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
- * with the License.  You may obtain a copy of the License at                                                              *
- *                                                                                                                         *
- *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
- *                                                                                                                         *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
- * specific language governing permissions and limitations under the License.                                              *
- ***************************************************************************************************************************
--->
-
-<Configure id="ExampleServer" class="org.eclipse.jetty.server.Server">
-
-	<Set name="connectors">
-		<Array type="org.eclipse.jetty.server.Connector">
-			<Item>
-				<New class="org.eclipse.jetty.server.ServerConnector">
-					<Arg>
-						<Ref refid="ExampleServer" />
-					</Arg>
-					<Set name="port">$S{availablePort,8080}</Set>
-				</New>
-			</Item>
-		</Array>
-	</Set>
-
-	<New id="context" class="org.eclipse.jetty.servlet.ServletContextHandler">
-		<Set name="contextPath">/</Set>
-		<Set name="sessionHandler">
-			<New class="org.eclipse.jetty.server.session.SessionHandler" />
-		</Set>
-	</New>
-
-	<Set name="handler">
-		<New class="org.eclipse.jetty.server.handler.HandlerCollection">
-			<Set name="handlers">
-				<Array type="org.eclipse.jetty.server.Handler">
-					<Item>
-						<Ref refid="context" />
-					</Item>
-					<Item>
-						<New class="org.eclipse.jetty.server.handler.DefaultHandler" />
-					</Item>
-				</Array>
-			</Set>
-		</New>
-	</Set>
-
-	<Set name="requestLog">
-		<New id="RequestLogImpl" class="org.eclipse.jetty.server.CustomRequestLog">
-			<!-- Param 0: org.eclipse.jetty.server.RequestLogWriter -->
-			<Arg>
-				<New class="org.eclipse.jetty.server.RequestLogWriter">
-					<Set name="append">false</Set>
-					<Set name="filename"><Property name="jetty.logs" default="$C{Logging/logDir,logs}" />/jetty-requests.log</Set>
-					<Set name="filenameDateFormat">yyyy_MM_dd</Set>
-					<Set name="retainDays">90</Set>
-					<Set name="timeZone">GMT</Set>
-				</New>
-			</Arg>
-			<!-- Param 1: String -->
-			<Arg>
-				<Get class="org.eclipse.jetty.server.CustomRequestLog" name="EXTENDED_NCSA_FORMAT" />
-			</Arg>      
-		</New>
-	</Set>
-
-    <Get name="ThreadPool">
-        <Set name="minThreads" type="int">10</Set>
-        <Set name="maxThreads" type="int">100</Set>
-        <Set name="idleTimeout" type="int">60000</Set>
-        <Set name="detailedDump">true</Set>
-    </Get>
-</Configure>
diff --git a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg b/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg
deleted file mode 100644
index 3157fdaff..000000000
--- a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.cfg
+++ /dev/null
@@ -1,38 +0,0 @@
-# ***************************************************************************************************************************
-# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-# * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-# * with the License.  You may obtain a copy of the License at                                                              * 
-# *                                                                                                                         *
-# *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-# *                                                                                                                         *
-# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-# * specific language governing permissions and limitations under the License.                                              *
-# ***************************************************************************************************************************
-
-saveConfigAction = RESTART_SERVER
-
-[Jetty]
-config = files/jetty.xml
-resolveVars = true
-port = 10001,0,0,0
-
-[REST]
-
-staticFiles = htdocs:htdocs
-
-[Test]
-int1 = 1
-int2 = [1,2,3]
-int3 = $C{Test/int1,-1}
-int4 = $C{Test/int3,-1}
-int5 = $C{XXX,-1}
-boolean1 = true
-boolean2 = [true,true]
-testManifestEntry = $MF{Test-Entry}
-
-[SystemProperties]
-org.eclipse.jetty.util.log.class = org.apache.juneau.microservice.jetty.JettyLogger
-org.eclipse.jetty.LEVEL = ALL
-derby.stream.error.file = $C{Logging/logDir}/derby-errors.log
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.launch b/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.launch
deleted file mode 100644
index d42cc7989..000000000
--- a/juneau-microservice/juneau-microservice-ftest/juneau-microservice-test.launch
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-        <listEntry value="/juneau-microservice-ftest"/>
-    </listAttribute>
-    <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-        <listEntry value="4"/>
-    </listAttribute>
-    <booleanAttribute key="org.eclipse.jdt.debug.ui.CONSIDER_INHERITED_MAIN" value="true"/>
-    <booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
-    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-    <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
-    <stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.juneau.microservice.jetty.JettyMicroservice"/>
-    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="juneau-microservice-test.cfg"/>
-    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="juneau-microservice-ftest"/>
-    <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
-</launchConfiguration>
diff --git a/juneau-microservice/juneau-microservice-ftest/logs/.gitignore b/juneau-microservice/juneau-microservice-ftest/logs/.gitignore
deleted file mode 100644
index bd317cc13..000000000
--- a/juneau-microservice/juneau-microservice-ftest/logs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/*log*
diff --git a/juneau-microservice/juneau-microservice-ftest/logs/empty.txt b/juneau-microservice/juneau-microservice-ftest/logs/empty.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/juneau-microservice/juneau-microservice-ftest/pom.xml b/juneau-microservice/juneau-microservice-ftest/pom.xml
deleted file mode 100644
index d1c97de00..000000000
--- a/juneau-microservice/juneau-microservice-ftest/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ***************************************************************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
- * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
- * with the License.  You may obtain a copy of the License at                                                              *
- *                                                                                                                         *
- *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
- *                                                                                                                         *
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
- * specific language governing permissions and limitations under the License.                                              *
- ***************************************************************************************************************************
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.juneau</groupId>
-		<artifactId>juneau-microservice</artifactId>
-		<version>9.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>juneau-microservice-ftest</artifactId>
-	<name>juneau/microservice/microservice-ftest</name>
-	<description>Apache Juneau Microservice Function Tests</description>
-
-	<properties>
-		<maven.javadoc.skip>true</maven.javadoc.skip>
-	</properties>
-
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-examples-rest</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-server</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-rest-mock</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.ws.rs</groupId>
-			<artifactId>jsr311-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>jakarta.servlet</groupId>
-			<artifactId>jakarta.servlet-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>javax.activation</groupId>
-			<artifactId>javax.activation-api</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.sun.activation</groupId>
-			<artifactId>javax.activation</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.juneau</groupId>
-			<artifactId>juneau-utest-utils</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-	</dependencies>
-	
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<configuration>
-					<includes>
-						<include>
-							**/_TestSuite.java
-						</include>
-					</includes>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.jacoco</groupId>
-				<artifactId>jacoco-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>default-prepare-agent</id>
-						<goals>
-							<goal>prepare-agent</goal>
-						</goals>
-					</execution>
-					<execution>
-						<id>default-report</id>
-						<phase>prepare-package</phase>
-						<goals>
-							<goal>report</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-</project>
diff --git a/juneau-microservice/juneau-microservice-ftest/src/main/java/empty.txt b/juneau-microservice/juneau-microservice-ftest/src/main/java/empty.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java
deleted file mode 100644
index 57de47845..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigResource.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.http.HttpMethod.*;
-
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.servlet.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@Rest(
-	path="/testConfig"
-)
-@SuppressWarnings({"serial"})
-public class ConfigResource extends BasicRestServlet {
-
-	@RestOp(method=GET, path="/")
-	public Object test1(RestRequest req) {
-		return req.getConfig().toMap();
-	}
-
-	@RestOp(method=GET, path="/{key}/{class}")
-	public Object test2(RestRequest req, @Path("key") String key, @Path("class") Class<?> c) throws Exception {
-		return req.getConfig().get(key).as(c).orElse(null);
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigTest.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
deleted file mode 100644
index 6f5e3a120..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/ConfigTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.assertions.Assertions.*;
-import static org.apache.juneau.common.internal.StringUtils.*;
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
-import java.util.*;
-
-import org.apache.juneau.collections.*;
-import org.apache.juneau.config.*;
-import org.apache.juneau.rest.client.*;
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class ConfigTest extends RestTestcase {
-
-	private static String URL = "/testConfig";
-
-	//====================================================================================================
-	// Basic tests
-	//====================================================================================================
-	@Test
-	public void test() throws Exception {
-		RestClient c = TestMicroservice.client().accept("text/json5").build();
-
-		Map<String,Map<String,Object>> m = c.get(URL).run().getContent().as(Map.class, String.class, JsonMap.class);
-
-		Config cf = Config.create().memStore().build().load(m);
-
-		assertObject(cf.getSection("Test").asMap().get()).asJson().is("{int1:'1',int2:'[1,2,3]',int3:'1',int4:'1',int5:'-1',boolean1:'true',boolean2:'[true,true]',testManifestEntry:'test-value'}");
-
-		assertEquals("'1'", c.get(URL + "/Test%2Fint1/" + getName(String.class)).run().getContent().asString());
-		assertEquals("'[1,2,3]'", c.get(URL + "/Test%2Fint2/" + getName(String.class)).run().getContent().asString());
-		assertEquals("['1','2','3']", c.get(URL + "/Test%2Fint2/" + getName(String[].class)).run().getContent().asString());
-		assertEquals("[1,2,3]", c.get(URL + "/Test%2Fint2/" + getName(int[].class)).run().getContent().asString());
-		assertEquals("[1,2,3]", c.get(URL + "/Test%2Fint2/" + getName(Integer[].class)).run().getContent().asString());
-		assertEquals("1", c.get(URL + "/Test%2Fint3/" + getName(Integer.class)).run().getContent().asString());
-		assertEquals("1", c.get(URL + "/Test%2Fint4/" + getName(Integer.class)).run().getContent().asString());
-		assertEquals("-1", c.get(URL + "/Test%2Fint5/" + getName(Integer.class)).run().getContent().asString());
-		assertEquals("true", c.get(URL + "/Test%2Fboolean1/" + getName(Boolean.class)).run().getContent().asString());
-		assertEquals("[true,true]", c.get(URL + "/Test%2Fboolean2/" + getName(Boolean[].class)).run().getContent().asString());
-		assertEquals("'test-value'", c.get(URL + "/Test%2FtestManifestEntry/" + getName(String.class)).run().getContent().asString());
-
-		cf.close();
-		c.closeQuietly();
-	}
-
-	private String getName(Class<?> c) {
-		return urlEncode(c.getName());
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/LargePojosResource.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/LargePojosResource.java
deleted file mode 100644
index ee9edf581..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/LargePojosResource.java
+++ /dev/null
@@ -1,43 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.http.HttpMethod.*;
-
-import org.apache.juneau.http.annotation.*;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.servlet.*;
-import org.apache.juneau.testutils.pojos.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@Rest(
-	path="/testLargePojos"
-)
-public class LargePojosResource extends BasicRestServlet {
-	private static final long serialVersionUID = 1L;
-
-	//====================================================================================================
-	// Test how long it takes to serialize/parse various content types.
-	//====================================================================================================
-	@RestOp(method=GET, path="/")
-	public LargePojo testGet() {
-		return LargePojo.get();
-	}
-
-	@RestOp(method=PUT, path="/")
-	public String testPut(@Content LargePojo in) {
-		return "ok";
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java
deleted file mode 100644
index d5827b546..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java
+++ /dev/null
@@ -1,91 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.internal.CollectionUtils.*;
-
-import java.io.*;
-import java.util.*;
-
-import org.apache.juneau.parser.*;
-import org.apache.juneau.rest.client.*;
-import org.apache.juneau.serializer.*;
-import org.junit.*;
-
-/**
- * Superclass of REST testcases that start up the REST test microservice before running the tests locally.
- *
- * @author James Bognar (james.bognar@salesforce.com)
- */
-public class RestTestcase {
-
-	private static boolean microserviceStarted;
-
-	// Reusable RestClients keyed by label that live for the duration of a testcase class.
-	private static Map<String,RestClient> clients = map();
-
-	// Reusable object cache that lives for the duration of a testcase class.
-	private static Map<String,Object> cache = map();
-
-	@BeforeClass
-	public static void setUp() {
-		microserviceStarted = TestMicroservice.startMicroservice();
-	}
-
-	/**
-	 * Creates a REST client against the test microservice using the specified serializer and parser.
-	 * Client is automatically closed on tear-down.
-	 */
-	protected RestClient getClient(String label, Serializer serializer, Parser parser) {
-		if (! clients.containsKey(label))
-			clients.put(label, TestMicroservice.client(serializer, parser).build());
-		return clients.get(label);
-	}
-
-	/**
-	 * Same as {@link #getClient(String, Serializer, Parser)} but sets the debug flag on the client.
-	 */
-	protected RestClient getDebugClient(String label, Serializer serializer, Parser parser) {
-		if (! clients.containsKey(label))
-			clients.put(label, TestMicroservice.client(serializer, parser).debug().build());
-		return clients.get(label);
-	}
-
-	protected void addClientToLifecycle(RestClient c) {
-		clients.put(UUID.randomUUID().toString(), c);
-	}
-
-	@SuppressWarnings("unchecked")
-	protected <T> T getCached(String label, Class<T> c) {
-		return (T)cache.get(label);
-	}
-
-	protected void cache(String label, Object o) {
-		cache.put(label, o);
-	}
-
-	@AfterClass
-	public static void tearDown() {
-		if (microserviceStarted)
-			TestMicroservice.stopMicroservice();
-		for (RestClient rc : clients.values()) {
-			try {
-				rc.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		clients.clear();
-		cache.clear();
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
deleted file mode 100644
index 5f1716666..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.http.HttpMethod.*;
-
-import org.apache.juneau.microservice.jetty.resources.*;
-import org.apache.juneau.microservice.resources.*;
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.beans.*;
-import org.apache.juneau.rest.servlet.*;
-
-@Rest(
-	path="/*",
-	children={
-		DebugResource.class,
-		ConfigResource.class,
-		LargePojosResource.class,
-		ShutdownResource.class,
-	}
-)
-public class Root extends BasicRestServlet {
-	private static final long serialVersionUID = 1L;
-
-	@RestOp(method=GET, path="/")
-	public ChildResourceDescriptions doGet(RestRequest req) throws Exception {
-		return ChildResourceDescriptions.of(req);
-	}
-}
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
deleted file mode 100644
index 59730d5b4..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/TestMicroservice.java
+++ /dev/null
@@ -1,171 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.common.internal.ThrowableUtils.*;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import org.apache.http.*;
-import org.apache.http.client.*;
-import org.apache.http.impl.client.*;
-import org.apache.http.protocol.*;
-import org.apache.juneau.microservice.jetty.*;
-import org.apache.juneau.parser.*;
-import org.apache.juneau.rest.client.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * Utility class for starting up the tests microservice.
- * @author james.bognar
- */
-public class TestMicroservice {
-
-	static JettyMicroservice microservice;
-	static URI microserviceURI;
-
-	// Reusable HTTP clients that get created and shut down with the microservice.
-	public static RestClient DEFAULT_CLIENT, DEFAULT_CLIENT_DEBUG;
-	public static RestClient DEFAULT_CLIENT_PLAINTEXT;
-
-	/**
-	 * Starts the microservice.
-	 * @return <jk>true</jk> if the service started, <jk>false</jk> if it's already started.
-	 * If this returns <jk>false</jk> then don't call stopMicroservice()!.
-	 */
-	public static boolean startMicroservice() {
-		if (microservice != null)
-			return false;
-		try {
-			Locale.setDefault(Locale.US);
-			microservice = JettyMicroservice
-				.create()
-				.configName("juneau-microservice-test.cfg")
-				.manifest(
-					new StringReader("Test-Entry: test-value\n")
-				)
-				.servlet(Root.class)
-				.build()
-			;
-			microserviceURI = microservice.start().getURI();
-			DEFAULT_CLIENT = client().json().build();
-			DEFAULT_CLIENT_DEBUG = client().json().debug().build();
-			DEFAULT_CLIENT_PLAINTEXT = client().plainText().build();
-			return true;
-		} catch (Throwable e) {
-			e.printStackTrace(); // NOT DEBUG
-			return false;
-		}
-	}
-
-	/**
-	 * Returns the URI of the microservice.
-	 * @return The URI of the microservice.
-	 */
-	public static URI getURI() {
-		if (microservice == null)
-			startMicroservice();
-		return microserviceURI;
-	}
-
-	/**
-	 * Stops the microservice.
-	 */
-	public static void stopMicroservice() {
-		try {
-			microservice.stop();
-			microservice = null;
-			DEFAULT_CLIENT.closeQuietly();
-			DEFAULT_CLIENT_PLAINTEXT.closeQuietly();
-
-		} catch (Exception e) {
-			System.err.println(e); // NOT DEBUG
-		}
-	}
-
-	/**
-	 * Create a new HTTP client.
-	 */
-	public static RestClient.Builder client() {
-		try {
-			final RequestLine[] currentRequest = new RequestLine[1];
-			final StatusLine[] currentResponse = new StatusLine[1];
-			RestClient.Builder rc = RestClient.create()
-				.json()
-				.rootUrl(microserviceURI)
-				.noTrace();
-			rc.retryHandler(
-					new HttpRequestRetryHandler() {
-						@Override
-						public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
-							System.err.println("*** ERROR ***");  // NOT DEBUG
-							TestMicroservice.jettyDump(currentRequest[0], currentResponse[0]);
-							return (executionCount < 3);
-						}
-					}
-				)
-				.addInterceptorFirst(new org.apache.http.HttpRequestInterceptor() {
-					@Override
-					public void process(HttpRequest r, HttpContext c) throws HttpException, IOException {
-						currentRequest[0] = r.getRequestLine();
-					}
-				})
-				.addInterceptorFirst(new org.apache.http.HttpResponseInterceptor() {
-					@Override
-					public void process(HttpResponse r, HttpContext c) throws HttpException, IOException {
-						currentResponse[0] = r.getStatusLine();
-					}
-				});
-			return rc;
-		} catch (Exception e) {
-			throw asRuntimeException(e);
-		}
-	}
-
-	/**
-	 * Create a new HTTP client using the specified serializer and parser.
-	 */
-	public static RestClient.Builder client(Serializer s, Parser p) {
-		return client().serializer(s).parser(p);
-	}
-
-	/**
-	 * Create a new HTTP client using the specified serializer and parser.
-	 */
-	public static RestClient.Builder client(Class<? extends Serializer> s, Class<? extends Parser> p) {
-		return client().serializer(s).parser(p);
-	}
-
-	public static CloseableHttpClient createHttpClient() {
-		try {
-			return HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy()).build();
-		} catch (Exception e) {
-			throw asRuntimeException(e);
-		}
-	}
-
-	private static int dumpCount = 0;
-
-	public static void jettyDump(RequestLine rl, StatusLine sl) {
-		try (FileWriter fw = new FileWriter(microservice.getConfig().get("Logging/logDir").orElse(".") + "/jetty-thread-dump-"+(dumpCount++)+".log")) {
-			String dump = microservice.getServer().dump();
-			fw.append("RequestLine = [" + rl + "]\n");
-			fw.append("StatusLine = [" + sl + "]\n");
-			fw.append(dump);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
deleted file mode 100644
index a58d74bc8..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import org.junit.*;
-import org.junit.runner.*;
-import org.junit.runners.*;
-import org.junit.runners.Suite.*;
-
-/**
- * Runs all the testcases in this project.
- * Starts a REST service running org.apache.juneau.rest.testutils.Root on port 10001.
- * Stops the REST service after running the tests.
- */
-@RunWith(Suite.class)
-@SuiteClasses({
-	ConfigTest.class
-})
-public class _TestSuite {
-
-	@BeforeClass
-	public static void setUp() {
-		double version = Double.parseDouble(System.getProperty("java.specification.version"));
-		Assume.assumeFalse("Java version " + version + " detected.  Tests will be skipped.", version < 1.8);
-		TestMicroservice.startMicroservice();
-	}
-
-	@AfterClass
-	public static void tearDown() {
-		TestMicroservice.stopMicroservice();
-	}
-}
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/HtmlPropertiesResource.properties b/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/HtmlPropertiesResource.properties
deleted file mode 100644
index a35bfe71c..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/HtmlPropertiesResource.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-# ***************************************************************************************************************************
-# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-# * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            * 
-# * with the License.  You may obtain a copy of the License at                                                              *
-# *                                                                                                                         *
-# *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-# *                                                                                                                         *
-# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-# * specific language governing permissions and limitations under the License.                                              *
-# *                                                                                                                         *
-# ***************************************************************************************************************************
-
-LocalizedExplicit.pageTitle = LocalizedExplicit.nls.pageTitle
-LocalizedExplicit.pageText = LocalizedExplicit.nls.pageText
-
-LocalizedExplicit.test2.pageTitle = LocalizedExplicit.test2.nls.pageTitle
-LocalizedExplicit.test2.pageText = LocalizedExplicit.test2.nls.pageText
-
-LocalizedExplicit.test3.pageTitle = LocalizedExplicit.test3.nls.pageTitle
-LocalizedExplicit.test3.pageText = LocalizedExplicit.test3.nls.pageText
-
-LocalizedExplicit.test4.pageTitle = LocalizedExplicit.test4.nls.pageTitle
-LocalizedExplicit.test4.pageText = LocalizedExplicit.test4.nls.pageText
-
-LocalizedImplicit.pageTitle = LocalizedImplicit.nls.pageTitle
-LocalizedImplicit.pageText = LocalizedImplicit.nls.pageText
-
-LocalizedImplicit.test2.pageTitle = LocalizedImplicit.test2.nls.pageTitle
-LocalizedImplicit.test2.pageText = LocalizedImplicit.test2.nls.pageText
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource.properties b/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource.properties
deleted file mode 100644
index 73add6193..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# ***************************************************************************************************************************
-# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-# * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            * 
-# * with the License.  You may obtain a copy of the License at                                                              *
-# *                                                                                                                         *
-# *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-# *                                                                                                                         *
-# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-# * specific language governing permissions and limitations under the License.                                              *
-# *                                                                                                                         *
-# ***************************************************************************************************************************
-
-foo = bar
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties b/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties
deleted file mode 100644
index 336741ed9..000000000
--- a/juneau-microservice/juneau-microservice-ftest/src/test/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# ***************************************************************************************************************************
-# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-# * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            * 
-# * with the License.  You may obtain a copy of the License at                                                              *
-# *                                                                                                                         *
-# *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-# *                                                                                                                         *
-# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-# * specific language governing permissions and limitations under the License.                                              *
-# *                                                                                                                         *
-# ***************************************************************************************************************************
-
-foo = baz
\ No newline at end of file
diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index 7103e8726..4fe8b8e91 100644
--- a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -24,7 +24,7 @@ import java.net.*;
 import java.util.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
diff --git a/juneau-microservice/juneau-my-springboot-microservice/src/main/java/org/apache/juneau/microservice/springboot/template/App.java b/juneau-microservice/juneau-my-springboot-microservice/src/main/java/org/apache/juneau/microservice/springboot/template/App.java
index 032bfd93d..c9c5b7c0f 100644
--- a/juneau-microservice/juneau-my-springboot-microservice/src/main/java/org/apache/juneau/microservice/springboot/template/App.java
+++ b/juneau-microservice/juneau-my-springboot-microservice/src/main/java/org/apache/juneau/microservice/springboot/template/App.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.springboot.template;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.springboot.*;
diff --git a/juneau-microservice/pom.xml b/juneau-microservice/pom.xml
index deeb7f90a..fa641ff4a 100644
--- a/juneau-microservice/pom.xml
+++ b/juneau-microservice/pom.xml
@@ -32,7 +32,6 @@
 		<module>juneau-microservice-core</module>
 		<module>juneau-microservice-jetty</module>
 		<module>juneau-my-jetty-microservice</module>
-		<module>juneau-microservice-ftest</module>
 		<module>juneau-my-springboot-microservice</module>
 	</modules>
 
diff --git a/juneau-open-javadoc.sh b/juneau-open-javadoc.sh
index 385980bd7..17ee33f58 100755
--- a/juneau-open-javadoc.sh
+++ b/juneau-open-javadoc.sh
@@ -11,7 +11,7 @@
 # * specific language governing permissions and limitations under the License.                                              *
 # ***************************************************************************************************************************
 
-. juneau-env.sh
+. ./juneau-env.sh
 
 open target/site/apidocs/overview-summary.html
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
index 18255c164..567ac09dc 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseContent.java
@@ -1375,4 +1375,13 @@ public class ResponseContent implements HttpEntity {
 	private <T> ClassMeta<T> getClassMeta(Type type, Type...args) {
 		return getBeanContext().getClassMeta(type, args);
 	}
+
+	@Override
+	public String toString() {
+		try {
+			return asString();
+		} catch (RestCallException e) {
+			return e.getLocalizedMessage();
+		}
+	}
 }
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
index be2237818..7691d2772 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
@@ -16,8 +16,8 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 /**
  * An implementation of {@link HttpSession} for mocking purposes.
@@ -32,7 +32,7 @@ import javax.servlet.http.*;
  */
 public class MockHttpSession implements HttpSession {
 
-	private Map<String,Object> attributes = map(), values = map();
+	private Map<String,Object> attributes = map();
 
 	private long creationTime, lastAccessedTime;
 	private int maxInactiveInterval;
@@ -171,52 +171,25 @@ public class MockHttpSession implements HttpSession {
 		return maxInactiveInterval;
 	}
 
-	@SuppressWarnings("deprecation")
-	@Override /* HttpSession */
-	public HttpSessionContext getSessionContext() {
-		return null;
-	}
-
 	@Override /* HttpSession */
 	public Object getAttribute(String name) {
 		return attributes.get(name);
 	}
 
-	@Override /* HttpSession */
-	public Object getValue(String name) {
-		return values.get(name);
-	}
-
 	@Override /* HttpSession */
 	public Enumeration<String> getAttributeNames() {
 		return Collections.enumeration(attributes.keySet());
 	}
 
-	@Override /* HttpSession */
-	public String[] getValueNames() {
-		return values.keySet().toArray(new String[0]);
-	}
-
 	@Override /* HttpSession */
 	public void setAttribute(String name, Object value) {
 		attributes.put(name, value);
 	}
-
-	@Override /* HttpSession */
-	public void putValue(String name, Object value) {
-		values.put(name, value);
-	}
-
 	@Override /* HttpSession */
 	public void removeAttribute(String name) {
 		attributes.remove(name);
 	}
 
-	@Override /* HttpSession */
-	public void removeValue(String name) {
-		values.remove(name);
-	}
-
 	@Override /* HttpSession */
 	public void invalidate() {
 	}
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index c167bd7a6..454dcc81f 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -29,7 +29,7 @@ import java.util.logging.*;
 import java.util.zip.*;
 
 import javax.net.ssl.*;
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.http.auth.*;
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
index f75233c5f..380fe3573 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
@@ -19,8 +19,8 @@ import java.security.*;
 import java.util.*;
 import java.util.function.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.http.client.config.*;
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index 2e81b5f15..e9e5715e4 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -23,8 +23,8 @@ import java.io.*;
 import java.security.*;
 import java.util.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.juneau.common.internal.*;
@@ -629,11 +629,6 @@ public class MockServletRequest implements HttpServletRequest {
 		return requestDispatcher.get(path);
 	}
 
-	@Override /* HttpServletRequest */
-	public String getRealPath(String path) {
-		return path;
-	}
-
 	@Override /* HttpServletRequest */
 	public int getRemotePort() {
 		return remotePort;
@@ -845,11 +840,6 @@ public class MockServletRequest implements HttpServletRequest {
 		return false;
 	}
 
-	@Override /* HttpServletRequest */
-	public boolean isRequestedSessionIdFromUrl() {
-		return false;
-	}
-
 	@Override /* HttpServletRequest */
 	public boolean authenticate(HttpServletResponse response) throws IOException, ServletException {
 		return false;
@@ -1050,4 +1040,19 @@ public class MockServletRequest implements HttpServletRequest {
 
 		return this;
 	}
+
+	@Override
+	public String getRequestId() {
+		return null;
+	}
+
+	@Override
+	public String getProtocolRequestId() {
+		return null;
+	}
+
+	@Override
+	public ServletConnection getServletConnection() {
+		return null;
+	}
 }
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
index e65eb8ddb..e7f57a116 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
@@ -17,8 +17,8 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 import java.io.*;
 import java.util.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.internal.*;
 import org.apache.juneau.rest.util.*;
@@ -168,16 +168,6 @@ public class MockServletResponse implements HttpServletResponse {
 		return null;
 	}
 
-	@Override /* HttpServletResponse */
-	public String encodeUrl(String url) {
-		return null;
-	}
-
-	@Override /* HttpServletResponse */
-	public String encodeRedirectUrl(String url) {
-		return null;
-	}
-
 	@Override /* HttpServletResponse */
 	public void sendError(int sc, String msg) throws IOException {
 		this.sc = sc;
@@ -253,12 +243,6 @@ public class MockServletResponse implements HttpServletResponse {
 		return this;
 	}
 
-	@Override /* HttpServletResponse */
-	public void setStatus(int sc, String sm) {
-		this.sc = sc;
-		this.msg = sm;
-	}
-
 	@Override /* HttpServletResponse */
 	public int getStatus() {
 		return sc;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/OverrideableHttpServletRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/OverrideableHttpServletRequest.java
index 82d2b93a7..5da69c425 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/OverrideableHttpServletRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/OverrideableHttpServletRequest.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest;
 
 import static org.apache.juneau.rest.util.RestUtils.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 /**
  * A wrapper class that allows you to override basic fields.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
index 9faf9320e..2b7ae3ab7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
@@ -16,7 +16,7 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index da7e66eff..3103360c2 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static javax.servlet.http.HttpServletResponse.*;
+import static jakarta.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.collections.JsonMap.*;
 import static org.apache.juneau.common.internal.IOUtils.*;
 import static org.apache.juneau.common.internal.StringUtils.*;
@@ -36,8 +36,8 @@ import java.util.concurrent.atomic.*;
 import java.util.function.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.Header;
 import org.apache.juneau.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 4796f1e85..b62b140e8 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -28,8 +28,8 @@ import java.util.*;
 import java.util.concurrent.*;
 import java.util.function.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index 410a1c34d..5b0ed4add 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -37,8 +37,8 @@ import java.util.*;
 import java.util.logging.*;
 import java.util.stream.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.http.message.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index 26dc1c95c..c4ac12ebb 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -21,8 +21,8 @@ import java.io.*;
 import java.nio.charset.*;
 import java.util.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
index 5cda349f1..2d24b75b6 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 import java.io.*;
 import java.util.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
@@ -284,10 +284,9 @@ public class RestSession extends ContextSession {
 	 * @param value The status code.
 	 * @return This object.
 	 */
-	@SuppressWarnings("deprecation")
 	public RestSession status(StatusLine value) {
 		if (value != null)
-			res.setStatus(value.getStatusCode(), value.getReasonPhrase());
+			res.setStatus(value.getStatusCode());
 		return this;
 	}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroy.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroy.java
index 26469f12e..0a042bcb1 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroy.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestDestroy.java
@@ -17,7 +17,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.rest.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCall.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCall.java
index 53384c82b..0d2e1bbc9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCall.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestEndCall.java
@@ -17,7 +17,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 /**
  * Identifies a method that gets called right before we exit the servlet service method.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInit.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInit.java
index b81172190..2884e7aab 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInit.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestInit.java
@@ -17,7 +17,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.rest.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCall.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCall.java
index 3558f8e6a..8f63ed511 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCall.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostCall.java
@@ -20,8 +20,8 @@ import java.lang.annotation.*;
 import java.util.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInit.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInit.java
index 39bacea46..e93b911d4 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInit.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostInit.java
@@ -17,7 +17,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.rest.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCall.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCall.java
index 81abc36f9..c5dd12e92 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCall.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPreCall.java
@@ -20,8 +20,8 @@ import java.lang.annotation.*;
 import java.util.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.config.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCall.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCall.java
index f64b64e44..242732a63 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCall.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestStartCall.java
@@ -17,7 +17,7 @@ import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.http.response.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/CookieList.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/CookieList.java
index caa721f40..8b4f204ef 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/CookieList.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/CookieList.java
@@ -16,7 +16,7 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 /**
  * A simple list of {@link Cookie} objects.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletRequestArgs.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletRequestArgs.java
index 44e3147ac..3f4d9221e 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletRequestArgs.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletRequestArgs.java
@@ -14,8 +14,8 @@ package org.apache.juneau.rest.arg;
 
 import java.security.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletResponseArgs.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletResponseArgs.java
index 6b2c94cdc..e77a20016 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletResponseArgs.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpServletResponseArgs.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.arg;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpSessionArgs.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpSessionArgs.java
index 539017cfc..04ac36a53 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpSessionArgs.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HttpSessionArgs.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.arg;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestRequestArgs.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestRequestArgs.java
index ebaf0e12d..ddd64aea2 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestRequestArgs.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestRequestArgs.java
@@ -15,8 +15,8 @@ package org.apache.juneau.rest.arg;
 import java.io.*;
 import java.util.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestResponseArgs.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestResponseArgs.java
index 425e75876..1b9dd6ffd 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestResponseArgs.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/RestResponseArgs.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.arg;
 
 import java.io.*;
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
index cb19fb725..a3cdf3fd9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/DebugEnablement.java
@@ -18,7 +18,7 @@ import static org.apache.juneau.internal.ObjectUtils.*;
 import java.lang.reflect.Method;
 import java.util.function.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
index c0b29a606..e62b4bcdb 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.rest.*;
@@ -28,7 +28,7 @@ import org.apache.juneau.svl.*;
  *
  * <p>
  * 	The {@link RequestAttributes} object is the API for accessing the standard servlet attributes on an HTTP request
- * 	(i.e. {@link javax.servlet.ServletRequest#getAttribute(String)}).
+ * 	(i.e. {@link jakarta.servlet.ServletRequest#getAttribute(String)}).
  * </p>
  *
  * <p class='bjava'>
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
index 236979a18..02816a867 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
@@ -20,7 +20,7 @@ import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParam.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParam.java
index 3e2a22fd6..0be92eaed 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParam.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParam.java
@@ -92,7 +92,7 @@ import org.apache.juneau.rest.*;
  */
 public class RequestFormParam extends RequestHttpPart implements NameValuePair {
 
-	private final javax.servlet.http.Part part;
+	private final jakarta.servlet.http.Part part;
 
 	/**
 	 * Constructor.
@@ -100,7 +100,7 @@ public class RequestFormParam extends RequestHttpPart implements NameValuePair {
 	 * @param request The request object.
 	 * @param part The HTTP part.
 	 */
-	public RequestFormParam(RestRequest request, javax.servlet.http.Part part) {
+	public RequestFormParam(RestRequest request, jakarta.servlet.http.Part part) {
 		super(FORMDATA, request, part.getName(), null);
 		this.part = part;
 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
index b17f1299d..b175b88a4 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
@@ -22,7 +22,7 @@ import static org.apache.juneau.internal.CollectionUtils.*;
 import java.util.*;
 import java.util.stream.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
index aaf5cc497..882d2e38b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/BasicTestCallLogger.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.Enablement.*;
 import static org.apache.juneau.common.internal.StringUtils.*;
 import static java.util.logging.Level.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.cp.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
index 3eba21a23..8779c340a 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLogger.java
@@ -25,7 +25,7 @@ import java.util.*;
 import java.util.function.*;
 import java.util.logging.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.common.internal.*;
@@ -685,9 +685,6 @@ public class CallLogger {
 			sb.append("\n=== END ======================================================================");
 		}
 
-		if (rule.isLogStackTrace() && e == null)
-			e = new Throwable("Stacktrace");
-
 		log(level, sb.toString(), e);
 
 	}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
index 3c3300f87..010dc4898 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logger/CallLoggerRule.java
@@ -17,7 +17,7 @@ import static org.apache.juneau.collections.JsonMap.*;
 import java.util.function.*;
 import java.util.logging.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.cp.*;
@@ -332,7 +332,6 @@ public class CallLoggerRule {
 	private final Enablement enabled;
 	private final Predicate<HttpServletRequest> enabledTest;
 	private final CallLoggingDetail requestDetail, responseDetail;
-	private final boolean logStackTrace;
 
 	/**
 	 * Constructor.
@@ -349,7 +348,6 @@ public class CallLoggerRule {
 		this.enabledTest = b.enabledTest;
 		this.requestDetail = b.requestDetail;
 		this.responseDetail = b.responseDetail;
-		this.logStackTrace = b.logStackTrace;
 	}
 
 	/**
@@ -419,15 +417,6 @@ public class CallLoggerRule {
 		return enabledTest;
 	}
 
-	/**
-	 * Returns <jk>true</jk> if a stack trace should be logged.
-	 *
-	 * @return <jk>true</jk> if a stack trace should be logged.
-	 */
-	public boolean isLogStackTrace() {
-		return logStackTrace;
-	}
-
 	@Override /* Object */
 	public String toString() {
 		return filteredMap()
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
index 31f97738a..fc9b91ae0 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/ClientVersionMatcher.java
@@ -15,7 +15,7 @@ package org.apache.juneau.rest.matcher;
 import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.rest.annotation.RestOpAnnotation.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/MultipartFormDataMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/MultipartFormDataMatcher.java
index 466b6824e..2826aa213 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/MultipartFormDataMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/MultipartFormDataMatcher.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.matcher;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 /**
  * Predefined matcher for matching requests with content type <js>"multipart/form-data"</js>.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/RestMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/RestMatcher.java
index 16bbc34aa..6c8db62a6 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/RestMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/RestMatcher.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.matcher;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.rest.annotation.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/UrlEncodedFormMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/UrlEncodedFormMatcher.java
index bf99e4d11..c0285a9c4 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/UrlEncodedFormMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/matcher/UrlEncodedFormMatcher.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.matcher;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 /**
  * Predefined matcher for matching requests with content type <js>"application/x-www-form-urlencoded"</js>.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ResponseProcessor.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ResponseProcessor.java
index f3a5a276e..06ae56b26 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ResponseProcessor.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/ResponseProcessor.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.processor;
 
 import java.io.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/rrpc/RrpcRestOpContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/rrpc/RrpcRestOpContext.java
index b440a0ae7..acc3dce92 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/rrpc/RrpcRestOpContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/rrpc/RrpcRestOpContext.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.rrpc;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.remote.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObject.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObject.java
index 3954540c2..7fad8e159 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObject.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObject.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.servlet;
 
 import java.util.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.dto.swagger.Swagger;
 import org.apache.juneau.rest.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObjectGroup.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObjectGroup.java
index bca213771..c48aefdb9 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObjectGroup.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/BasicRestObjectGroup.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.servlet;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestObject.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestObject.java
index f826219b9..97478fa17 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestObject.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestObject.java
@@ -19,8 +19,8 @@ import java.util.concurrent.atomic.*;
 import java.util.function.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.common.internal.*;
 import org.apache.juneau.http.response.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
index 1e48fc4ce..d56639309 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
@@ -13,7 +13,7 @@
 package org.apache.juneau.rest.servlet;
 
 import static java.util.logging.Level.*;
-import static javax.servlet.http.HttpServletResponse.*;
+import static jakarta.servlet.http.HttpServletResponse.*;
 import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 
@@ -23,8 +23,8 @@ import java.util.concurrent.atomic.*;
 import java.util.function.*;
 import java.util.logging.*;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
index 72d0995af..23bc7f576 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
 import java.util.*;
 import java.util.function.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/BoundedServletInputStream.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/BoundedServletInputStream.java
index 844d337a4..f7de326be 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/BoundedServletInputStream.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/BoundedServletInputStream.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.util;
 
 import java.io.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 /**
  * ServletInputStream wrapper around a normal input stream with support for limiting input.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletRequest.java
index 78187c69e..7d892d588 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletRequest.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletRequest.java
@@ -16,9 +16,9 @@ import static org.apache.juneau.common.internal.IOUtils.*;
 
 import java.io.IOException;
 
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
 
 /**
  * Wraps an {@link HttpServletRequest} and preloads the content into memory for debugging purposes.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletResponse.java
index dc7b97c60..9cb5518ea 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletResponse.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/CachingHttpServletResponse.java
@@ -15,9 +15,9 @@ package org.apache.juneau.rest.util;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
-import javax.servlet.http.*;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.WriteListener;
+import jakarta.servlet.http.*;
 
 /**
  * Wraps an {@link HttpServletResponse} and caches the output stream in a separate buffer for debugging purposes.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/FinishableServletOutputStream.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/FinishableServletOutputStream.java
index f6742228b..346d8151f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/FinishableServletOutputStream.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/FinishableServletOutputStream.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.util;
 
 import java.io.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.encoders.*;
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
index 59b97b927..e04cddb9e 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
@@ -21,7 +21,7 @@ import java.io.*;
 import java.util.*;
 import java.util.regex.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
index a278dcda4..3776a747d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestAttributeVar.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.vars;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.http.response.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-sc/juneau-sc-server/pom.xml b/juneau-sc/juneau-sc-server/pom.xml
index 9d2325f88..859a9b227 100644
--- a/juneau-sc/juneau-sc-server/pom.xml
+++ b/juneau-sc/juneau-sc-server/pom.xml
@@ -60,6 +60,11 @@
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
+		
+		<dependency>
+			<groupId>jakarta.servlet</groupId>
+			<artifactId>jakarta.servlet-api</artifactId>
+		</dependency>
 
 		<!-- Other -->
 		<dependency>
diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
index 95ec64334..2f1833eaa 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
@@ -172,24 +172,24 @@ public class Remote_CommonInterfaces_Test {
 		// HttpClient goes into loop if status code is less than 200 so we can't test those.
 
 		C x = MockRestClient.create(C1.class).json().disableRedirectHandling().build().getRemote(C.class);
-		assertObject(x.ok()).asString().isContains("HTTP/1.1 200 OK");
-		assertObject(x.accepted()).asString().isContains("HTTP/1.1 202 Accepted");
-		assertObject(x.alreadyReported()).asString().isContains("HTTP/1.1 208 Already Reported");
-		assertObject(x.created()).asString().isContains("HTTP/1.1 201 Created");
-		assertObject(x.found()).asString().isContains("HTTP/1.1 302 Found");
-		assertObject(x.iMUsed()).asString().isContains("HTTP/1.1 226 IM Used");
-		assertObject(x.movedPermanently()).asString().isContains("HTTP/1.1 301 Moved Permanently");
-		assertObject(x.multipleChoices()).asString().isContains("HTTP/1.1 300 Multiple Choices");
-		assertObject(x.multiStatus()).asString().isContains("HTTP/1.1 207 Multi-Status");
-		assertObject(x.noContent()).asString().isContains("HTTP/1.1 204 No Content");
-		assertObject(x.nonAuthoritiveInformation()).asString().isContains("HTTP/1.1 203 Non-Authoritative Information");
-		assertObject(x.notModified()).asString().isContains("HTTP/1.1 304 Not Modified");
-		assertObject(x.partialContent()).asString().isContains("HTTP/1.1 206 Partial Content");
-		assertObject(x.permanentRedirect()).asString().isContains("HTTP/1.1 308 Permanent Redirect");
-		assertObject(x.resetContent()).asString().isContains("HTTP/1.1 205 Reset Content");
-		assertObject(x.seeOther()).asString().isContains("HTTP/1.1 303 See Other");
-		assertObject(x.temporaryRedirect()).asString().isContains("HTTP/1.1 307 Temporary Redirect");
-		assertObject(x.useProxy()).asString().isContains("HTTP/1.1 305 Use Proxy");
+		assertObject(x.ok()).asString().isContains("HTTP/1.1 200");
+		assertObject(x.accepted()).asString().isContains("HTTP/1.1 202");
+		assertObject(x.alreadyReported()).asString().isContains("HTTP/1.1 208");
+		assertObject(x.created()).asString().isContains("HTTP/1.1 201");
+		assertObject(x.found()).asString().isContains("HTTP/1.1 302");
+		assertObject(x.iMUsed()).asString().isContains("HTTP/1.1 226");
+		assertObject(x.movedPermanently()).asString().isContains("HTTP/1.1 301");
+		assertObject(x.multipleChoices()).asString().isContains("HTTP/1.1 300");
+		assertObject(x.multiStatus()).asString().isContains("HTTP/1.1 207");
+		assertObject(x.noContent()).asString().isContains("HTTP/1.1 204");
+		assertObject(x.nonAuthoritiveInformation()).asString().isContains("HTTP/1.1 203");
+		assertObject(x.notModified()).asString().isContains("HTTP/1.1 304");
+		assertObject(x.partialContent()).asString().isContains("HTTP/1.1 206");
+		assertObject(x.permanentRedirect()).asString().isContains("HTTP/1.1 308");
+		assertObject(x.resetContent()).asString().isContains("HTTP/1.1 205");
+		assertObject(x.seeOther()).asString().isContains("HTTP/1.1 303");
+		assertObject(x.temporaryRedirect()).asString().isContains("HTTP/1.1 307");
+		assertObject(x.useProxy()).asString().isContains("HTTP/1.1 305");
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
index 3e17d1bf0..411230f6b 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
@@ -19,7 +19,7 @@ import static org.junit.runners.MethodSorters.*;
 import java.io.*;
 import java.util.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.config.*;
 import org.apache.juneau.cp.Messages;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/Rest_PredefinedStatusCodes_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/Rest_PredefinedStatusCodes_Test.java
index fea2de5cf..e44549768 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/Rest_PredefinedStatusCodes_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/Rest_PredefinedStatusCodes_Test.java
@@ -18,7 +18,7 @@ import static org.apache.juneau.testutils.StreamUtils.*;
 
 import java.io.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.http.annotation.Content;
 import org.apache.juneau.http.annotation.Header;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestInit_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestInit_Test.java
index 3a4454416..0f79f362d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestInit_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestInit_Test.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.junit.runners.MethodSorters.*;
 
-import javax.servlet.*;
+import jakarta.servlet.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.rest.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_Matchers_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_Matchers_Test.java
index 698710151..0cb26b4ec 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_Matchers_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestOp_Matchers_Test.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.junit.runners.MethodSorters.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.common.internal.*;
 import org.apache.juneau.rest.client.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostCall_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostCall_Test.java
index b43154e83..88439a75c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostCall_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPostCall_Test.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.junit.runners.MethodSorters.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.rest.RestRequest;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPreCall_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPreCall_Test.java
index c3a16c996..d85305656 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPreCall_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestPreCall_Test.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.junit.runners.MethodSorters.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestStartCall_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestStartCall_Test.java
index 0c22415f1..ddd8794cd 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestStartCall_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/RestStartCall_Test.java
@@ -14,7 +14,7 @@ package org.apache.juneau.rest.annotation;
 
 import static org.junit.runners.MethodSorters.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.collections.*;
 import org.apache.juneau.rest.RestRequest;
diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java b/juneau-utest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
index 09a0e5b98..3ff4416c9 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/test/client/ThirdPartyProxyResource.java
@@ -20,7 +20,7 @@ import static org.junit.Assert.*;
 import java.io.*;
 import java.util.*;
 
-import javax.servlet.http.*;
+import jakarta.servlet.http.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.http.annotation.*;
diff --git a/pom.xml b/pom.xml
index 762d797d7..43cd1736e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,17 +38,17 @@
 		<jaxb.version>2.3.1</jaxb.version>
 		<junit.version>4.13.2</junit.version>
 		<jaxrs.version>1.1.1</jaxrs.version>
-		<servlet.version>4.0.4</servlet.version>
+		<servlet.version>6.0.0</servlet.version>
 		<httpcore.version>4.4.15</httpcore.version>
 		<httpclient.version>4.5.13</httpclient.version>
-		<jetty.version>10.0.12</jetty.version>
+		<jetty.version>11.0.12</jetty.version>
 		<juneau.compare.version>8.0.0</juneau.compare.version>
 		<javadoc.juneau.version>9.0.0</javadoc.juneau.version>
 		<juneauVersion>9.0.0</juneauVersion>
 		<juneauVersionNext>9.0.1</juneauVersionNext>
 		<derby.version>10.16.1.1</derby.version>
 		<hibernate.version>5.6.14.Final</hibernate.version>
-		<springboot.version>2.7.5</springboot.version>
+		<springboot.version>3.0.0</springboot.version>
 		<xml.apis.version>2.0.2</xml.apis.version>
 		<javadoc.executable />
 		<javadoc.plugin.version>3.4.1</javadoc.plugin.version>