diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2f25a3f12..0e2a9a3b7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,6 +7,6 @@ on:
jobs:
ci:
- uses: killbill/gh-actions-shared/.github/workflows/ci.yml@main
+ uses: killbill/gh-actions-shared/.github/workflows/ci.yml@java21
with:
test-profile-matrix: '[ "travis", "mysql", "postgresql", "jdbi", "config-magic" ]'
diff --git a/.github/workflows/cloudsmith_release.yml b/.github/workflows/cloudsmith_release.yml
index 143cfc814..da426bba3 100644
--- a/.github/workflows/cloudsmith_release.yml
+++ b/.github/workflows/cloudsmith_release.yml
@@ -5,7 +5,7 @@ on:
jobs:
cloudsmith_release:
- uses: killbill/gh-actions-shared/.github/workflows/cloudsmith_release.yml@main
+ uses: killbill/gh-actions-shared/.github/workflows/cloudsmith_release.yml@java21
with:
group_id: org.kill-bill.commons
secrets:
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index c1506847d..b8add174f 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -7,4 +7,4 @@ on:
jobs:
analyze:
- uses: killbill/gh-actions-shared/.github/workflows/codeql-analysis.yml@main
+ uses: killbill/gh-actions-shared/.github/workflows/codeql-analysis.yml@java21
diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml
index ad45d253f..cd51d668f 100644
--- a/.github/workflows/snapshot.yml
+++ b/.github/workflows/snapshot.yml
@@ -6,7 +6,7 @@ on:
jobs:
snapshot:
- uses: killbill/gh-actions-shared/.github/workflows/snapshot.yml@main
+ uses: killbill/gh-actions-shared/.github/workflows/snapshot.yml@java21
secrets:
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml
index 724801aed..f044f851e 100644
--- a/.github/workflows/sync.yml
+++ b/.github/workflows/sync.yml
@@ -7,6 +7,6 @@ on:
jobs:
sync:
- uses: killbill/gh-actions-shared/.github/workflows/sync.yml@main
+ uses: killbill/gh-actions-shared/.github/workflows/sync.yml@java21
secrets:
CREATE_PULL_REQUEST_SSH_KEY: ${{ secrets.CREATE_PULL_REQUEST_SSH_KEY }}
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultLinkStateMachine.java b/automaton/src/main/java/org/killbill/automaton/DefaultLinkStateMachine.java
index 71dcf6d74..200e4a3ad 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultLinkStateMachine.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultLinkStateMachine.java
@@ -24,10 +24,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlIDREF;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultOperation.java b/automaton/src/main/java/org/killbill/automaton/DefaultOperation.java
index 6a75583a6..2a27b4aa0 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultOperation.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultOperation.java
@@ -24,10 +24,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlID;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlID;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultState.java b/automaton/src/main/java/org/killbill/automaton/DefaultState.java
index bcdcff568..73d45052b 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultState.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultState.java
@@ -24,10 +24,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlID;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlID;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultStateMachine.java b/automaton/src/main/java/org/killbill/automaton/DefaultStateMachine.java
index ad49451bb..dfc505e79 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultStateMachine.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultStateMachine.java
@@ -27,12 +27,12 @@
import java.util.NoSuchElementException;
import java.util.stream.Stream;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlID;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlID;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultStateMachineConfig.java b/automaton/src/main/java/org/killbill/automaton/DefaultStateMachineConfig.java
index f09ac7567..fea9242f5 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultStateMachineConfig.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultStateMachineConfig.java
@@ -27,11 +27,11 @@
import java.util.NoSuchElementException;
import java.util.stream.Stream;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlElementWrapper;
+import jakarta.xml.bind.annotation.XmlRootElement;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/DefaultTransition.java b/automaton/src/main/java/org/killbill/automaton/DefaultTransition.java
index 4bc76a90d..071da64c9 100644
--- a/automaton/src/main/java/org/killbill/automaton/DefaultTransition.java
+++ b/automaton/src/main/java/org/killbill/automaton/DefaultTransition.java
@@ -24,10 +24,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlIDREF;
import org.killbill.xmlloader.ValidationErrors;
diff --git a/automaton/src/main/java/org/killbill/automaton/StateMachineValidatingConfig.java b/automaton/src/main/java/org/killbill/automaton/StateMachineValidatingConfig.java
index 84473e512..f97195933 100644
--- a/automaton/src/main/java/org/killbill/automaton/StateMachineValidatingConfig.java
+++ b/automaton/src/main/java/org/killbill/automaton/StateMachineValidatingConfig.java
@@ -21,8 +21,8 @@
import org.killbill.xmlloader.ValidatingConfig;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.NONE)
public abstract class StateMachineValidatingConfig extends ValidatingConfig {
diff --git a/concurrent/src/test/java/org/killbill/commons/concurrent/TestExecutors.java b/concurrent/src/test/java/org/killbill/commons/concurrent/TestExecutors.java
index c67d5383e..e56a087c9 100644
--- a/concurrent/src/test/java/org/killbill/commons/concurrent/TestExecutors.java
+++ b/concurrent/src/test/java/org/killbill/commons/concurrent/TestExecutors.java
@@ -39,6 +39,10 @@
@Test(singleThreaded = true)
public class TestExecutors {
+ // JDK 21 changed Thread.toString() to include the numeric thread id and extra metadata.
+ // These tests only care that the executor thread name is present, not the JVM-specific prefix.
+ private static final String TEST_EXECUTOR_THREAD_PATTERN = "Thread\\[[^\\]]*TestLoggingExecutor-[^\\]]+\\]";
+
private void registerAppenders(final Logger loggingLogger, final Logger failsafeLogger, final WriterAppender dummyAppender) {
dummyAppender.setImmediateFlush(true);
loggingLogger.setLevel(Level.DEBUG);
@@ -103,8 +107,10 @@ public void run() {
final String actual = bos.toString();
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.RuntimeException: Fail!\r?\n"));
- assertPattern(actual, Pattern.compile("DEBUG - Thread\\[TestLoggingExecutor-[^\\]]+\\] finished executing$"));
+ // Match the log severity/message/exception content while tolerating both pre-JDK-21 and
+ // JDK-21+ thread string formats.
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.RuntimeException: Fail!"));
+ assertPattern(actual, finishedExecutingPattern());
}
private void errorTest(final ExecutorService executorService) throws Exception {
@@ -124,8 +130,10 @@ public void run() {
final String actual = bos.toString();
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.OutOfMemoryError: Poof!\r?\n"));
- assertPattern(actual, Pattern.compile("DEBUG - Thread\\[TestLoggingExecutor-[^\\]]+\\] finished executing$"));
+ // Keep this assertion focused on the wrapped error logging rather than the exact
+ // Thread.toString() rendering chosen by the current JDK.
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.OutOfMemoryError: Poof!"));
+ assertPattern(actual, finishedExecutingPattern());
}
private void callableTest(final ExecutorService executorService) throws Exception {
@@ -168,9 +176,11 @@ public Void call() throws Exception {
final String actual = bos.toString();
- assertPattern(actual, Pattern.compile("DEBUG - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended with an exception\r?\njava.lang.Exception: Oops!\r?\n"));
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended with an exception\r?\njava.lang.OutOfMemoryError: Uh oh!\r?\n"));
- assertPattern(actual, Pattern.compile("DEBUG - Thread\\[TestLoggingExecutor-[^\\]]+\\] finished executing$"));
+ // Callable logging uses DEBUG for checked exceptions and ERROR for Errors; the helper keeps
+ // that semantic assertion stable across JDK thread formatting changes.
+ assertPattern(actual, exceptionLogPattern("DEBUG", "ended with an exception", "java.lang.Exception: Oops!"));
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended with an exception", "java.lang.OutOfMemoryError: Uh oh!"));
+ assertPattern(actual, finishedExecutingPattern());
}
private void scheduledTest(final ScheduledExecutorService executorService) throws Exception {
@@ -239,12 +249,26 @@ public void run() {
final String actual = bos.toString();
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.RuntimeException: D'oh!\r?\n"));
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.OutOfMemoryError: Zoinks!\r?\n"));
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.RuntimeException: Eep!\r?\n"));
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.OutOfMemoryError: Zounds!\r?\n"));
- assertPattern(actual, Pattern.compile("ERROR - Thread\\[TestLoggingExecutor-[^\\]]+\\] ended abnormally with an exception\r?\njava.lang.RuntimeException: Egad!\r?\n"));
- assertPattern(actual, Pattern.compile("DEBUG - Thread\\[TestLoggingExecutor-[^\\]]+\\] finished executing$"));
+ // Scheduled executors emit several wrapped failures; use the shared helper so each
+ // assertion still verifies the exact throwable/message without depending on thread ids.
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.RuntimeException: D'oh!"));
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.OutOfMemoryError: Zoinks!"));
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.RuntimeException: Eep!"));
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.OutOfMemoryError: Zounds!"));
+ assertPattern(actual, exceptionLogPattern("ERROR", "ended abnormally with an exception", "java.lang.RuntimeException: Egad!"));
+ assertPattern(actual, finishedExecutingPattern());
+ }
+
+ // Build the regex from the stable log semantics and allow either legacy or JDK 21+ thread
+ // renderings; \R keeps the assertion platform-neutral for line endings too.
+ private Pattern exceptionLogPattern(final String level, final String message, final String throwable) {
+ return Pattern.compile(Pattern.quote(level + " - ") + TEST_EXECUTOR_THREAD_PATTERN + Pattern.quote(" " + message) + "\\R" + Pattern.quote(throwable) + "\\R");
+ }
+
+ // Same rationale as exceptionLogPattern: verify the message, but ignore JVM-specific thread
+ // formatting details that changed in Java 21.
+ private Pattern finishedExecutingPattern() {
+ return Pattern.compile(Pattern.quote("DEBUG - ") + TEST_EXECUTOR_THREAD_PATTERN + Pattern.quote(" finished executing") + "$");
}
private void assertPattern(final String actual, final Pattern expected) {
diff --git a/config-magic/pom.xml b/config-magic/pom.xml
index 1036a4bec..3bd9084a7 100644
--- a/config-magic/pom.xml
+++ b/config-magic/pom.xml
@@ -66,7 +66,7 @@
maven-surefire-plugin
-
+
diff --git a/config-magic/src/main/java/org/skife/config/DataAmount.java b/config-magic/src/main/java/org/skife/config/DataAmount.java
index 3c74039b8..81ba105c8 100644
--- a/config-magic/src/main/java/org/skife/config/DataAmount.java
+++ b/config-magic/src/main/java/org/skife/config/DataAmount.java
@@ -20,7 +20,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-public class DataAmount {
+public final class DataAmount {
private static final Pattern SPLIT = Pattern.compile("^(\\d+)\\s*([a-zA-Z]+)$");
private static final Pattern NUM_ONLY = Pattern.compile("^(\\d+)$");
diff --git a/config-magic/src/main/java/org/skife/config/TimeSpan.java b/config-magic/src/main/java/org/skife/config/TimeSpan.java
index f8b84ccf8..85d94089d 100644
--- a/config-magic/src/main/java/org/skife/config/TimeSpan.java
+++ b/config-magic/src/main/java/org/skife/config/TimeSpan.java
@@ -22,7 +22,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-public class TimeSpan {
+public final class TimeSpan {
private static final Pattern SPLIT = Pattern.compile("^(\\d+)\\s?(\\w+)$");
private static final HashMap UNITS = new HashMap();
diff --git a/jdbi/pom.xml b/jdbi/pom.xml
index 76da80116..7baec0e6a 100644
--- a/jdbi/pom.xml
+++ b/jdbi/pom.xml
@@ -59,8 +59,8 @@
- javax.inject
- javax.inject
+ jakarta.inject
+ jakarta.inject-api
joda-time
diff --git a/jdbi/spotbugs-exclude.xml b/jdbi/spotbugs-exclude.xml
index d76a97a3b..f62da9841 100644
--- a/jdbi/spotbugs-exclude.xml
+++ b/jdbi/spotbugs-exclude.xml
@@ -134,4 +134,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DBIProvider.java b/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DBIProvider.java
index 19bcd5799..bfa9bc80b 100644
--- a/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DBIProvider.java
+++ b/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DBIProvider.java
@@ -23,8 +23,8 @@
import java.util.Set;
import javax.annotation.Nullable;
-import javax.inject.Inject;
-import javax.inject.Provider;
+import jakarta.inject.Inject;
+import jakarta.inject.Provider;
import javax.sql.DataSource;
import org.killbill.commons.jdbi.argument.DateTimeArgumentFactory;
diff --git a/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DataSourceProvider.java b/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DataSourceProvider.java
index d14313546..a79114596 100644
--- a/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DataSourceProvider.java
+++ b/jdbi/src/main/java/org/killbill/commons/jdbi/guice/DataSourceProvider.java
@@ -25,8 +25,8 @@
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
-import javax.inject.Inject;
-import javax.inject.Provider;
+import jakarta.inject.Inject;
+import jakarta.inject.Provider;
import javax.sql.DataSource;
import org.killbill.commons.embeddeddb.EmbeddedDB;
diff --git a/jooby/CHANGES.md b/jooby/CHANGES.md
index e98b9b99b..dd2f237af 100644
--- a/jooby/CHANGES.md
+++ b/jooby/CHANGES.md
@@ -30,6 +30,34 @@ The following files were modified from upstream to adapt to Jetty 10 API changes
| `RoutePattern.java` | Simplified the glob-route regex to remove nested ambiguous quantifiers | Fixes CodeQL ReDoS warning without changing route-matching semantics |
| `PemReader.java` | Simplified PEM block regex whitespace handling from redundant alternation to `\\s+` | Fixes CodeQL ReDoS warning while keeping the same accepted PEM formats |
+### Kill Bill fork maintenance — Jetty 11 / Jakarta servlet migration
+
+The following files were modified from the Kill Bill Jetty 10 baseline to migrate the fork to
+Jetty 11 / Servlet 5 (`jakarta.servlet` namespace):
+
+| File | Change | Reason |
+|---|---|---|
+| `pom.xml` | Switched the maintained fork to Jetty `11.0.24` and `jakarta.servlet-api` `5.0.0`; updated `jetty-server` / `jakarta.servlet-api`; excluded `org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api` from `jetty-server` | Jetty 11 is the latest `11.0.x` patch line compatible with the repository's managed `slf4j-api:2.0.9`; the exclusion avoids duplicate Servlet 5 classes on the test classpath |
+| `src/main/java/org/jooby/internal/jetty/JettyHandler.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Jetty 11 uses Servlet 5 / Jakarta namespace only |
+| `src/main/java/org/jooby/internal/jetty/JettyResponse.java` | Replaced `javax.servlet.http.*` imports with `jakarta.servlet.http.*` | Jetty 11 uses Servlet 5 / Jakarta namespace only |
+| `src/main/java/org/jooby/internal/jetty/JettySse.java` | Replaced `javax.servlet.http.HttpServletResponse` with `jakarta.servlet.http.HttpServletResponse` | Jetty 11 uses Servlet 5 / Jakarta namespace only |
+| `src/main/java/org/jooby/servlet/ServerInitializer.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Servlet adapter now compiles against Servlet 5 |
+| `src/main/java/org/jooby/servlet/ServletHandler.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Servlet adapter now compiles against Servlet 5 |
+| `src/main/java/org/jooby/servlet/ServletServletRequest.java` | Replaced `javax.servlet.*` imports/usages, including fully-qualified `Cookie` reference | Servlet adapter now compiles against Servlet 5 |
+| `src/main/java/org/jooby/servlet/ServletServletResponse.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Servlet adapter now compiles against Servlet 5 |
+| `src/main/java/org/jooby/servlet/ServletUpload.java` | Replaced `javax.servlet.http.Part` with `jakarta.servlet.http.Part` | Servlet adapter now compiles against Servlet 5 |
+| `src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align Jetty adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/internal/jetty/JettyResponseTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align Jetty adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/internal/jetty/JettySseTest.java` | Replaced `javax.servlet.AsyncContext` with `jakarta.servlet.AsyncContext` | Align Jetty adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/servlet/ServerInitializerTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align servlet adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/servlet/ServletHandlerTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align servlet adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/servlet/ServletServletRequestTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align servlet adapter tests with Servlet 5 |
+| `src/test/java/org/jooby/servlet/ServletServletResponseTest.java` | Replaced `javax.servlet.*` imports with `jakarta.servlet.*` | Align servlet adapter tests with Servlet 5 |
+
+Jooby API signatures and lifecycle hooks now import `jakarta.annotation.*` directly. The old
+package-level `@ParametersAreNonnullByDefault` marker was removed because the Jakarta annotation
+API does not provide an equivalent package-default annotation.
+
## POM / Dependency Changes
The `jooby/pom.xml` is written from scratch (not a copy of any upstream POM). It merges
@@ -40,26 +68,26 @@ Differences from upstream dependency versions:
| Dependency | Upstream | Kill Bill Fork | Reason |
|---|---|---|---|
-| `com.google.inject:guice` | 4.2.0 | 5.1.0 (managed by killbill-oss-parent) | Kill Bill standardized version |
+| `com.google.inject:guice` | 4.2.0 | 7.0.0 (managed in root pom) | Current Kill Bill Jakarta baseline |
| `com.google.inject.extensions:guice-multibindings` | 4.2.0 | **removed** | `Multibinder` merged into core Guice since 4.2 |
| `org.jooby:funzy` | 0.1.0 (external dep) | **removed** (source inlined) | 3 classes copied into `org.jooby.funzy` package |
-| `org.eclipse.jetty:jetty-server` | 9.4.24.v20191120 | 10.0.16 (managed) | Kill Bill standardized version |
-| `org.eclipse.jetty.http2:http2-server` | 9.4.24.v20191120 | 10.0.16 | Aligned with jetty-server |
+| `org.eclipse.jetty:jetty-server` | 9.4.24.v20191120 | 11.0.24 | Jetty 11 is the newest `11.0.x` line compatible with the repository-managed `slf4j-api:2.0.9`; local exclusion avoids duplicate Servlet API classes |
+| `org.eclipse.jetty.http2:http2-server` | 9.4.24.v20191120 | 11.0.24 | Aligned with jetty-server |
| `org.eclipse.jetty.websocket:websocket-server` | 9.4.24.v20191120 | **removed** | WebSocket factory code removed from Jetty adapter; `websocket-jetty-api` added separately |
| `org.eclipse.jetty:jetty-alpn-openjdk8-server` | 9.4.24.v20191120 | **removed** | Not available in Jetty 10; ALPN is built-in |
-| `javax.servlet:javax.servlet-api` | 3.1.0 | `jakarta.servlet:jakarta.servlet-api` 4.0.4 | Kill Bill transitional artifact (still ships `javax.servlet` packages) |
+| `javax.servlet:javax.servlet-api` | 3.1.0 | `jakarta.servlet:jakarta.servlet-api` 5.0.0 | True Jakarta Servlet 5 API for Jetty 11 / `jakarta.servlet.*` sources |
| `org.ow2.asm:asm` | 7.3.1 | 9.7 | Updated for JDK 11+ compatibility |
| `com.google.guava:guava` | 25.1-jre | 31.1-jre (managed) | Kill Bill standardized version |
| `com.typesafe:config` | 1.3.3 | 1.4.2 (managed) | Kill Bill standardized version |
| `org.slf4j:slf4j-api` | 1.7.x | 2.0.9 (managed) | Kill Bill standardized version |
| `org.powermock:powermock-*` | 2.0.0 | **removed** | Not managed by killbill-oss-parent; obsolete for modern JDKs |
-| `jakarta.annotation:jakarta.annotation-api` | not present | 1.3.5 (managed) | Added for `@PostConstruct`/`@PreDestroy` in `LifeCycle.java` |
+| `jakarta.annotation:jakarta.annotation-api` | not present | 2.1.1 (managed) | Used directly for `@PostConstruct`/`@PreDestroy` and nullability annotations after removing Jooby's direct `javax.annotation` usage |
| `com.github.spotbugs:spotbugs-annotations` | not present | **not included** | Not needed; no forked source uses `@SuppressFBWarnings`, and SpotBugs triage uses the exclusion filter instead |
-| `org.eclipse.jetty:jetty-alpn-server` | not present | 10.0.16 | Required by `JettyServer.java` for ALPN/HTTP2 support |
-| `org.eclipse.jetty.websocket:websocket-jetty-api` | not present (was part of websocket-server) | 10.0.16 | Jetty 10 split WebSocket API into separate artifact |
-| `org.eclipse.jetty:jetty-io` | transitive | 10.0.16 (explicit) | Used directly in source; declared explicitly to satisfy dependency:analyze |
-| `org.eclipse.jetty:jetty-util` | transitive | 10.0.16 (explicit) | Used directly in source; declared explicitly to satisfy dependency:analyze |
-| `javax.inject:javax.inject` | transitive via Guice | managed (explicit) | Used directly in source; declared explicitly to satisfy dependency:analyze |
+| `org.eclipse.jetty:jetty-alpn-server` | not present | 11.0.24 | Required by `JettyServer.java` for ALPN/HTTP2 support |
+| `org.eclipse.jetty.websocket:websocket-jetty-api` | not present (was part of websocket-server) | 11.0.24 | Jetty 10/11 split WebSocket API into separate artifact |
+| `org.eclipse.jetty:jetty-io` | transitive | 11.0.24 (explicit) | Used directly in source; declared explicitly to satisfy dependency:analyze |
+| `org.eclipse.jetty:jetty-util` | transitive | 11.0.24 (explicit) | Used directly in source; declared explicitly to satisfy dependency:analyze |
+| `jakarta.inject:jakarta.inject-api` | transitive via Guice | 2.0.1 (managed in root pom, explicit in fork) | Used directly for injection annotations; provider-facing Guice bindings still use `com.google.inject.Provider` where required |
| `junit:junit` | optional (compile) | compile + optional | Parent forces test scope; explicit compile needed for `JoobyRule` |
| `org.mockito:mockito-core` | not present | 5.3.1 (managed, test) | Sole active mocking framework for the migrated test tree |
| `org.easymock:easymock` | present (test) | **removed** | Replaced by mockito-core in the active test tree |
@@ -131,7 +159,7 @@ Notable rewrites and follow-up restorations:
| `FileConfTest.java` | Rewritten as a real filesystem test | Replaces EasyMock + PowerMock constructor/static mocking |
| `LogbackConfTest.java` | Rewritten as a real filesystem/config-driven test | Replaces MockUnit-based lookup stubbing |
| `RequestScopeTest.java` | Rewritten as a direct behavior test | Exercises circular-proxy handling without a compile-time Guice internal type dependency |
-| `JettyHandlerTest.java` | Rewritten around current Jetty 10 adapter behavior | Upstream websocket-era expectations no longer matched the fork |
+| `JettyHandlerTest.java` | Rewritten around current Jetty adapter behavior | Upstream websocket-era expectations no longer matched the maintained fork |
| `JettyServerTest.java` | Rewritten around real `Server`, `ServerConnector`, and `ContextHandler` objects | Replaces removed Jetty 9 websocket factory assumptions |
| `SseFeature.java` | Rewritten to use JDK 11 `HttpClient` | Replaces removed Ning AsyncHttpClient dependency |
diff --git a/jooby/README.md b/jooby/README.md
index 2f3605af9..02cdea3d4 100644
--- a/jooby/README.md
+++ b/jooby/README.md
@@ -17,6 +17,15 @@ The following upstream modules are merged into this single artifact:
Not forked:
- `org.jooby:jooby-netty` — Kill Bill uses Jetty; SSE/WebSocket are handled via the core SPI layer (`org.jooby.spi.*`).
+## Current Maintained Baseline
+
+- The fork remains based on upstream **Jooby 1.6.9** and is maintained in place.
+- The current web/runtime baseline is **Guice 7.0.0**, **Jetty 11.0.24**, and
+ **`jakarta.servlet-api` 5.0.0**.
+- Jooby tests run in the standard Maven lifecycle; the old `-Pjooby` gate is gone.
+- Active Jooby test baseline: **124** Java files in `src/test/java`, **108** runnable test
+ classes, **923** tests.
+
## Building & Testing
`killbill-jooby` keeps the upstream **JUnit 4** test stack. It does **not** use the
@@ -37,3 +46,5 @@ Changes with upstream:
```
git diff -w 85a50d5e894d14068b2e90a0601481cf52a0abec...HEAD jooby/src/main/java/org/jooby
```
+
+For a detailed audit of the maintained-fork deltas, see `jooby/CHANGES.md`.
diff --git a/jooby/phase-2-plans.md b/jooby/phase-2-plans.md
deleted file mode 100644
index 28292598c..000000000
--- a/jooby/phase-2-plans.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Phase 2 Plans
-
-This document records the current Jooby fork baseline that Phase 2 work should preserve while
-upgrading the repository foundation.
-
-## Current Baseline
-
-- Root build baseline validated on Temurin **JDK 17.0.18** with **Maven 3.8.5**
-- Root build command used for baseline:
- - `mvn -q clean install -DskipTests`
-- Jooby module test baseline:
- - `mvn clean test`
-- Active Jooby test tree:
- - `124` Java files in `src/test/java`
- - `108` runnable test classes
- - `923` tests
- - `src/test/java-excluded/` is empty
-
-## Current Dependency Baseline Relevant to Phase 2
-
-| Area | Current state |
-|---|---|
-| JDK target | Repository baseline is now JDK 17 via root `project.build.targetJdk` override |
-| Guice | `com.google.inject:guice` is now pinned to `6.0.0` via root dependency management override |
-| Guice servlet bridge | `com.google.inject.extensions:guice-servlet` is now pinned to `6.0.0` via root dependency management override |
-| Inject namespace | Source still uses `javax.inject`; `javax.inject:javax.inject` is explicitly declared in the Jooby fork |
-| Servlet namespace | `jakarta.servlet:jakarta.servlet-api:4.0.4` is used as a transitional artifact and still exposes `javax.servlet` packages |
-| Jetty | Jetty already sits on `10.0.16` in the fork |
-
-## Phase 2 Sequence
-
-Phase 2 foundation work is complete. The next step is Phase 3 Jakarta namespace migration.
-
-## Notes
-
-- `jooby/CHANGES.md` now focuses on durable source, dependency, and test-tree changes rather than
- phased execution history.
-- The Jooby module is a useful canary for Phase 2 because it already exercises Guice, servlet, Jetty,
- and a large migrated Mockito-based test tree.
-- The old `-Pjooby` test gate was removed after the active test tree was fully restored.
-- JDK 17 does not need to be the machine default, but Phase 2 validation must run Maven in a shell
- that has JDK 17 selected explicitly when multiple JDKs are installed.
-- Root `surefireArgLine` now overrides the parent's JDK 17 profile so test JVMs no longer use
- `--illegal-access=permit` or the invalid `--add-opens java.base/java.base=ALL-UNNAMED` flag.
-- Full reactor tests, plus focused `jooby`, `skeleton`, `metrics`, and `queue` test runs, passed
- with JDK 17 + Guice 6.0.0.
diff --git a/jooby/pom.xml b/jooby/pom.xml
index a78aa0c14..16a6385d4 100644
--- a/jooby/pom.xml
+++ b/jooby/pom.xml
@@ -47,11 +47,7 @@
org.slf4j
slf4j-api
-
- com.google.code.findbugs
- jsr305
-
-
+
jakarta.annotation
jakarta.annotation-api
@@ -63,50 +59,53 @@
9.7
true
-
+
jakarta.servlet
jakarta.servlet-api
-
+
org.eclipse.jetty
jetty-server
+
+
+
+ org.eclipse.jetty.toolchain
+ jetty-jakarta-servlet-api
+
+
org.eclipse.jetty.http2
http2-server
- ${jetty.version}
org.eclipse.jetty
jetty-alpn-server
- ${jetty.version}
org.eclipse.jetty.websocket
websocket-jetty-api
- ${jetty.version}
org.eclipse.jetty
jetty-io
- ${jetty.version}
org.eclipse.jetty
jetty-util
- ${jetty.version}
-
+
- javax.inject
- javax.inject
+ jakarta.inject
+ jakarta.inject-api
diff --git a/jooby/spotbugs-exclude.xml b/jooby/spotbugs-exclude.xml
index 400960d8b..c0d397977 100644
--- a/jooby/spotbugs-exclude.xml
+++ b/jooby/spotbugs-exclude.xml
@@ -119,4 +119,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jooby/src/main/java/org/jooby/Asset.java b/jooby/src/main/java/org/jooby/Asset.java
index a23447e27..8f8465b69 100644
--- a/jooby/src/main/java/org/jooby/Asset.java
+++ b/jooby/src/main/java/org/jooby/Asset.java
@@ -25,7 +25,7 @@
import com.google.common.primitives.Longs;
import org.jooby.funzy.Throwing;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
* Usually a public file/resource like javascript, css, images files, etc...
diff --git a/jooby/src/main/java/org/jooby/Cookie.java b/jooby/src/main/java/org/jooby/Cookie.java
index d29179d28..36cfa0c75 100644
--- a/jooby/src/main/java/org/jooby/Cookie.java
+++ b/jooby/src/main/java/org/jooby/Cookie.java
@@ -22,8 +22,8 @@
import org.jooby.funzy.Throwing;
import org.jooby.internal.CookieImpl;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLDecoder;
diff --git a/jooby/src/main/java/org/jooby/Deferred.java b/jooby/src/main/java/org/jooby/Deferred.java
index 0a505881d..d80819cc4 100644
--- a/jooby/src/main/java/org/jooby/Deferred.java
+++ b/jooby/src/main/java/org/jooby/Deferred.java
@@ -17,8 +17,8 @@
import static java.util.Objects.requireNonNull;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Optional;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
diff --git a/jooby/src/main/java/org/jooby/Env.java b/jooby/src/main/java/org/jooby/Env.java
index 502029d7e..432f3d70e 100644
--- a/jooby/src/main/java/org/jooby/Env.java
+++ b/jooby/src/main/java/org/jooby/Env.java
@@ -23,8 +23,8 @@
import static java.util.Objects.requireNonNull;
import org.jooby.funzy.Throwing;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
diff --git a/jooby/src/main/java/org/jooby/Err.java b/jooby/src/main/java/org/jooby/Err.java
index ab25c6e60..9640bb0e9 100644
--- a/jooby/src/main/java/org/jooby/Err.java
+++ b/jooby/src/main/java/org/jooby/Err.java
@@ -27,7 +27,7 @@
import com.google.common.base.Throwables;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
/**
* An exception that carry a {@link Status}. The status field will be set in the HTTP
diff --git a/jooby/src/main/java/org/jooby/Jooby.java b/jooby/src/main/java/org/jooby/Jooby.java
index 0abfb177d..aeb0ad1e9 100644
--- a/jooby/src/main/java/org/jooby/Jooby.java
+++ b/jooby/src/main/java/org/jooby/Jooby.java
@@ -99,9 +99,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.inject.Singleton;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import jakarta.inject.Singleton;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.lang.reflect.Type;
@@ -3250,7 +3250,7 @@ private static void install(final Logger log, final Jooby.Module module, final E
/**
* Bind a {@link Config} and make it available for injection. Each property of the config is also
- * binded it and ready to be injected with {@link javax.inject.Named}.
+ * binded it and ready to be injected with {@link jakarta.inject.Named}.
*
* @param binder Guice binder.
* @param config App config.
diff --git a/jooby/src/main/java/org/jooby/LifeCycle.java b/jooby/src/main/java/org/jooby/LifeCycle.java
index 103257cbe..861d6c356 100644
--- a/jooby/src/main/java/org/jooby/LifeCycle.java
+++ b/jooby/src/main/java/org/jooby/LifeCycle.java
@@ -19,9 +19,9 @@
import org.jooby.funzy.Throwing;
import org.jooby.funzy.Try;
-import javax.annotation.Nonnull;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/jooby/src/main/java/org/jooby/Mutant.java b/jooby/src/main/java/org/jooby/Mutant.java
index c51b6d704..b6925c876 100644
--- a/jooby/src/main/java/org/jooby/Mutant.java
+++ b/jooby/src/main/java/org/jooby/Mutant.java
@@ -25,7 +25,7 @@
import com.google.inject.TypeLiteral;
import com.google.inject.util.Types;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
*
diff --git a/jooby/src/main/java/org/jooby/Registry.java b/jooby/src/main/java/org/jooby/Registry.java
index add1982ea..78b0a1669 100644
--- a/jooby/src/main/java/org/jooby/Registry.java
+++ b/jooby/src/main/java/org/jooby/Registry.java
@@ -19,7 +19,7 @@
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
/**
*
service registry
diff --git a/jooby/src/main/java/org/jooby/Request.java b/jooby/src/main/java/org/jooby/Request.java
index e1d2e94a0..470a60001 100644
--- a/jooby/src/main/java/org/jooby/Request.java
+++ b/jooby/src/main/java/org/jooby/Request.java
@@ -23,8 +23,8 @@
import static java.util.Objects.requireNonNull;
import org.jooby.scope.RequestScoped;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List;
diff --git a/jooby/src/main/java/org/jooby/Response.java b/jooby/src/main/java/org/jooby/Response.java
index 64442bba3..fd5203502 100644
--- a/jooby/src/main/java/org/jooby/Response.java
+++ b/jooby/src/main/java/org/jooby/Response.java
@@ -27,8 +27,8 @@
import com.google.common.collect.ImmutableList;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
/**
* Give you access to the actual HTTP response. You can read/write headers and write HTTP body.
diff --git a/jooby/src/main/java/org/jooby/Result.java b/jooby/src/main/java/org/jooby/Result.java
index f42d5043d..78d229eb3 100644
--- a/jooby/src/main/java/org/jooby/Result.java
+++ b/jooby/src/main/java/org/jooby/Result.java
@@ -27,8 +27,8 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
/**
* Utility class for HTTP responses. Usually you start with a result {@link Results builder} and
diff --git a/jooby/src/main/java/org/jooby/Results.java b/jooby/src/main/java/org/jooby/Results.java
index 17f218a56..e8c323cfd 100644
--- a/jooby/src/main/java/org/jooby/Results.java
+++ b/jooby/src/main/java/org/jooby/Results.java
@@ -17,7 +17,7 @@
import static java.util.Objects.requireNonNull;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.util.function.Supplier;
/**
diff --git a/jooby/src/main/java/org/jooby/Route.java b/jooby/src/main/java/org/jooby/Route.java
index 6f36695e8..68ddaa78f 100644
--- a/jooby/src/main/java/org/jooby/Route.java
+++ b/jooby/src/main/java/org/jooby/Route.java
@@ -33,12 +33,11 @@
import org.jooby.internal.RouteSourceImpl;
import org.jooby.internal.SourceProvider;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.time.Duration;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
diff --git a/jooby/src/main/java/org/jooby/Router.java b/jooby/src/main/java/org/jooby/Router.java
index 72608e12e..6bbf097f5 100644
--- a/jooby/src/main/java/org/jooby/Router.java
+++ b/jooby/src/main/java/org/jooby/Router.java
@@ -19,7 +19,7 @@
import org.jooby.funzy.Try;
import org.jooby.handlers.AssetHandler;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.net.URLDecoder;
import java.nio.file.Path;
import java.util.ArrayList;
diff --git a/jooby/src/main/java/org/jooby/Session.java b/jooby/src/main/java/org/jooby/Session.java
index 41909a40a..6248e4d51 100644
--- a/jooby/src/main/java/org/jooby/Session.java
+++ b/jooby/src/main/java/org/jooby/Session.java
@@ -18,7 +18,7 @@
import com.google.common.io.BaseEncoding;
import static java.util.Objects.requireNonNull;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.security.SecureRandom;
import java.util.Map;
import java.util.Optional;
diff --git a/jooby/src/main/java/org/jooby/Sse.java b/jooby/src/main/java/org/jooby/Sse.java
index 113b4b21c..fb34fcf5f 100644
--- a/jooby/src/main/java/org/jooby/Sse.java
+++ b/jooby/src/main/java/org/jooby/Sse.java
@@ -28,7 +28,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
import java.nio.charset.StandardCharsets;
diff --git a/jooby/src/main/java/org/jooby/Upload.java b/jooby/src/main/java/org/jooby/Upload.java
index 4a6afb9ab..ac6c51fc6 100644
--- a/jooby/src/main/java/org/jooby/Upload.java
+++ b/jooby/src/main/java/org/jooby/Upload.java
@@ -15,7 +15,7 @@
*/
package org.jooby;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
diff --git a/jooby/src/main/java/org/jooby/View.java b/jooby/src/main/java/org/jooby/View.java
index 83b53539d..d380d9e46 100644
--- a/jooby/src/main/java/org/jooby/View.java
+++ b/jooby/src/main/java/org/jooby/View.java
@@ -17,7 +17,7 @@
import static java.util.Objects.requireNonNull;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
diff --git a/jooby/src/main/java/org/jooby/WebSocket.java b/jooby/src/main/java/org/jooby/WebSocket.java
index c795e225b..e808cf2d5 100644
--- a/jooby/src/main/java/org/jooby/WebSocket.java
+++ b/jooby/src/main/java/org/jooby/WebSocket.java
@@ -24,8 +24,8 @@
import org.jooby.internal.WebSocketImpl;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
import java.io.Closeable;
import java.util.Map;
import java.util.Optional;
diff --git a/jooby/src/main/java/org/jooby/handlers/Cors.java b/jooby/src/main/java/org/jooby/handlers/Cors.java
index c1fa7cfd6..ad6e1fa0c 100644
--- a/jooby/src/main/java/org/jooby/handlers/Cors.java
+++ b/jooby/src/main/java/org/jooby/handlers/Cors.java
@@ -25,8 +25,8 @@
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import com.google.common.collect.ImmutableList;
import com.typesafe.config.Config;
diff --git a/jooby/src/main/java/org/jooby/internal/CookieSessionManager.java b/jooby/src/main/java/org/jooby/internal/CookieSessionManager.java
index 97d9fade1..d931bb3b1 100644
--- a/jooby/src/main/java/org/jooby/internal/CookieSessionManager.java
+++ b/jooby/src/main/java/org/jooby/internal/CookieSessionManager.java
@@ -25,8 +25,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
diff --git a/jooby/src/main/java/org/jooby/internal/HttpHandlerImpl.java b/jooby/src/main/java/org/jooby/internal/HttpHandlerImpl.java
index fef1c0954..931ad7cb2 100644
--- a/jooby/src/main/java/org/jooby/internal/HttpHandlerImpl.java
+++ b/jooby/src/main/java/org/jooby/internal/HttpHandlerImpl.java
@@ -48,10 +48,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import com.google.inject.Provider;
+import jakarta.inject.Singleton;
import java.nio.charset.Charset;
import java.text.MessageFormat;
import java.util.ArrayList;
diff --git a/jooby/src/main/java/org/jooby/internal/RequestScope.java b/jooby/src/main/java/org/jooby/internal/RequestScope.java
index 7a798738a..703f0ef16 100644
--- a/jooby/src/main/java/org/jooby/internal/RequestScope.java
+++ b/jooby/src/main/java/org/jooby/internal/RequestScope.java
@@ -52,9 +52,9 @@ public Provider scope(final Key key, final Provider unscoped) {
scopedObjects.put(key, current);
}
- if (current instanceof javax.inject.Provider) {
- if (!javax.inject.Provider.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {
- return (T) ((javax.inject.Provider) current).get();
+ if (current instanceof com.google.inject.Provider) {
+ if (!com.google.inject.Provider.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {
+ return (T) ((com.google.inject.Provider) current).get();
}
}
return current;
diff --git a/jooby/src/main/java/org/jooby/internal/ServerSessionManager.java b/jooby/src/main/java/org/jooby/internal/ServerSessionManager.java
index 4b39fc150..076f9beae 100644
--- a/jooby/src/main/java/org/jooby/internal/ServerSessionManager.java
+++ b/jooby/src/main/java/org/jooby/internal/ServerSessionManager.java
@@ -38,8 +38,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
import java.util.concurrent.TimeUnit;
@Singleton
diff --git a/jooby/src/main/java/org/jooby/internal/StatusCodeProvider.java b/jooby/src/main/java/org/jooby/internal/StatusCodeProvider.java
index 9bc2f0747..eed729707 100644
--- a/jooby/src/main/java/org/jooby/internal/StatusCodeProvider.java
+++ b/jooby/src/main/java/org/jooby/internal/StatusCodeProvider.java
@@ -18,7 +18,7 @@
import java.util.Optional;
import java.util.function.Function;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.jooby.Err;
import org.jooby.Status;
diff --git a/jooby/src/main/java/org/jooby/internal/WebSocketImpl.java b/jooby/src/main/java/org/jooby/internal/WebSocketImpl.java
index f4ad12f06..269f46464 100644
--- a/jooby/src/main/java/org/jooby/internal/WebSocketImpl.java
+++ b/jooby/src/main/java/org/jooby/internal/WebSocketImpl.java
@@ -34,7 +34,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import java.io.EOFException;
import java.nio.channels.ClosedChannelException;
import java.nio.charset.StandardCharsets;
diff --git a/jooby/src/main/java/org/jooby/internal/jetty/JettyHandler.java b/jooby/src/main/java/org/jooby/internal/jetty/JettyHandler.java
index f7c870833..642215dff 100644
--- a/jooby/src/main/java/org/jooby/internal/jetty/JettyHandler.java
+++ b/jooby/src/main/java/org/jooby/internal/jetty/JettyHandler.java
@@ -17,10 +17,10 @@
import java.io.IOException;
-import javax.servlet.MultipartConfigElement;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.MultipartConfigElement;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
diff --git a/jooby/src/main/java/org/jooby/internal/jetty/JettyResponse.java b/jooby/src/main/java/org/jooby/internal/jetty/JettyResponse.java
index d979ed92c..23ba0c5f4 100644
--- a/jooby/src/main/java/org/jooby/internal/jetty/JettyResponse.java
+++ b/jooby/src/main/java/org/jooby/internal/jetty/JettyResponse.java
@@ -21,8 +21,8 @@
import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.HttpOutput;
import org.eclipse.jetty.server.Response;
diff --git a/jooby/src/main/java/org/jooby/internal/jetty/JettyServer.java b/jooby/src/main/java/org/jooby/internal/jetty/JettyServer.java
index 0c7c5f613..04861918b 100644
--- a/jooby/src/main/java/org/jooby/internal/jetty/JettyServer.java
+++ b/jooby/src/main/java/org/jooby/internal/jetty/JettyServer.java
@@ -35,8 +35,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
-import javax.inject.Provider;
+import jakarta.inject.Inject;
+import com.google.inject.Provider;
import javax.net.ssl.SSLContext;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
diff --git a/jooby/src/main/java/org/jooby/internal/jetty/JettySse.java b/jooby/src/main/java/org/jooby/internal/jetty/JettySse.java
index 97b73f5b1..e66b69eb8 100644
--- a/jooby/src/main/java/org/jooby/internal/jetty/JettySse.java
+++ b/jooby/src/main/java/org/jooby/internal/jetty/JettySse.java
@@ -24,7 +24,7 @@
import org.jooby.Sse;
import org.jooby.funzy.Try;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
diff --git a/jooby/src/main/java/org/jooby/internal/mvc/RequestParam.java b/jooby/src/main/java/org/jooby/internal/mvc/RequestParam.java
index 7ed6f3cbd..d4ce8a873 100644
--- a/jooby/src/main/java/org/jooby/internal/mvc/RequestParam.java
+++ b/jooby/src/main/java/org/jooby/internal/mvc/RequestParam.java
@@ -34,7 +34,7 @@
import org.jooby.mvc.Header;
import org.jooby.mvc.Local;
-import javax.inject.Named;
+import jakarta.inject.Named;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;
diff --git a/jooby/src/main/java/org/jooby/internal/parser/LocalDateParser.java b/jooby/src/main/java/org/jooby/internal/parser/LocalDateParser.java
index 9df748df4..2fc1ee483 100644
--- a/jooby/src/main/java/org/jooby/internal/parser/LocalDateParser.java
+++ b/jooby/src/main/java/org/jooby/internal/parser/LocalDateParser.java
@@ -24,7 +24,7 @@
import java.time.format.DateTimeFormatter;
import java.util.Optional;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.jooby.Parser;
diff --git a/jooby/src/main/java/org/jooby/internal/parser/ParserExecutor.java b/jooby/src/main/java/org/jooby/internal/parser/ParserExecutor.java
index 49cab5bf0..3dd8811a1 100644
--- a/jooby/src/main/java/org/jooby/internal/parser/ParserExecutor.java
+++ b/jooby/src/main/java/org/jooby/internal/parser/ParserExecutor.java
@@ -19,7 +19,7 @@
import java.util.Map;
import java.util.Set;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.jooby.MediaType;
import org.jooby.Mutant;
diff --git a/jooby/src/main/java/org/jooby/internal/parser/ZonedDateTimeParser.java b/jooby/src/main/java/org/jooby/internal/parser/ZonedDateTimeParser.java
index b6aa752f2..4c7430223 100644
--- a/jooby/src/main/java/org/jooby/internal/parser/ZonedDateTimeParser.java
+++ b/jooby/src/main/java/org/jooby/internal/parser/ZonedDateTimeParser.java
@@ -19,7 +19,7 @@
import static java.util.Objects.requireNonNull;
import org.jooby.Parser;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
diff --git a/jooby/src/main/java/org/jooby/internal/parser/bean/BeanIndexedPath.java b/jooby/src/main/java/org/jooby/internal/parser/bean/BeanIndexedPath.java
index 282c3ce8d..eda32326b 100644
--- a/jooby/src/main/java/org/jooby/internal/parser/bean/BeanIndexedPath.java
+++ b/jooby/src/main/java/org/jooby/internal/parser/bean/BeanIndexedPath.java
@@ -23,7 +23,7 @@
import com.google.inject.TypeLiteral;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
@SuppressWarnings("rawtypes")
class BeanIndexedPath implements BeanPath {
diff --git a/jooby/src/main/java/org/jooby/internal/parser/bean/BeanPlan.java b/jooby/src/main/java/org/jooby/internal/parser/bean/BeanPlan.java
index 9e05d627e..d9a9c0f23 100644
--- a/jooby/src/main/java/org/jooby/internal/parser/bean/BeanPlan.java
+++ b/jooby/src/main/java/org/jooby/internal/parser/bean/BeanPlan.java
@@ -27,7 +27,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
diff --git a/jooby/src/main/java/org/jooby/internal/ssl/SslContextProvider.java b/jooby/src/main/java/org/jooby/internal/ssl/SslContextProvider.java
index d7dda49fd..efdac5ef2 100644
--- a/jooby/src/main/java/org/jooby/internal/ssl/SslContextProvider.java
+++ b/jooby/src/main/java/org/jooby/internal/ssl/SslContextProvider.java
@@ -19,8 +19,8 @@
import static java.util.Objects.requireNonNull;
import org.jooby.funzy.Try;
-import javax.inject.Inject;
-import javax.inject.Provider;
+import jakarta.inject.Inject;
+import com.google.inject.Provider;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.FileNotFoundException;
diff --git a/jooby/src/main/java/org/jooby/jetty/Jetty.java b/jooby/src/main/java/org/jooby/jetty/Jetty.java
index d8b331747..0a5259fb6 100644
--- a/jooby/src/main/java/org/jooby/jetty/Jetty.java
+++ b/jooby/src/main/java/org/jooby/jetty/Jetty.java
@@ -15,7 +15,7 @@
*/
package org.jooby.jetty;
-import javax.inject.Singleton;
+import jakarta.inject.Singleton;
import org.jooby.Env;
import org.jooby.Jooby;
diff --git a/jooby/src/main/java/org/jooby/json/Jackson.java b/jooby/src/main/java/org/jooby/json/Jackson.java
index 7a1cfc840..72de90739 100644
--- a/jooby/src/main/java/org/jooby/json/Jackson.java
+++ b/jooby/src/main/java/org/jooby/json/Jackson.java
@@ -33,7 +33,7 @@
import org.jooby.Parser;
import org.jooby.Renderer;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
diff --git a/jooby/src/main/java/org/jooby/mvc/Header.java b/jooby/src/main/java/org/jooby/mvc/Header.java
index 4b5e8885b..113320626 100644
--- a/jooby/src/main/java/org/jooby/mvc/Header.java
+++ b/jooby/src/main/java/org/jooby/mvc/Header.java
@@ -20,7 +20,7 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import javax.inject.Qualifier;
+import jakarta.inject.Qualifier;
/**
* Mark a MVC method parameter as a request header.
diff --git a/jooby/src/main/java/org/jooby/package-info.java b/jooby/src/main/java/org/jooby/package-info.java
index 12f7005cd..9b25b73d7 100644
--- a/jooby/src/main/java/org/jooby/package-info.java
+++ b/jooby/src/main/java/org/jooby/package-info.java
@@ -19,5 +19,4 @@
* Jooby a scalable, fast and modular micro web framework for Java and Kotlin.
*
*/
-@javax.annotation.ParametersAreNonnullByDefault
package org.jooby;
diff --git a/jooby/src/main/java/org/jooby/scope/Providers.java b/jooby/src/main/java/org/jooby/scope/Providers.java
index c9d978438..9dfe0e590 100644
--- a/jooby/src/main/java/org/jooby/scope/Providers.java
+++ b/jooby/src/main/java/org/jooby/scope/Providers.java
@@ -15,7 +15,7 @@
*/
package org.jooby.scope;
-import javax.inject.Provider;
+import com.google.inject.Provider;
import com.google.inject.Key;
import com.google.inject.OutOfScopeException;
diff --git a/jooby/src/main/java/org/jooby/scope/RequestScoped.java b/jooby/src/main/java/org/jooby/scope/RequestScoped.java
index 6a4533ea7..60c1f271e 100644
--- a/jooby/src/main/java/org/jooby/scope/RequestScoped.java
+++ b/jooby/src/main/java/org/jooby/scope/RequestScoped.java
@@ -20,7 +20,7 @@
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
-import javax.inject.Scope;
+import jakarta.inject.Scope;
/**
* Define a request scoped object. Steps for defining a request scoped object are:
diff --git a/jooby/src/main/java/org/jooby/servlet/ServerInitializer.java b/jooby/src/main/java/org/jooby/servlet/ServerInitializer.java
index 45f38eb68..2e7b9ea03 100644
--- a/jooby/src/main/java/org/jooby/servlet/ServerInitializer.java
+++ b/jooby/src/main/java/org/jooby/servlet/ServerInitializer.java
@@ -23,9 +23,9 @@
import org.jooby.funzy.Throwing;
import org.jooby.spi.Server;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
public class ServerInitializer implements ServletContextListener {
diff --git a/jooby/src/main/java/org/jooby/servlet/ServletHandler.java b/jooby/src/main/java/org/jooby/servlet/ServletHandler.java
index 601e1e3fa..179c7d864 100644
--- a/jooby/src/main/java/org/jooby/servlet/ServletHandler.java
+++ b/jooby/src/main/java/org/jooby/servlet/ServletHandler.java
@@ -17,12 +17,12 @@
import java.io.IOException;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.jooby.Jooby;
import org.jooby.spi.HttpHandler;
diff --git a/jooby/src/main/java/org/jooby/servlet/ServletServletRequest.java b/jooby/src/main/java/org/jooby/servlet/ServletServletRequest.java
index 351ef0c2d..ca75d8a21 100644
--- a/jooby/src/main/java/org/jooby/servlet/ServletServletRequest.java
+++ b/jooby/src/main/java/org/jooby/servlet/ServletServletRequest.java
@@ -30,8 +30,8 @@
import java.util.function.Function;
import java.util.stream.Collectors;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.jooby.Cookie;
import org.jooby.MediaType;
@@ -150,7 +150,7 @@ public List headerNames() {
@Override
public List cookies() {
- javax.servlet.http.Cookie[] cookies = req.getCookies();
+ jakarta.servlet.http.Cookie[] cookies = req.getCookies();
if (cookies == null) {
return ImmutableList.of();
}
diff --git a/jooby/src/main/java/org/jooby/servlet/ServletServletResponse.java b/jooby/src/main/java/org/jooby/servlet/ServletServletResponse.java
index 74a7fcc69..7abb88771 100644
--- a/jooby/src/main/java/org/jooby/servlet/ServletServletResponse.java
+++ b/jooby/src/main/java/org/jooby/servlet/ServletServletResponse.java
@@ -22,10 +22,10 @@
import org.jooby.funzy.Try;
import org.jooby.spi.NativeResponse;
-import javax.servlet.AsyncContext;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
diff --git a/jooby/src/main/java/org/jooby/servlet/ServletUpload.java b/jooby/src/main/java/org/jooby/servlet/ServletUpload.java
index 8102674bb..8f3c0c2dc 100644
--- a/jooby/src/main/java/org/jooby/servlet/ServletUpload.java
+++ b/jooby/src/main/java/org/jooby/servlet/ServletUpload.java
@@ -23,7 +23,7 @@
import java.util.Collections;
import java.util.List;
-import javax.servlet.http.Part;
+import jakarta.servlet.http.Part;
import org.jooby.spi.NativeUpload;
diff --git a/jooby/src/test/java/org/jooby/EnvTest.java b/jooby/src/test/java/org/jooby/EnvTest.java
index 5a59a1279..3eeef1ca7 100644
--- a/jooby/src/test/java/org/jooby/EnvTest.java
+++ b/jooby/src/test/java/org/jooby/EnvTest.java
@@ -26,7 +26,7 @@
import static org.junit.Assert.fail;
import org.junit.Test;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Locale;
import java.util.Map;
diff --git a/jooby/src/test/java/org/jooby/JoobyTest.java b/jooby/src/test/java/org/jooby/JoobyTest.java
index 0b3123cd4..22d7a445e 100644
--- a/jooby/src/test/java/org/jooby/JoobyTest.java
+++ b/jooby/src/test/java/org/jooby/JoobyTest.java
@@ -90,8 +90,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Provider;
-import javax.inject.Singleton;
+import com.google.inject.Provider;
+import jakarta.inject.Singleton;
import javax.net.ssl.SSLContext;
import java.io.File;
import java.nio.charset.Charset;
diff --git a/jooby/src/test/java/org/jooby/LifeCycleTest.java b/jooby/src/test/java/org/jooby/LifeCycleTest.java
index 45a886e64..4ef8cf03e 100644
--- a/jooby/src/test/java/org/jooby/LifeCycleTest.java
+++ b/jooby/src/test/java/org/jooby/LifeCycleTest.java
@@ -17,8 +17,8 @@
import org.junit.Test;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.PreDestroy;
import java.io.IOException;
public class LifeCycleTest {
diff --git a/jooby/src/test/java/org/jooby/RequestTest.java b/jooby/src/test/java/org/jooby/RequestTest.java
index 9a211bf70..58e748440 100644
--- a/jooby/src/test/java/org/jooby/RequestTest.java
+++ b/jooby/src/test/java/org/jooby/RequestTest.java
@@ -37,7 +37,7 @@
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
-import javax.annotation.Nonnull;
+import jakarta.annotation.Nonnull;
public class RequestTest {
public class RequestMock implements Request {
diff --git a/jooby/src/test/java/org/jooby/WebSocketTest.java b/jooby/src/test/java/org/jooby/WebSocketTest.java
index 4f6d4efe3..06220e3f2 100644
--- a/jooby/src/test/java/org/jooby/WebSocketTest.java
+++ b/jooby/src/test/java/org/jooby/WebSocketTest.java
@@ -26,7 +26,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nullable;
+import jakarta.annotation.Nullable;
import java.util.LinkedList;
import java.util.Map;
import java.util.Optional;
diff --git a/jooby/src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java b/jooby/src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java
index 5011e3bb0..ed56a1d86 100644
--- a/jooby/src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java
+++ b/jooby/src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java
@@ -26,9 +26,9 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
-import javax.servlet.MultipartConfigElement;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.MultipartConfigElement;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
diff --git a/jooby/src/test/java/org/jooby/internal/jetty/JettyResponseTest.java b/jooby/src/test/java/org/jooby/internal/jetty/JettyResponseTest.java
index 76a6994aa..3e13764e2 100644
--- a/jooby/src/test/java/org/jooby/internal/jetty/JettyResponseTest.java
+++ b/jooby/src/test/java/org/jooby/internal/jetty/JettyResponseTest.java
@@ -32,8 +32,8 @@
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
-import javax.servlet.AsyncContext;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.http.HttpServletRequest;
import org.eclipse.jetty.server.HttpOutput;
import org.eclipse.jetty.server.Request;
diff --git a/jooby/src/test/java/org/jooby/internal/jetty/JettyServerTest.java b/jooby/src/test/java/org/jooby/internal/jetty/JettyServerTest.java
index 5f6eeeaa6..0ac3e376b 100644
--- a/jooby/src/test/java/org/jooby/internal/jetty/JettyServerTest.java
+++ b/jooby/src/test/java/org/jooby/internal/jetty/JettyServerTest.java
@@ -29,7 +29,7 @@
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.inject.Provider;
+import com.google.inject.Provider;
import javax.net.ssl.SSLContext;
import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory;
diff --git a/jooby/src/test/java/org/jooby/internal/jetty/JettySseTest.java b/jooby/src/test/java/org/jooby/internal/jetty/JettySseTest.java
index 69b42e51a..30c66d26d 100644
--- a/jooby/src/test/java/org/jooby/internal/jetty/JettySseTest.java
+++ b/jooby/src/test/java/org/jooby/internal/jetty/JettySseTest.java
@@ -28,7 +28,7 @@
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-import javax.servlet.AsyncContext;
+import jakarta.servlet.AsyncContext;
import java.io.IOException;
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
diff --git a/jooby/src/test/java/org/jooby/internal/mvc/RequestParamTest.java b/jooby/src/test/java/org/jooby/internal/mvc/RequestParamTest.java
index e0f240828..9a18ace1d 100644
--- a/jooby/src/test/java/org/jooby/internal/mvc/RequestParamTest.java
+++ b/jooby/src/test/java/org/jooby/internal/mvc/RequestParamTest.java
@@ -23,7 +23,7 @@
import org.jooby.test.MockUnit;
import org.junit.Test;
-import javax.inject.Named;
+import jakarta.inject.Named;
import java.lang.reflect.Parameter;
import java.util.Optional;
diff --git a/jooby/src/test/java/org/jooby/internal/parser/BeanPlanTest.java b/jooby/src/test/java/org/jooby/internal/parser/BeanPlanTest.java
index cc7cd7e28..5fd8cf525 100644
--- a/jooby/src/test/java/org/jooby/internal/parser/BeanPlanTest.java
+++ b/jooby/src/test/java/org/jooby/internal/parser/BeanPlanTest.java
@@ -17,7 +17,7 @@
import static org.junit.Assert.assertEquals;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.jooby.internal.ParameterNameProvider;
import org.jooby.internal.parser.bean.BeanPlan;
diff --git a/jooby/src/test/java/org/jooby/servlet/ServerInitializerTest.java b/jooby/src/test/java/org/jooby/servlet/ServerInitializerTest.java
index be875c052..6b0091338 100644
--- a/jooby/src/test/java/org/jooby/servlet/ServerInitializerTest.java
+++ b/jooby/src/test/java/org/jooby/servlet/ServerInitializerTest.java
@@ -22,8 +22,8 @@
import org.jooby.test.MockUnit;
import org.junit.Test;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
public class ServerInitializerTest {
diff --git a/jooby/src/test/java/org/jooby/servlet/ServletHandlerTest.java b/jooby/src/test/java/org/jooby/servlet/ServletHandlerTest.java
index 5cc0655c1..c87895df0 100644
--- a/jooby/src/test/java/org/jooby/servlet/ServletHandlerTest.java
+++ b/jooby/src/test/java/org/jooby/servlet/ServletHandlerTest.java
@@ -19,11 +19,11 @@
import java.io.IOException;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.jooby.Jooby;
import org.jooby.spi.HttpHandler;
diff --git a/jooby/src/test/java/org/jooby/servlet/ServletServletRequestTest.java b/jooby/src/test/java/org/jooby/servlet/ServletServletRequestTest.java
index 396dfa20d..2aecca0e8 100644
--- a/jooby/src/test/java/org/jooby/servlet/ServletServletRequestTest.java
+++ b/jooby/src/test/java/org/jooby/servlet/ServletServletRequestTest.java
@@ -22,8 +22,8 @@
import java.util.Collections;
import java.util.UUID;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
import org.jooby.MediaType;
import org.jooby.test.MockUnit;
diff --git a/jooby/src/test/java/org/jooby/servlet/ServletServletResponseTest.java b/jooby/src/test/java/org/jooby/servlet/ServletServletResponseTest.java
index 3da62e446..4572b84e6 100644
--- a/jooby/src/test/java/org/jooby/servlet/ServletServletResponseTest.java
+++ b/jooby/src/test/java/org/jooby/servlet/ServletServletResponseTest.java
@@ -22,9 +22,9 @@
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
diff --git a/killbill-jooby-todo.md b/killbill-jooby-todo.md
index f62a4c0a8..6e37ee4f2 100644
--- a/killbill-jooby-todo.md
+++ b/killbill-jooby-todo.md
@@ -9,24 +9,22 @@
## Phase 0 — Current State Assessment ✅
-- The codebase targets **JDK 11** as baseline (`project.build.targetJdk=11` via `killbill-oss-parent:0.146.63`).
-- 90 Java source files use `javax.*` imports — zero `jakarta.*` imports exist anywhere.
-- Maven coordinates already use transitional `jakarta.*` groupIds for some dependencies, but these still ship `javax.*` packages:
- - `jakarta.servlet:jakarta.servlet-api` in `skeleton`, `metrics` (code uses `javax.servlet.*`).
- - `jakarta.ws.rs:jakarta.ws.rs-api` in `skeleton` (code uses `javax.ws.rs.*`).
- - `jakarta.xml.bind:jakarta.xml.bind-api` in `automaton`, `xmlloader` (code uses `javax.xml.bind.*`).
- - `jakarta.activation:jakarta.activation-api` in `automaton`, `xmlloader`.
-- `javax.inject:javax.inject` is still the Maven artifact in 4 modules: `skeleton` (5 files), `queue` (4 files), `jdbi` (2 files), `metrics` (1 file).
-- Guice version is **5.1.0** (managed by `killbill-oss-parent`; supports `javax.inject` only).
-- Jersey version is **2.39.1** (supports `javax.ws.rs` only; Jersey 3.x requires `jakarta.ws.rs`).
-- `javax.servlet` imports span 12 files: `skeleton` (8 files), `metrics` (4 files).
-- `javax.ws.rs` imports span 6 files: `skeleton` only.
-- `javax.xml.bind` imports span 14 files: `automaton` (7 files), `xmlloader` (7 files).
-- `javax.annotation.Nullable`/`@Nonnull` (from `jsr305`) is used in 35 files across 8 modules.
- - This does NOT need migration — `jsr305` is not part of the Jakarta namespace transition.
-- `javax.sql` is used in 22 files across 5 modules — this is core JDK, NOT part of Jakarta migration.
-- Jooby 1.6.9 uses `javax.*` namespace, which matches the current codebase state.
- - The Jakarta migration keeps the existing `killbill-jooby` fork and updates it in place during Phases 3-4.
+- The repository currently targets **JDK 17** in-repo via `project.build.targetJdk=17`, while still inheriting from `killbill-oss-parent:0.146.63`.
+- The Jakarta migration is complete for the targeted Java EE APIs:
+ - `javax.inject` -> `jakarta.inject`
+ - `javax.servlet` -> `jakarta.servlet`
+ - `javax.ws.rs` -> `jakarta.ws.rs`
+ - `javax.xml.bind` -> `jakarta.xml.bind`
+- `killbill-jooby` no longer has direct `javax.annotation` usage.
+- `jakarta.inject:jakarta.inject-api` is now the explicit Maven artifact in `killbill-jooby`, `queue`, `jdbi`, `metrics`, and `skeleton`.
+- Guice version is **7.0.0** (overridden in this repository; now aligned with the Jakarta servlet stack).
+- Jersey version is **3.0.18** with HK2 **3.0.6** in `skeleton` (Jakarta namespace line).
+- `killbill-jooby` and `skeleton` now use Jetty **11.0.24**.
+- Remaining `javax.*` usage is **not** the already-migrated Jakarta surface:
+ - `javax.annotation.*` from `jsr305` still appears in several modules and is outside the Jakarta EE migration scope.
+ - JDK namespaces like `javax.sql`, `javax.net.ssl`, `javax.crypto`, `javax.xml`, `javax.management`, and `javax.naming` remain where appropriate.
+- So the repository is **not literally `javax.*`-free**, but it is free of the targeted `javax` APIs that were part of this Jakarta migration.
+- The Jakarta migration keeps the existing `killbill-jooby` fork and updates it in place during Phases 3-4.
- `killbill-commons` already contains vendored forks: `jdbi` (fork of jDBI 2.62) and `config-magic` (fork of config-magic 0.17).
- `killbill-jooby` follows the same forking pattern.
@@ -74,10 +72,10 @@
- Complete POM written from scratch — see `jooby/CHANGES.md` for the full dependency version mapping table.
- `guice-multibindings` removed (merged into core Guice since 4.2).
- `funzy` removed as external dep (inlined into `org.jooby.funzy`).
-- `javax.servlet-api` → `jakarta.servlet:jakarta.servlet-api:4.0.4` (transitional, still ships `javax.servlet`).
-- Jetty upgraded from 9.4.24 → 10.0.16; `websocket-server` → `websocket-jetty-server`; `jetty-alpn-server` added.
+- `javax.servlet-api` was first replaced by `jakarta.servlet:jakarta.servlet-api` during the forking work and later moved to the current Servlet **5.0.0** baseline in the Jakarta migration.
+- Jetty was first upgraded from 9.4.24 → 10.0.16 during the initial fork and later moved to the current Jetty **11.0.24** baseline.
- ASM shade plugin preserved (`org.objectweb.asm` → `org.jooby.internal.asm`).
-- `jakarta.annotation-api:1.3.5` added for `@PostConstruct`/`@PreDestroy`.
+- `jakarta.annotation-api:2.1.1` added for Jooby's `@PostConstruct`/`@PreDestroy` and nullability annotations after removing the fork's direct `javax.annotation` usage.
- PowerMock removed (obsolete for modern JDKs).
- All other deps aligned to Kill Bill managed versions (Jackson, Guava, SLF4J, Typesafe Config).
@@ -103,7 +101,7 @@
- Apache RAT exclusions added for resource files and the temporary migration layout.
- Removed `spotbugs-annotations` dependency (no upstream source uses `@SuppressFBWarnings`).
- Removed `websocket-jetty-server` dependency (WebSocket factory code removed from Jetty adapter).
-- Added explicit deps for `websocket-jetty-api`, `jetty-io`, `jetty-util`, `javax.inject` (transitive but used directly).
+- Added explicit deps for `websocket-jetty-api`, `jetty-io`, `jetty-util`, `jakarta.inject-api` (annotations) and kept Guice-provider-compatible code paths where needed.
## 7. Migrate EasyMock + PowerMock to Mockito ✅
@@ -156,14 +154,14 @@
- Source: `src/test/java-excluded/org/jooby/internal/jetty/JettyHandlerTest.java`
- Target path: `src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java`
-- Restored as a current-behavior Jetty 10 test in `src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java`.
+- Restored as a current-behavior Jetty adapter test in `src/test/java/org/jooby/internal/jetty/JettyHandlerTest.java`.
- Re-review target: `src/main/java/org/jooby/internal/jetty/JettyHandler.java`.
## 15. Rewrite `JettyServerTest` ✅
- Source: `src/test/java-excluded/org/jooby/internal/jetty/JettyServerTest.java`
- Target path: `src/test/java/org/jooby/internal/jetty/JettyServerTest.java`
-- Restored as a direct Jetty 10 wiring test in `src/test/java/org/jooby/internal/jetty/JettyServerTest.java`.
+- Restored as a direct Jetty wiring test in `src/test/java/org/jooby/internal/jetty/JettyServerTest.java`.
- Re-review target: `src/main/java/org/jooby/internal/jetty/JettyServer.java`.
## 16. Restore `SseFeature` ✅
@@ -177,7 +175,7 @@
---
-# Phase 2 — JDK & Guice Foundation Upgrades
+# Phase 2 — JDK & Guice Foundation Upgrades ✅
> These steps prepare the foundation for the Jakarta namespace migration.
> They do NOT change any `javax.*` imports — only upgrade the JDK and Guice versions.
@@ -212,31 +210,30 @@
- Replace `javax.inject:javax.inject` with `jakarta.inject:jakarta.inject-api:2.0.1` in all POMs.
- In all Java source files, replace `import javax.inject.*` with `import jakarta.inject.*`.
- - Affected modules: `skeleton` (5 files), `queue` (4 files), `jdbi` (2 files), `metrics` (1 file), and `killbill-jooby` (forked Jooby source).
- - Affected annotations: `@Inject`, `@Named`, `@Singleton`, `@Provider`.
-- Verify Guice 6.0 resolves `jakarta.inject` annotations correctly alongside any remaining `javax.inject` from transitive deps.
+ - Completed in-repo for `killbill-jooby`, `queue`, `jdbi`, `metrics`, and `skeleton`.
+ - Affected annotations: `@Inject`, `@Named`, `@Singleton`, `@Qualifier`, `@Scope`.
+- Verify Guice 7.0 resolves `jakarta.inject` annotations correctly across the migrated modules.
- Run the full test suite to confirm no injection failures.
## 2. javax.servlet → jakarta.servlet
-- Upgrade `jakarta.servlet:jakarta.servlet-api` from `4.x` (transitional) to `6.0.0` (true Jakarta namespace).
+- Upgrade `killbill-jooby` to Jetty 11 and move its servlet/jetty adapter code to `jakarta.servlet`.
+- Upgrade the remaining `jakarta.servlet:jakarta.servlet-api` users from `4.x` (transitional) to a true Jakarta namespace line when their integration layers are ready.
- In all Java source files, replace `import javax.servlet.*` with `import jakarta.servlet.*`.
- - Affected modules: `skeleton` (8 files), `metrics` (4 files), and `killbill-jooby` (forked Jooby servlet/jetty source under `org.jooby.servlet`/`org.jooby.jetty` packages).
+ - Completed in-repo for `killbill-jooby`, `skeleton`, and `metrics`.
- Affected classes: `HttpServlet`, `ServletContext`, `Filter`, `FilterChain`, `HttpServletRequest`, `HttpServletResponse`, etc.
- Update `GuiceServletContextListener` and `JULServletContextListener` to use `jakarta.servlet` equivalents.
-- Note: `guice-servlet` 6.0 still uses `javax.servlet` — this creates a temporary incompatibility.
- - Workaround: keep `guice-servlet` on 6.0 and defer `skeleton`/`metrics` servlet migration until Phase 3 / Step 4 (Guice 7.0).
- - Alternative: migrate `skeleton` servlet code and `guice-servlet` together in Phase 3 / Step 4.
+- Current state: completed in-repo via Guice Servlet **7.0.0**, Jetty **11.0.24**, `jakarta.servlet-api:5.0.0`, and source/test migration from `javax.servlet.*` to `jakarta.servlet.*` in `killbill-jooby`, `skeleton`, and `metrics`.
## 3. javax.ws.rs → jakarta.ws.rs + Jersey 3.x (skeleton only)
-- Upgrade `jakarta.ws.rs:jakarta.ws.rs-api` from `2.x` (transitional) to `3.1.0` (true Jakarta namespace).
+- Upgrade `jakarta.ws.rs:jakarta.ws.rs-api` from `2.x` (transitional) to a true Jakarta namespace line.
- In all Java source files, replace `import javax.ws.rs.*` with `import jakarta.ws.rs.*`.
- - Affected module: `skeleton` only (6 files).
+ - Completed in-repo for `skeleton`.
- Affected annotations: `@Path`, `@GET`, `@POST`, `@Produces`, `@Consumes`, `@QueryParam`, `@PathParam`, etc.
- Upgrade Jersey from **2.39.1 to 3.x** (Jersey 3.x uses `jakarta.ws.rs`).
- - Update all `org.glassfish.jersey.*` dependencies to their 3.x equivalents.
- - Update `org.glassfish.hk2:guice-bridge` and `hk2-api` to Jakarta-compatible versions.
+ - Completed in-repo with Jersey **3.0.18** and HK2 / `guice-bridge` **3.0.6**.
+ - Updated the Jackson JAX-RS provider to `com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-json-provider`.
- Run skeleton tests (`TestJerseyBaseServerModule`) to verify Jersey 3.x + Jakarta JAX-RS works.
## 4. Upgrade to Guice 7.0.0 (Final Jakarta)
@@ -245,7 +242,7 @@
- This step MUST come after Phase 2 / Step 2 and the earlier Jakarta migration steps in this phase are complete.
- Update `killbill-oss-parent` to use `com.google.inject:guice:7.0.0`.
- Update `com.google.inject.extensions:guice-servlet` to `7.0.0` (now uses `jakarta.servlet`).
- - This resolves the `guice-servlet` / `jakarta.servlet` incompatibility noted above.
+ - Completed in-repo via root dependency management override to Guice / Guice Servlet **7.0.0**.
- Verify no transitive dependency still pulls in `javax.inject` or `javax.servlet` (use `mvn dependency:tree`).
- Run the full test suite to confirm everything works with Guice 7.0.0.
@@ -258,12 +255,13 @@
- Update JAXB runtime implementation (e.g., `org.glassfish.jaxb:jaxb-runtime`) to 4.x.
- Run automaton and xmlloader tests to verify XML serialization/deserialization still works.
- This step is independent of Guice and can be done in parallel with the earlier Jakarta migration work.
+- Current state: completed in-repo via `jakarta.xml.bind-api:4.0.0`, `jaxb-runtime:4.0.0`, and source/test import updates in `automaton` and `xmlloader`.
---
# Phase 4 — Continue Modernizing the Existing killbill-jooby Fork
-> With the codebase fully on Jakarta (Phase 3), keep the existing `killbill-jooby`
+> With the targeted Jakarta migration complete for the framework-facing APIs (Phase 3), keep the existing `killbill-jooby`
> fork based on upstream Jooby 1.6.9 and continue modernizing it in place.
> This is fork maintenance, not a re-fork onto a newer upstream major version.
@@ -277,6 +275,7 @@
- Re-verify Kill Bill-specific changes documented in `jooby/CHANGES.md` and keep them applied on top of the maintained fork.
- Update `jooby/README.md` and `jooby/CHANGES.md` to reflect the current maintained-fork baseline and any new compatibility notes.
- Run `mvn clean install` to verify compilation and tests pass.
+- Current state: effectively complete in-repo. The maintained fork remains based on Jooby **1.6.9**, stays vendored in place, uses the existing Kill Bill module layout and test tree, runs on Jetty **11.0.24** / Servlet **5.0.0**, and no longer has direct `javax.annotation` usage.
---
@@ -301,6 +300,28 @@
---
+# Phase 6 — Parent Dependency Alignment
+
+> Once the Jakarta-era dependency baselines are proven inside `killbill-commons`, move the stable
+> version pins into `killbill-oss-parent` so this repository stops carrying local overrides that
+> should become platform defaults.
+
+## 1. Promote Jetty 11 / Servlet 5 properties to killbill-oss-parent
+
+- Add parent-managed `jetty.version` for the validated Jooby baseline (**11.0.24** or later agreed patch line).
+- Add parent-managed `jakarta.servlet-api.version` for the validated Jakarta Servlet baseline (**5.0.0** or later agreed line).
+- Update `killbill-oss-parent` dependency management so child modules can inherit these versions consistently.
+- Remove the local `jetty.version` and `jakarta.servlet-api.version` properties from child modules once the parent provides them.
+- Verify `killbill-commons` still builds and tests cleanly when Jooby inherits those properties from `killbill-oss-parent`.
+- Verify downstream Kill Bill repositories that consume Jetty / Servlet APIs remain compatible with the new parent-managed baseline.
+
+## 2. Promote later Jakarta-era dependency baselines to killbill-oss-parent
+
+- As Phase 3 and Phase 4 complete, move any other repository-local dependency overrides that should become platform defaults into `killbill-oss-parent`.
+- Keep this limited to versions that are already validated in `killbill-commons`; do not move experimental baselines into the parent prematurely.
+
+---
+
# Cross-Cutting Concerns (All Phases)
## 1. Process & Verification Guidelines
diff --git a/metrics-api/pom.xml b/metrics-api/pom.xml
index 37702a020..ff1bf01ba 100644
--- a/metrics-api/pom.xml
+++ b/metrics-api/pom.xml
@@ -27,5 +27,5 @@
spotbugs-exclude.xml
-
+
diff --git a/metrics/pom.xml b/metrics/pom.xml
index b7ccec459..9d207428a 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -57,12 +57,12 @@
metrics-core
- jakarta.servlet
- jakarta.servlet-api
+ jakarta.inject
+ jakarta.inject-api
- javax.inject
- javax.inject
+ jakarta.servlet
+ jakarta.servlet-api
junit
diff --git a/metrics/src/main/java/org/killbill/commons/metrics/health/KillBillHealthCheckRegistry.java b/metrics/src/main/java/org/killbill/commons/metrics/health/KillBillHealthCheckRegistry.java
index 5a7893074..74fe6031c 100644
--- a/metrics/src/main/java/org/killbill/commons/metrics/health/KillBillHealthCheckRegistry.java
+++ b/metrics/src/main/java/org/killbill/commons/metrics/health/KillBillHealthCheckRegistry.java
@@ -24,7 +24,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.killbill.commons.health.api.HealthCheck;
import org.killbill.commons.health.api.HealthCheckRegistry;
diff --git a/metrics/src/main/java/org/killbill/commons/metrics/servlets/HealthCheckServlet.java b/metrics/src/main/java/org/killbill/commons/metrics/servlets/HealthCheckServlet.java
index 6d2c02e4e..dfd89d436 100644
--- a/metrics/src/main/java/org/killbill/commons/metrics/servlets/HealthCheckServlet.java
+++ b/metrics/src/main/java/org/killbill/commons/metrics/servlets/HealthCheckServlet.java
@@ -23,13 +23,13 @@
import java.util.SortedMap;
import java.util.TreeMap;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.killbill.commons.health.api.HealthCheckRegistry;
import org.killbill.commons.health.api.Result;
diff --git a/metrics/src/main/java/org/killbill/commons/metrics/servlets/InstrumentedFilter.java b/metrics/src/main/java/org/killbill/commons/metrics/servlets/InstrumentedFilter.java
index d80485e40..7e4f9db5f 100644
--- a/metrics/src/main/java/org/killbill/commons/metrics/servlets/InstrumentedFilter.java
+++ b/metrics/src/main/java/org/killbill/commons/metrics/servlets/InstrumentedFilter.java
@@ -25,16 +25,16 @@
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
-import javax.servlet.AsyncEvent;
-import javax.servlet.AsyncListener;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
+import jakarta.servlet.AsyncEvent;
+import jakarta.servlet.AsyncListener;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponseWrapper;
import org.killbill.commons.metrics.api.Counter;
import org.killbill.commons.metrics.api.Meter;
diff --git a/metrics/src/main/java/org/killbill/commons/metrics/servlets/MetricsServlet.java b/metrics/src/main/java/org/killbill/commons/metrics/servlets/MetricsServlet.java
index 23a776e60..881a87de5 100644
--- a/metrics/src/main/java/org/killbill/commons/metrics/servlets/MetricsServlet.java
+++ b/metrics/src/main/java/org/killbill/commons/metrics/servlets/MetricsServlet.java
@@ -21,13 +21,13 @@
import java.io.OutputStream;
import java.util.concurrent.TimeUnit;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.killbill.commons.metrics.api.MetricRegistry;
import org.killbill.commons.metrics.impl.NoOpMetricRegistry;
diff --git a/metrics/src/main/java/org/killbill/commons/metrics/servlets/ThreadDumpServlet.java b/metrics/src/main/java/org/killbill/commons/metrics/servlets/ThreadDumpServlet.java
index 5eb265737..8c37ed217 100644
--- a/metrics/src/main/java/org/killbill/commons/metrics/servlets/ThreadDumpServlet.java
+++ b/metrics/src/main/java/org/killbill/commons/metrics/servlets/ThreadDumpServlet.java
@@ -29,9 +29,9 @@
import java.lang.management.ThreadMXBean;
import java.nio.charset.StandardCharsets;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
public class ThreadDumpServlet extends HttpServlet {
diff --git a/pom.xml b/pom.xml
index 30944dfe1..221064ce1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,9 +66,108 @@
true
+
+ 1.12.0
+
+ 7.0.0
+
+ 3.0.6
+
+ 2.13.4
+
+ 2.1.0
+
+ 2.1.1
+
+ 2.0.1
+
+ 5.0.0
+
+ 3.0.2
+
+ 3.0.0
+
+ 3.30.2-GA
+
+ 4.0.0
+
+ 4.0.0
+
+ 3.0.18
+
+ 11.0.24
+ 21
+
+ 4.9.8.3
+ -Xmx${build.jvmsize} --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED
+
+ com.fasterxml.jackson.jakarta.rs
+ jackson-jakarta-rs-json-provider
+ ${jackson.jakarta.rs.version}
+
+
+ com.google.inject
+ guice
+ ${guice.version}
+
+
+ com.google.inject.extensions
+ guice-servlet
+ ${guice.version}
+
+
+ jakarta.activation
+ jakarta.activation-api
+ ${jakarta.activation-api.version}
+
+
+ jakarta.inject
+ jakarta.inject-api
+ ${jakarta.inject-api.version}
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ ${jaxb-api.version}
+
+
+ org.eclipse.jetty
+ jetty-alpn-server
+ ${jetty.version}
+
+
+ org.eclipse.jetty.http2
+ http2-server
+ ${jetty.version}
+
+
+ org.eclipse.jetty.websocket
+ websocket-jetty-api
+ ${jetty.version}
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ ${jaxb-runtime.version}
+
+
+
+ com.sun.activation
+ jakarta.activation
+
+
+
+
+ org.javassist
+ javassist
+ ${javassist.version}
+
org.kill-bill.commons
killbill-automaton
@@ -182,4 +281,26 @@
+
+
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+ ${spotbugs-maven-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+
+
+
+ org.codehaus.mojo
+ extra-enforcer-rules
+ ${extra-enforcer-rules.version}
+
+
+
+
+
diff --git a/queue/pom.xml b/queue/pom.xml
index 5a3e56774..de0c3eecd 100644
--- a/queue/pom.xml
+++ b/queue/pom.xml
@@ -73,8 +73,8 @@
test
- javax.inject
- javax.inject
+ jakarta.inject
+ jakarta.inject-api
provided
diff --git a/queue/src/main/java/org/killbill/bus/DefaultPersistentBus.java b/queue/src/main/java/org/killbill/bus/DefaultPersistentBus.java
index c4b2e89bf..e2cace836 100644
--- a/queue/src/main/java/org/killbill/bus/DefaultPersistentBus.java
+++ b/queue/src/main/java/org/killbill/bus/DefaultPersistentBus.java
@@ -31,8 +31,8 @@
import java.util.stream.Collectors;
import javax.annotation.Nullable;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import javax.sql.DataSource;
import org.joda.time.DateTime;
diff --git a/queue/src/main/java/org/killbill/bus/InMemoryPersistentBus.java b/queue/src/main/java/org/killbill/bus/InMemoryPersistentBus.java
index 08b757c22..ecac067cb 100644
--- a/queue/src/main/java/org/killbill/bus/InMemoryPersistentBus.java
+++ b/queue/src/main/java/org/killbill/bus/InMemoryPersistentBus.java
@@ -23,7 +23,7 @@
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.joda.time.DateTime;
import org.killbill.bus.api.BusEvent;
diff --git a/queue/src/main/java/org/killbill/notificationq/DefaultNotificationQueueService.java b/queue/src/main/java/org/killbill/notificationq/DefaultNotificationQueueService.java
index a06af8234..19c3b3be2 100644
--- a/queue/src/main/java/org/killbill/notificationq/DefaultNotificationQueueService.java
+++ b/queue/src/main/java/org/killbill/notificationq/DefaultNotificationQueueService.java
@@ -22,8 +22,8 @@
import java.util.Map;
import java.util.Properties;
-import javax.inject.Inject;
-import javax.inject.Named;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
import javax.sql.DataSource;
import org.killbill.clock.Clock;
diff --git a/queue/src/test/java/org/killbill/notificationq/MockNotificationQueueService.java b/queue/src/test/java/org/killbill/notificationq/MockNotificationQueueService.java
index 2a6ea28bd..c981d6ad3 100644
--- a/queue/src/test/java/org/killbill/notificationq/MockNotificationQueueService.java
+++ b/queue/src/test/java/org/killbill/notificationq/MockNotificationQueueService.java
@@ -23,7 +23,7 @@
import java.util.ConcurrentModificationException;
import java.util.List;
-import javax.inject.Inject;
+import jakarta.inject.Inject;
import org.killbill.CreatorName;
import org.killbill.clock.Clock;
diff --git a/skeleton/pom.xml b/skeleton/pom.xml
index b48cd2a0f..ff8bd2a4c 100644
--- a/skeleton/pom.xml
+++ b/skeleton/pom.xml
@@ -50,8 +50,8 @@
test
- com.fasterxml.jackson.jaxrs
- jackson-jaxrs-json-provider
+ com.fasterxml.jackson.jakarta.rs
+ jackson-jakarta-rs-json-provider
true
@@ -73,6 +73,11 @@
metrics-core
test
+
+ jakarta.inject
+ jakarta.inject-api
+ provided
+
jakarta.servlet
jakarta.servlet-api
@@ -82,11 +87,6 @@
jakarta.ws.rs
jakarta.ws.rs-api
-
- javax.inject
- javax.inject
- provided
-
joda-time
joda-time
@@ -97,8 +97,8 @@
test
- org.eclipse.jetty.orbit
- javax.servlet
+ org.eclipse.jetty.toolchain
+ jetty-jakarta-servlet-api
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/GuiceServletContextListener.java b/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/GuiceServletContextListener.java
index 352e8047a..d06e48ebd 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/GuiceServletContextListener.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/GuiceServletContextListener.java
@@ -21,7 +21,7 @@
import java.util.List;
-import javax.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextEvent;
import org.killbill.commons.utils.Strings;
import org.slf4j.Logger;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/JULServletContextListener.java b/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/JULServletContextListener.java
index 5418c3324..410dc1103 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/JULServletContextListener.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/listeners/JULServletContextListener.java
@@ -23,8 +23,8 @@
import java.util.logging.LogManager;
import java.util.logging.Logger;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
import org.slf4j.bridge.SLF4JBridgeHandler;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/metrics/TimedResourceInterceptor.java b/skeleton/src/main/java/org/killbill/commons/skeleton/metrics/TimedResourceInterceptor.java
index d04410277..c605cddb4 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/metrics/TimedResourceInterceptor.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/metrics/TimedResourceInterceptor.java
@@ -27,9 +27,9 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.ExceptionMapper;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.ext.ExceptionMapper;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModule.java b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModule.java
index 886aba646..f69fb0d57 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModule.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModule.java
@@ -24,8 +24,8 @@
import java.util.Map;
import java.util.Map.Entry;
-import javax.servlet.Filter;
-import javax.servlet.http.HttpServlet;
+import jakarta.servlet.Filter;
+import jakarta.servlet.http.HttpServlet;
import com.google.inject.servlet.ServletModule;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModuleBuilder.java b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModuleBuilder.java
index 1baff8356..24d818179 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModuleBuilder.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/BaseServerModuleBuilder.java
@@ -24,8 +24,8 @@
import java.util.List;
import java.util.Map;
-import javax.servlet.Filter;
-import javax.servlet.http.HttpServlet;
+import jakarta.servlet.Filter;
+import jakarta.servlet.http.HttpServlet;
public class BaseServerModuleBuilder {
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/GuiceServletContainer.java b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/GuiceServletContainer.java
index 0552009f2..a41937566 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/GuiceServletContainer.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/GuiceServletContainer.java
@@ -19,10 +19,10 @@
import java.util.Set;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.servlet.ServletException;
-import javax.ws.rs.ext.MessageBodyWriter;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+import jakarta.servlet.ServletException;
+import jakarta.ws.rs.ext.MessageBodyWriter;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
@@ -37,7 +37,7 @@
import org.killbill.commons.utils.Strings;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider;
import com.google.inject.Injector;
import com.google.inject.TypeLiteral;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/JerseyBaseServerModule.java b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/JerseyBaseServerModule.java
index 86e1d0487..51eec70a8 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/JerseyBaseServerModule.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/JerseyBaseServerModule.java
@@ -26,8 +26,8 @@
import java.util.Map.Entry;
import java.util.Objects;
-import javax.servlet.Filter;
-import javax.servlet.http.HttpServlet;
+import jakarta.servlet.Filter;
+import jakarta.servlet.http.HttpServlet;
import org.glassfish.jersey.server.ServerProperties;
import org.killbill.commons.utils.Joiner;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/TimedInterceptionService.java b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/TimedInterceptionService.java
index 8b7077d9c..842a33629 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/modules/TimedInterceptionService.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/modules/TimedInterceptionService.java
@@ -24,9 +24,9 @@
import java.util.List;
import java.util.Set;
-import javax.inject.Singleton;
-import javax.ws.rs.HttpMethod;
-import javax.ws.rs.Path;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.HttpMethod;
+import jakarta.ws.rs.Path;
import org.aopalliance.intercept.ConstructorInterceptor;
import org.aopalliance.intercept.MethodInterceptor;
diff --git a/skeleton/src/main/java/org/killbill/commons/skeleton/servlets/LogInvalidResourcesServlet.java b/skeleton/src/main/java/org/killbill/commons/skeleton/servlets/LogInvalidResourcesServlet.java
index 552f12e60..c06717aad 100644
--- a/skeleton/src/main/java/org/killbill/commons/skeleton/servlets/LogInvalidResourcesServlet.java
+++ b/skeleton/src/main/java/org/killbill/commons/skeleton/servlets/LogInvalidResourcesServlet.java
@@ -21,10 +21,10 @@
import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/metrics/TestTimedResourceInterceptor.java b/skeleton/src/test/java/org/killbill/commons/skeleton/metrics/TestTimedResourceInterceptor.java
index 3b9928eff..ca2e512e8 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/metrics/TestTimedResourceInterceptor.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/metrics/TestTimedResourceInterceptor.java
@@ -24,11 +24,11 @@
import java.util.List;
import java.util.Set;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Response;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Response;
import org.aopalliance.intercept.MethodInterceptor;
import org.glassfish.hk2.api.InterceptionService;
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/AbstractBaseServerModuleTest.java b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/AbstractBaseServerModuleTest.java
index 36a814878..e692f41f6 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/AbstractBaseServerModuleTest.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/AbstractBaseServerModuleTest.java
@@ -22,7 +22,7 @@
import java.io.IOException;
import java.net.ServerSocket;
-import javax.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextEvent;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloFilter.java b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloFilter.java
index d07061184..aa00391e9 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloFilter.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloFilter.java
@@ -19,12 +19,12 @@
import java.io.IOException;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.container.ContainerResponseContext;
-import javax.ws.rs.container.ContainerResponseFilter;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.container.ContainerRequestContext;
+import jakarta.ws.rs.container.ContainerRequestFilter;
+import jakarta.ws.rs.container.ContainerResponseContext;
+import jakarta.ws.rs.container.ContainerResponseFilter;
import org.testng.Assert;
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloResource.java b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloResource.java
index 2a75fe399..033c58ba7 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloResource.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/HelloResource.java
@@ -21,13 +21,13 @@
import java.util.Map;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
import org.joda.time.LocalDate;
import org.killbill.commons.metrics.api.annotation.TimedResource;
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/SomeGuiceyDependency.java b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/SomeGuiceyDependency.java
index 32ba4c5ca..5d44e4a4b 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/SomeGuiceyDependency.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/SomeGuiceyDependency.java
@@ -17,7 +17,7 @@
package org.killbill.commons.skeleton.modules;
-import javax.inject.Singleton;
+import jakarta.inject.Singleton;
@Singleton
public class SomeGuiceyDependency {
diff --git a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/TestJerseyBaseServerModule.java b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/TestJerseyBaseServerModule.java
index 6183755f8..a265a23fd 100644
--- a/skeleton/src/test/java/org/killbill/commons/skeleton/modules/TestJerseyBaseServerModule.java
+++ b/skeleton/src/test/java/org/killbill/commons/skeleton/modules/TestJerseyBaseServerModule.java
@@ -42,7 +42,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.joda.JodaModule;
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
diff --git a/utils/src/test/java/org/killbill/commons/utils/TestTypeToken.java b/utils/src/test/java/org/killbill/commons/utils/TestTypeToken.java
index 50b3a2cca..0bd8baeb3 100644
--- a/utils/src/test/java/org/killbill/commons/utils/TestTypeToken.java
+++ b/utils/src/test/java/org/killbill/commons/utils/TestTypeToken.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -35,17 +36,51 @@ public void testGetRawTypes() {
Assert.assertEquals(types.size(), 1);
types = TypeToken.getRawTypes(Integer.class);
- // class java.lang.Integer, interface java.lang.Comparable, class java.lang.Number, interface java.io.Serializable, class java.lang.Object
- // FIXME-1615 : JDK 11 and JDK 17 produce different result.
- // Assert.assertEquals(types.size(), 5);
+ final Set> integerExpected = new LinkedHashSet<>();
+ integerExpected.add(Integer.class);
+ integerExpected.add(Comparable.class);
+ addIfPresent(integerExpected, "java.lang.constant.Constable");
+ addIfPresent(integerExpected, "java.lang.constant.ConstantDesc");
+ integerExpected.add(Number.class);
+ integerExpected.add(java.io.Serializable.class);
+ integerExpected.add(Object.class);
+ Assert.assertEquals(types, integerExpected);
// Guava version: com.google.common.reflect.TypeToken.of(SuperList.class).getTypes().rawTypes() . Size = 11.
types = TypeToken.getRawTypes(SuperList.class);
- Assert.assertEquals(types.size(), 11);
+ final Set> expected = new LinkedHashSet<>();
+ expected.add(SuperList.class);
+ expected.add(ArrayList.class);
+ expected.add(List.class);
+ addIfPresent(expected, "java.util.SequencedCollection");
+ expected.add(Collection.class);
+ expected.add(Iterable.class);
+ expected.add(java.util.RandomAccess.class);
+ expected.add(Cloneable.class);
+ expected.add(java.io.Serializable.class);
+ expected.add(java.util.AbstractList.class);
+ expected.add(java.util.AbstractCollection.class);
+ expected.add(Object.class);
+ Assert.assertEquals(types, expected);
types = TypeToken.getRawTypes(String.class);
- // class java.lang.String, interface java.lang.Comparable, interface java.io.Serializable, interface java.lang.CharSequence, class java.lang.Object
- // FIXME-1615 : JDK 11 and JDK 17 produce different result.
- // Assert.assertEquals(types.size(), 5);
+ final Set> stringExpected = new LinkedHashSet<>();
+ stringExpected.add(String.class);
+ stringExpected.add(java.io.Serializable.class);
+ stringExpected.add(Comparable.class);
+ stringExpected.add(CharSequence.class);
+ addIfPresent(stringExpected, "java.lang.constant.Constable");
+ addIfPresent(stringExpected, "java.lang.constant.ConstantDesc");
+ stringExpected.add(Object.class);
+ Assert.assertEquals(types, stringExpected);
+ }
+
+ // Newer JDKs add interfaces such as SequencedCollection/Constable/ConstantDesc, so the test
+ // builds the exact expected set while remaining compatible with earlier runtimes that lack them.
+ private void addIfPresent(final Set> types, final String className) {
+ try {
+ types.add(Class.forName(className));
+ } catch (final ClassNotFoundException ignored) {
+ }
}
}
diff --git a/xmlloader/src/main/java/org/killbill/xmlloader/ValidatingConfig.java b/xmlloader/src/main/java/org/killbill/xmlloader/ValidatingConfig.java
index d91243cac..699e37bf1 100644
--- a/xmlloader/src/main/java/org/killbill/xmlloader/ValidatingConfig.java
+++ b/xmlloader/src/main/java/org/killbill/xmlloader/ValidatingConfig.java
@@ -19,8 +19,8 @@
package org.killbill.xmlloader;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.NONE)
public abstract class ValidatingConfig {
diff --git a/xmlloader/src/main/java/org/killbill/xmlloader/XMLLoader.java b/xmlloader/src/main/java/org/killbill/xmlloader/XMLLoader.java
index 652b72847..a72019263 100644
--- a/xmlloader/src/main/java/org/killbill/xmlloader/XMLLoader.java
+++ b/xmlloader/src/main/java/org/killbill/xmlloader/XMLLoader.java
@@ -24,9 +24,9 @@
import java.net.URI;
import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.Unmarshaller;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
diff --git a/xmlloader/src/main/java/org/killbill/xmlloader/XMLSchemaGenerator.java b/xmlloader/src/main/java/org/killbill/xmlloader/XMLSchemaGenerator.java
index cd223529d..2986918bd 100644
--- a/xmlloader/src/main/java/org/killbill/xmlloader/XMLSchemaGenerator.java
+++ b/xmlloader/src/main/java/org/killbill/xmlloader/XMLSchemaGenerator.java
@@ -29,9 +29,9 @@
import java.util.ArrayList;
import java.util.List;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.SchemaOutputResolver;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import jakarta.xml.bind.SchemaOutputResolver;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
diff --git a/xmlloader/src/main/java/org/killbill/xmlloader/XMLWriter.java b/xmlloader/src/main/java/org/killbill/xmlloader/XMLWriter.java
index 888aaed29..5dcdace5a 100644
--- a/xmlloader/src/main/java/org/killbill/xmlloader/XMLWriter.java
+++ b/xmlloader/src/main/java/org/killbill/xmlloader/XMLWriter.java
@@ -21,8 +21,8 @@
import java.io.ByteArrayOutputStream;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.Marshaller;
import static java.nio.charset.StandardCharsets.UTF_8;
diff --git a/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLLoader.java b/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLLoader.java
index 4c7d7efd6..dfc6ab305 100644
--- a/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLLoader.java
+++ b/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLLoader.java
@@ -23,7 +23,7 @@
import java.io.IOException;
import java.io.InputStream;
-import javax.xml.bind.JAXBException;
+import jakarta.xml.bind.JAXBException;
import javax.xml.transform.TransformerException;
import org.testng.annotations.Test;
diff --git a/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLSchemaGenerator.java b/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLSchemaGenerator.java
index 14eb783b1..8645d3289 100644
--- a/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLSchemaGenerator.java
+++ b/xmlloader/src/test/java/org/killbill/xmlloader/TestXMLSchemaGenerator.java
@@ -23,7 +23,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
-import javax.xml.bind.JAXBException;
+import jakarta.xml.bind.JAXBException;
import javax.xml.transform.TransformerException;
import org.killbill.commons.utils.io.CharStreams;
diff --git a/xmlloader/src/test/java/org/killbill/xmlloader/XmlTestClass.java b/xmlloader/src/test/java/org/killbill/xmlloader/XmlTestClass.java
index 4f78f2637..cde28f1c8 100644
--- a/xmlloader/src/test/java/org/killbill/xmlloader/XmlTestClass.java
+++ b/xmlloader/src/test/java/org/killbill/xmlloader/XmlTestClass.java
@@ -19,9 +19,9 @@
package org.killbill.xmlloader;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)