Skip to content

Migrate to Java 25 LTS - #78

Merged
mmanes merged 1 commit into
FusionAuth:mainfrom
ribhav-pahuja:migrate-java-25
Jul 15, 2026
Merged

mmanes merged 1 commit into
FusionAuth:mainfrom
ribhav-pahuja:migrate-java-25

Conversation

@ribhav-pahuja

Copy link
Copy Markdown

Summary

  • Raise the minimum Java version from 17 to Java 25 LTS and bump the library to 7.0.0.
  • Update Maven (release 25), Savant, GitHub Actions, and IntelliJ project settings.
  • Rely on the default JCA for SHAKE256 (available on Java 25+), so Ed448 OpenID Connect at_hash / c_hash no longer require a third-party provider such as Bouncy Castle.
  • Replace deprecated new URL(String) usage with URI.create(...).toURL().

Test plan

  • mvn clean verify (default JCA + FIPS surefire executions)
  • Confirmed bytecode major version 69 (Java 25)
  • CI green on GitHub Actions with Temurin 25

Bump the library to 7.0.0 and target Java 25 across Maven, Savant,
GitHub Actions, and IntelliJ settings. SHAKE256 is available in the
default JCA on Java 25+, so Ed448 OpenID Connect at_hash/c_hash no
longer requires a third-party provider. Also replace deprecated
URL(String) usage with URI.create(...).toURL().
@ribhav-pahuja
ribhav-pahuja requested a review from a team as a code owner July 12, 2026 19:38
@hjaret
hjaret requested a review from Copilot July 14, 2026 21:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR upgrades the library’s baseline runtime/tooling to Java 25 LTS (major version bump to 7.0.0), and aligns cryptography and networking code with the newer JDK (notably relying on JDK-provided SHAKE256 and replacing new URL(String) usage).

Changes:

  • Bump project/library version to 7.0.0 and raise the compiler baseline to Java 25 (Maven release=25, Savant, GitHub Actions, IntelliJ config).
  • Update OIDC Ed448 at_hash / c_hash expectations to rely on default-JCA SHAKE256 (removing prior “requires FIPS/provider” guard in tests and updating docs/comments).
  • Replace new URL(String) with URI.create(...).toURL() in test and HTTP helper call sites (including improved exception handling for invalid endpoints).

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/test/java/io/fusionauth/oauth2/ServerMetaDataTest.java Switch URL construction to URI.create(...).toURL() for test connection creation.
src/test/java/io/fusionauth/jwt/OpenIdConnectTest.java Remove SHAKE256 “requires provider” test wrapper; assert Ed448 hashes directly under Java 25.
src/test/java/io/fusionauth/jwks/JSONWebKeySetHelperTest.java Switch URL construction to URI.create(...).toURL() for HTTPS connection creation.
src/main/java/io/fusionauth/jwt/OpenIDConnect.java Update Ed448 SHAKE256 comment to reflect Java 25 default JCA availability.
src/main/java/io/fusionauth/http/AbstractHttpHelper.java Replace new URL(...) with URI.create(...).toURL() and catch IllegalArgumentException for invalid endpoints.
README.md Update Ed448 SHAKE256 guidance and bump dependency coordinates to 7.0.0.
pom.xml Bump to 7.0.0, set compiler release to 25, add/update compiler & surefire plugin versions.
fusionauth-jwt.ipr Update IntelliJ project language level/JDK to 25.
CHANGES Add 7.0.0 release notes for Java 25 + SHAKE256 change.
build.savant Update version to 7.0.0 and Java settings to 25.
.github/workflows/test.yml Run CI on Temurin 25.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main/java/io/fusionauth/http/AbstractHttpHelper.java
Comment thread README.md
Comment thread build.savant
dependency(id: "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}")
}
group(name: "test-compile", export: false) {
dependency(id: "org.bouncycastle:bc-fips:2.1.2")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we remove the BC dependency now?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought we needed it for FIPS?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems a bit unnecessary to test both BC and JCE here vs in a final product, but the tests exercise them both, so we can leave the dep in.

Comment thread build.savant
dependency(id: "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}")
}
group(name: "test-compile", export: false) {
dependency(id: "org.bouncycastle:bc-fips:2.1.2")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems a bit unnecessary to test both BC and JCE here vs in a final product, but the tests exercise them both, so we can leave the dep in.

@mmanes
mmanes merged commit 1c82711 into FusionAuth:main Jul 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants