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)