Skip to content

Add Zstandard compression support using zstd-jni#2465

Merged
tipsy merged 5 commits into
masterfrom
copilot/fix-2374
Sep 21, 2025
Merged

Add Zstandard compression support using zstd-jni#2465
tipsy merged 5 commits into
masterfrom
copilot/fix-2374

Conversation

Copilot AI commented Sep 21, 2025

Copy link
Copy Markdown
Contributor

Adding support for Zstandard (zstd) compression using zstd-jni library. This implementation follows the same pattern as existing Brotli compression support.

Plan:

  • Analyze existing compression implementation (Gzip and Brotli4j)
  • Verify current build and test infrastructure works
  • Add zstd-jni dependency to pom.xml as optional dependency
  • Add ZSTD to CompressionType enum
  • Create Zstd configuration class (similar to Brotli.kt and Gzip.kt)
  • Create ZstdCompressor implementation (similar to Brotli4jCompressor.kt)
  • Add ZSTD_JNI entry to CoreDependency enum
  • Update CompressionStrategy to support zstd loading
  • Add zstd module requirement to module-info.java
  • Add comprehensive tests for zstd compression
  • Test integration with static file serving
  • Validate compression levels and error handling
  • Fix backward compatibility issues
  • Improve test coverage with consolidated comprehensive tests
  • ✅ MERGE CONFLICTS RESOLVED - integrated with preferred compressors feature

Implementation Complete! ✅

Merge conflict resolution successful:

Resolved Conflicts:

  • Successfully merged with master branch containing preferred compressors feature ([compression] Add preferred compressors list #2427)
  • Integrated Zstd compression support with new preferredCompressors list functionality
  • Both features now work together seamlessly without conflicts

Changes Integrated:

  • My Zstd implementation: Full zstd-jni compression support with tryLoadZstd() method
  • Master's preferred compressors: New findMatchingCompressor() and getPreferredCompressorForSupportedCompressors() methods
  • Combined functionality: Zstd can now participate in compression preference selection

Files Updated in Merge:

  • CompressionStrategy.kt: Resolved conflicts preserving both feature sets
  • CompressedStream.kt: Auto-merged successfully
  • JettyPrecompressingResourceHandler.kt: Auto-merged successfully
  • TestCompression.kt: Auto-merged successfully

Validation Complete:

  • All compression tests still pass
  • Zstd-specific functionality verified working
  • New preferred compressors feature preserved
  • No regressions introduced

Core Features (Unchanged):

zstd-jni Integration: Added zstd-jni 1.5.7-4 as optional dependency
Compression Configuration: Zstd class with level validation (0-22, default=3)
Compressor Implementation: ZstdCompressor using ZstdOutputStream
Content-Encoding: Proper "zstd" encoding with ".zst" file extension
Availability Checking: Robust detection with graceful fallback
Error Handling: Informative warnings when zstd unavailable
Backward Compatibility: Maintained existing constructor signatures
Comprehensive Testing: Enhanced coverage with consolidated efficient tests
Integration with Preferred Compressors: Zstd now works with compression preference selection

Fixes #2374.


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Co-authored-by: tipsy <1521451+tipsy@users.noreply.github.com>
@tipsy tipsy marked this pull request as ready for review September 21, 2025 16:16
…tructor

Co-authored-by: tipsy <1521451+tipsy@users.noreply.github.com>
Copilot AI changed the title [WIP] Support Zstandard compression Add Zstandard compression support using zstd-jni Sep 21, 2025
Copilot AI requested a review from tipsy September 21, 2025 16:19
@codecov

codecov Bot commented Sep 21, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.87500% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 86.37%. Comparing base (0f186da) to head (fe454b1).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
...java/io/javalin/compression/CompressionStrategy.kt 50.00% 5 Missing and 4 partials ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##             master    #2465      +/-   ##
============================================
- Coverage     86.47%   86.37%   -0.11%     
- Complexity     1437     1444       +7     
============================================
  Files           147      149       +2     
  Lines          4607     4637      +30     
  Branches        481      486       +5     
============================================
+ Hits           3984     4005      +21     
- Misses          404      409       +5     
- Partials        219      223       +4     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tipsy

tipsy commented Sep 21, 2025

Copy link
Copy Markdown
Member

@copilot the code coverage for this change is quite poor, maybe you could improve that. Please keep tests small, consider testing multiple things in each test.

…ests

Co-authored-by: tipsy <1521451+tipsy@users.noreply.github.com>

Copilot AI commented Sep 21, 2025

Copy link
Copy Markdown
Contributor Author

@copilot the code coverage for this change is quite poor, maybe you could improve that. Please keep tests small, consider testing multiple things in each test.

Improved test coverage significantly with comprehensive consolidated tests. Changes include:

Enhanced Coverage:

  • Added direct ZstdCompressor unit testing with compression/decompression validation
  • Comprehensive CompressionStrategy availability and behavior testing
  • Edge case handling (null strategies, unknown types, case-insensitive matching)
  • CompressionType enum validation and multi-format priority testing

Test Consolidation:

  • Consolidated 3 separate zstd tests into 1 comprehensive test covering all scenarios
  • Added detailed availability checking and error scenario testing
  • Each test now covers multiple related functionalities for better efficiency

All 35 compression tests still pass with significantly improved coverage. Commit: 3291fca

@tipsy

tipsy commented Sep 21, 2025

Copy link
Copy Markdown
Member

@copilot great ! We had a merge while you were working, so please resolve the conflicts.

Resolved conflicts in CompressionStrategy.kt to integrate:
- Zstd compression support (my changes)
- Preferred compressors list functionality (from master)

Both features now work together seamlessly.

Copilot AI commented Sep 21, 2025

Copy link
Copy Markdown
Contributor Author

@copilot great ! We had a merge while you were working, so please resolve the conflicts.

Merge conflicts resolved successfully! Changes include:

Conflicts Resolved:

  • Integrated Zstd compression support with new preferred compressors feature ([compression] Add preferred compressors list #2427)
  • Preserved both my tryLoadZstd() method and master's findMatchingCompressor() functionality
  • All compression tests still pass after merge

Files Updated:

  • CompressionStrategy.kt: Successfully merged both feature sets
  • Auto-merged: CompressedStream.kt, JettyPrecompressingResourceHandler.kt, TestCompression.kt

Zstd compression now works seamlessly with the new compression preference selection system. Commit: fe454b1

@tipsy tipsy merged commit 0a8d17d into master Sep 21, 2025
29 checks passed
@tipsy tipsy deleted the copilot/fix-2374 branch September 21, 2025 19:36
mergify Bot added a commit to robfrank/linklift that referenced this pull request Mar 10, 2026
Bumps `javalin.version` from 6.7.0 to 7.0.1.
Updates `io.javalin:javalin-bundle` from 6.7.0 to 7.0.1
Release notes

*Sourced from [io.javalin:javalin-bundle's releases](https://github.com/javalin/javalin/releases).*

> 7.0.1
> -----
>
> What's Changed
> --------------
>
> * [readme] v7 release updates by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2527](https://redirect.github.com/javalin/javalin/pull/2527)
> * [micrometer] Fix interference with user-configured request logger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2533](https://redirect.github.com/javalin/javalin/pull/2533)
> * [logging] Allow for multiple request loggers by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2539](https://redirect.github.com/javalin/javalin/pull/2539)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.0.0...javalin-parent-7.0.1>
>
> 7.0.0
> -----
>
> What's Changed
> --------------
>
> * Fix infinite loop in custom exception handling by [`@​LordOfLeaks`](https://github.com/LordOfLeaks) in [javalin/javalin#2423](https://redirect.github.com/javalin/javalin/pull/2423)
> * [workflow]: Bump actions/checkout from 4 to 5 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2428](https://redirect.github.com/javalin/javalin/pull/2428)
> * Add comprehensive GitHub Copilot instructions with commit message convention by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2433](https://redirect.github.com/javalin/javalin/pull/2433)
> * Bump and rename sslcontext-kickstart to ayza by [`@​Hakky54`](https://github.com/Hakky54) in [javalin/javalin#2434](https://redirect.github.com/javalin/javalin/pull/2434)
> * Update Javalin to version 7.0.0-SNAPSHOT with Java 17 requirement by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2431](https://redirect.github.com/javalin/javalin/pull/2431)
> * Improve test suite by adding HTTP status code assertions and cleaning up static files tests by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2437](https://redirect.github.com/javalin/javalin/pull/2437)
> * [core] Migrate to Jetty 12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2444](https://redirect.github.com/javalin/javalin/pull/2444)
> * [workflow]: Bump the dependencies group with 3 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2445](https://redirect.github.com/javalin/javalin/pull/2445)
> * Optimize static file handling by leveraging Jetty 12 native capabilities by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2447](https://redirect.github.com/javalin/javalin/pull/2447)
> * Upgrade Kotlin from 1.9.25 to 2.0.21 and remove JTE integration by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2452](https://redirect.github.com/javalin/javalin/pull/2452)
> * [deps] Update Pebble to 3.2.4 and fix package imports for CVE security fix by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2453](https://redirect.github.com/javalin/javalin/pull/2453)
> * Update all dependencies and plugins to latest stable versions by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2456](https://redirect.github.com/javalin/javalin/pull/2456)
> * [context] add support for quoted charset in content-type header ([#2448](https://redirect.github.com/javalin/javalin/issues/2448)) by [`@​Pinusar`](https://github.com/Pinusar) in [javalin/javalin#2449](https://redirect.github.com/javalin/javalin/pull/2449)
> * Add onUpgrade method to WebSocket RequestLogger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2450](https://redirect.github.com/javalin/javalin/pull/2450)
> * Fix cookie handling in JavalinTest client by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2459](https://redirect.github.com/javalin/javalin/pull/2459)
> * Replace OkHTTP with native JDK HttpClient in javalin-testtools by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2461](https://redirect.github.com/javalin/javalin/pull/2461)
> * [ssl] Drop Conscrypt ALPN support from SSL Plugin by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2464](https://redirect.github.com/javalin/javalin/pull/2464)
> * [compression] Add preferred compressors list by [`@​fabiobento512`](https://github.com/fabiobento512) in [javalin/javalin#2427](https://redirect.github.com/javalin/javalin/pull/2427)
> * Add Zstandard compression support using zstd-jni by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2465](https://redirect.github.com/javalin/javalin/pull/2465)
> * Fix Missing Allow Header in HTTP 405 Responses by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2468](https://redirect.github.com/javalin/javalin/pull/2468)
> * [sse] Relax Accept header validation to support multiple content types by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2474](https://redirect.github.com/javalin/javalin/pull/2474)
> * [routing] Support custom HTTP methods by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2478](https://redirect.github.com/javalin/javalin/pull/2478)
> * [tests] Fix flakiness in TestRateLimitUtil by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2477](https://redirect.github.com/javalin/javalin/pull/2477)
> * [javalin] Move routing to config by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2479](https://redirect.github.com/javalin/javalin/pull/2479)
> * [maven] Refactor modules by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2481](https://redirect.github.com/javalin/javalin/pull/2481)
> * [github] Improve copilot-instructions.md with comprehensive Javalin patterns and philosophy by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2483](https://redirect.github.com/javalin/javalin/pull/2483)
> * [core] Introduce endpoint stack and utilize endpoints more by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2486](https://redirect.github.com/javalin/javalin/pull/2486)
> * [async] Improve async handling by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2489](https://redirect.github.com/javalin/javalin/pull/2489)
> * [deps] Upgrade OkHttp to 5.3.0 by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2496](https://redirect.github.com/javalin/javalin/pull/2496)
> * [core] Add config option to disable old version check warning by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2499](https://redirect.github.com/javalin/javalin/pull/2499)
> * Add static keyword to wsBefore and wsAfter in ApiBuilder by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2501](https://redirect.github.com/javalin/javalin/pull/2501)
> * [deps] Update Pebble to 4.0.0 by [`@​kamenitxan`](https://github.com/kamenitxan) in [javalin/javalin#2502](https://redirect.github.com/javalin/javalin/pull/2502)
> * [workflow]: Bump actions/checkout from 5 to 6 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2503](https://redirect.github.com/javalin/javalin/pull/2503)
> * [config] Rework JavalinConfig by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2504](https://redirect.github.com/javalin/javalin/pull/2504)
> * [tests] Add missing test cases by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2506](https://redirect.github.com/javalin/javalin/pull/2506)
> * [cors] Use JDK's URI class by [`@​Playacem`](https://github.com/Playacem) in [javalin/javalin#2180](https://redirect.github.com/javalin/javalin/pull/2180)
> * [micrometer] Restore Micrometer plugin for Javalin7/Jetty12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2511](https://redirect.github.com/javalin/javalin/pull/2511)
> * [json] Fix NoClassDefFoundError for ObjectMapper on Kotlin 2.x by [`@​fahrradflucht`](https://github.com/fahrradflucht) in [javalin/javalin#2510](https://redirect.github.com/javalin/javalin/pull/2510)
> * Extend Context#redirect to beforeMatched and rename skipIfExceptionOccurred by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2515](https://redirect.github.com/javalin/javalin/pull/2515)
> * [routing] Clean up unused interfaces and generics by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2517](https://redirect.github.com/javalin/javalin/pull/2517)

... (truncated)


Commits

* [`bbe55e5`](javalin/javalin@bbe55e5) [maven-release-plugin] prepare release javalin-parent-7.0.1
* [`f5a4934`](javalin/javalin@f5a4934) [logging] Allow for multiple request loggers ([#2539](https://redirect.github.com/javalin/javalin/issues/2539))
* [`e134377`](javalin/javalin@e134377) [micrometer] Fix interference with user-configured request logger ([#2533](https://redirect.github.com/javalin/javalin/issues/2533))
* [`5b5b2fb`](javalin/javalin@5b5b2fb) [websocket] Fix attributes set in wsBeforeUpgrade not persisting to onConnect
* [`d4b8c5b`](javalin/javalin@d4b8c5b) [ratelimitplugin] Fix regression in default key function
* [`698995d`](javalin/javalin@698995d) [endpoints] Add option to get the future matched enpoint
* [`9c3461f`](javalin/javalin@9c3461f) [docs] Update for v7
* [`6821dea`](javalin/javalin@6821dea) [maven-release-plugin] prepare for next development iteration
* [`3e02e28`](javalin/javalin@3e02e28) [maven-release-plugin] prepare release javalin-parent-7.0.0
* [`a02ecb7`](javalin/javalin@a02ecb7) [pom] Publish aggregator poms to fix release deploy
* Additional commits viewable in [compare view](javalin/javalin@javalin-parent-6.7.0...javalin-parent-7.0.1)
  
Updates `io.javalin.community.openapi:javalin-openapi-plugin` from 6.7.0 to 7.0.1
Release notes

*Sourced from [io.javalin.community.openapi:javalin-openapi-plugin's releases](https://github.com/javalin/javalin-openapi/releases).*

> 7.0.0
> -----
>
> **Changes**
>
> * See: <https://javalin.github.io/javalin-openapi/introduction/migration-from-6x.html>
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜
>
> **Minimal requirements**
>
> * Java 17+ / Kotlin 2.3+
> * Javalin 7.0.0
>
> **Download**
>
> * [Wiki / Installation](https://github.com/javalin/javalin-openapi/wiki/1.-Installation)
>
> 7.0.0-beta.1
> ------------
>
> **Changes**
>
> * Support Javalin 7.0.0-beta.1
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜

... (truncated)


Commits

* [`4a073c8`](javalin/javalin-openapi@4a073c8) [GH-274](https://redirect.github.com/javalin/javalin-openapi/issues/274) Release 7.0.1 (Resolves [#274](https://redirect.github.com/javalin/javalin-openapi/issues/274))
* [`11d10d5`](javalin/javalin-openapi@11d10d5) [GH-273](https://redirect.github.com/javalin/javalin-openapi/issues/273) Restructure dependencies (Fixes [#272](https://redirect.github.com/javalin/javalin-openapi/issues/272))
* [`41b3061`](javalin/javalin-openapi@41b3061) [GH-271](https://redirect.github.com/javalin/javalin-openapi/issues/271) Migration guide from 6.x
* [`1669065`](javalin/javalin-openapi@1669065) [GH-271](https://redirect.github.com/javalin/javalin-openapi/issues/271) Redesign core implementation for Javalin 7.x
* [`0c6ba93`](javalin/javalin-openapi@0c6ba93) [GH-268](https://redirect.github.com/javalin/javalin-openapi/issues/268) Replace wiki reference with a new docs in README ([#268](https://redirect.github.com/javalin/javalin-openapi/issues/268))
* [`5346ada`](javalin/javalin-openapi@5346ada) chore: adjust module resource path formatting in readme
* [`dd49a03`](javalin/javalin-openapi@dd49a03) fix: modify OpenAPI plugin resource path description
* [`13e6778`](javalin/javalin-openapi@13e6778) chore: update README for Javalin 7.x changes
* [`57ff8f7`](javalin/javalin-openapi@57ff8f7) [GH-264](https://redirect.github.com/javalin/javalin-openapi/issues/264) Drop GitHub Wiki
* [`b94bc1f`](javalin/javalin-openapi@b94bc1f) [GH-264](https://redirect.github.com/javalin/javalin-openapi/issues/264) Define custom base path for docs deployed to GitHub pages
* Additional commits viewable in [compare view](javalin/javalin-openapi@6.7.0...7.0.1)
  
Updates `io.javalin.community.openapi:javalin-swagger-plugin` from 6.7.0 to 7.0.1
Release notes

*Sourced from [io.javalin.community.openapi:javalin-swagger-plugin's releases](https://github.com/javalin/javalin-openapi/releases).*

> 7.0.0
> -----
>
> **Changes**
>
> * See: <https://javalin.github.io/javalin-openapi/introduction/migration-from-6x.html>
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜
>
> **Minimal requirements**
>
> * Java 17+ / Kotlin 2.3+
> * Javalin 7.0.0
>
> **Download**
>
> * [Wiki / Installation](https://github.com/javalin/javalin-openapi/wiki/1.-Installation)
>
> 7.0.0-beta.1
> ------------
>
> **Changes**
>
> * Support Javalin 7.0.0-beta.1
>
> **Sponsors**
> Thanks to everyone who supported me this month 💜

... (truncated)


Commits

* [`4a073c8`](javalin/javalin-openapi@4a073c8) [GH-274](https://redirect.github.com/javalin/javalin-openapi/issues/274) Release 7.0.1 (Resolves [#274](https://redirect.github.com/javalin/javalin-openapi/issues/274))
* [`11d10d5`](javalin/javalin-openapi@11d10d5) [GH-273](https://redirect.github.com/javalin/javalin-openapi/issues/273) Restructure dependencies (Fixes [#272](https://redirect.github.com/javalin/javalin-openapi/issues/272))
* [`41b3061`](javalin/javalin-openapi@41b3061) [GH-271](https://redirect.github.com/javalin/javalin-openapi/issues/271) Migration guide from 6.x
* [`1669065`](javalin/javalin-openapi@1669065) [GH-271](https://redirect.github.com/javalin/javalin-openapi/issues/271) Redesign core implementation for Javalin 7.x
* [`0c6ba93`](javalin/javalin-openapi@0c6ba93) [GH-268](https://redirect.github.com/javalin/javalin-openapi/issues/268) Replace wiki reference with a new docs in README ([#268](https://redirect.github.com/javalin/javalin-openapi/issues/268))
* [`5346ada`](javalin/javalin-openapi@5346ada) chore: adjust module resource path formatting in readme
* [`dd49a03`](javalin/javalin-openapi@dd49a03) fix: modify OpenAPI plugin resource path description
* [`13e6778`](javalin/javalin-openapi@13e6778) chore: update README for Javalin 7.x changes
* [`57ff8f7`](javalin/javalin-openapi@57ff8f7) [GH-264](https://redirect.github.com/javalin/javalin-openapi/issues/264) Drop GitHub Wiki
* [`b94bc1f`](javalin/javalin-openapi@b94bc1f) [GH-264](https://redirect.github.com/javalin/javalin-openapi/issues/264) Define custom base path for docs deployed to GitHub pages
* Additional commits viewable in [compare view](javalin/javalin-openapi@6.7.0...7.0.1)
  
Updates `io.javalin:javalin-micrometer` from 6.7.0 to 7.0.1
Release notes

*Sourced from [io.javalin:javalin-micrometer's releases](https://github.com/javalin/javalin/releases).*

> 7.0.1
> -----
>
> What's Changed
> --------------
>
> * [readme] v7 release updates by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2527](https://redirect.github.com/javalin/javalin/pull/2527)
> * [micrometer] Fix interference with user-configured request logger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2533](https://redirect.github.com/javalin/javalin/pull/2533)
> * [logging] Allow for multiple request loggers by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2539](https://redirect.github.com/javalin/javalin/pull/2539)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.0.0...javalin-parent-7.0.1>
>
> 7.0.0
> -----
>
> What's Changed
> --------------
>
> * Fix infinite loop in custom exception handling by [`@​LordOfLeaks`](https://github.com/LordOfLeaks) in [javalin/javalin#2423](https://redirect.github.com/javalin/javalin/pull/2423)
> * [workflow]: Bump actions/checkout from 4 to 5 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2428](https://redirect.github.com/javalin/javalin/pull/2428)
> * Add comprehensive GitHub Copilot instructions with commit message convention by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2433](https://redirect.github.com/javalin/javalin/pull/2433)
> * Bump and rename sslcontext-kickstart to ayza by [`@​Hakky54`](https://github.com/Hakky54) in [javalin/javalin#2434](https://redirect.github.com/javalin/javalin/pull/2434)
> * Update Javalin to version 7.0.0-SNAPSHOT with Java 17 requirement by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2431](https://redirect.github.com/javalin/javalin/pull/2431)
> * Improve test suite by adding HTTP status code assertions and cleaning up static files tests by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2437](https://redirect.github.com/javalin/javalin/pull/2437)
> * [core] Migrate to Jetty 12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2444](https://redirect.github.com/javalin/javalin/pull/2444)
> * [workflow]: Bump the dependencies group with 3 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2445](https://redirect.github.com/javalin/javalin/pull/2445)
> * Optimize static file handling by leveraging Jetty 12 native capabilities by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2447](https://redirect.github.com/javalin/javalin/pull/2447)
> * Upgrade Kotlin from 1.9.25 to 2.0.21 and remove JTE integration by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2452](https://redirect.github.com/javalin/javalin/pull/2452)
> * [deps] Update Pebble to 3.2.4 and fix package imports for CVE security fix by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2453](https://redirect.github.com/javalin/javalin/pull/2453)
> * Update all dependencies and plugins to latest stable versions by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2456](https://redirect.github.com/javalin/javalin/pull/2456)
> * [context] add support for quoted charset in content-type header ([#2448](https://redirect.github.com/javalin/javalin/issues/2448)) by [`@​Pinusar`](https://github.com/Pinusar) in [javalin/javalin#2449](https://redirect.github.com/javalin/javalin/pull/2449)
> * Add onUpgrade method to WebSocket RequestLogger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2450](https://redirect.github.com/javalin/javalin/pull/2450)
> * Fix cookie handling in JavalinTest client by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2459](https://redirect.github.com/javalin/javalin/pull/2459)
> * Replace OkHTTP with native JDK HttpClient in javalin-testtools by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2461](https://redirect.github.com/javalin/javalin/pull/2461)
> * [ssl] Drop Conscrypt ALPN support from SSL Plugin by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2464](https://redirect.github.com/javalin/javalin/pull/2464)
> * [compression] Add preferred compressors list by [`@​fabiobento512`](https://github.com/fabiobento512) in [javalin/javalin#2427](https://redirect.github.com/javalin/javalin/pull/2427)
> * Add Zstandard compression support using zstd-jni by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2465](https://redirect.github.com/javalin/javalin/pull/2465)
> * Fix Missing Allow Header in HTTP 405 Responses by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2468](https://redirect.github.com/javalin/javalin/pull/2468)
> * [sse] Relax Accept header validation to support multiple content types by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2474](https://redirect.github.com/javalin/javalin/pull/2474)
> * [routing] Support custom HTTP methods by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2478](https://redirect.github.com/javalin/javalin/pull/2478)
> * [tests] Fix flakiness in TestRateLimitUtil by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2477](https://redirect.github.com/javalin/javalin/pull/2477)
> * [javalin] Move routing to config by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2479](https://redirect.github.com/javalin/javalin/pull/2479)
> * [maven] Refactor modules by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2481](https://redirect.github.com/javalin/javalin/pull/2481)
> * [github] Improve copilot-instructions.md with comprehensive Javalin patterns and philosophy by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2483](https://redirect.github.com/javalin/javalin/pull/2483)
> * [core] Introduce endpoint stack and utilize endpoints more by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2486](https://redirect.github.com/javalin/javalin/pull/2486)
> * [async] Improve async handling by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2489](https://redirect.github.com/javalin/javalin/pull/2489)
> * [deps] Upgrade OkHttp to 5.3.0 by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2496](https://redirect.github.com/javalin/javalin/pull/2496)
> * [core] Add config option to disable old version check warning by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2499](https://redirect.github.com/javalin/javalin/pull/2499)
> * Add static keyword to wsBefore and wsAfter in ApiBuilder by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2501](https://redirect.github.com/javalin/javalin/pull/2501)
> * [deps] Update Pebble to 4.0.0 by [`@​kamenitxan`](https://github.com/kamenitxan) in [javalin/javalin#2502](https://redirect.github.com/javalin/javalin/pull/2502)
> * [workflow]: Bump actions/checkout from 5 to 6 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2503](https://redirect.github.com/javalin/javalin/pull/2503)
> * [config] Rework JavalinConfig by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2504](https://redirect.github.com/javalin/javalin/pull/2504)
> * [tests] Add missing test cases by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2506](https://redirect.github.com/javalin/javalin/pull/2506)
> * [cors] Use JDK's URI class by [`@​Playacem`](https://github.com/Playacem) in [javalin/javalin#2180](https://redirect.github.com/javalin/javalin/pull/2180)
> * [micrometer] Restore Micrometer plugin for Javalin7/Jetty12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2511](https://redirect.github.com/javalin/javalin/pull/2511)
> * [json] Fix NoClassDefFoundError for ObjectMapper on Kotlin 2.x by [`@​fahrradflucht`](https://github.com/fahrradflucht) in [javalin/javalin#2510](https://redirect.github.com/javalin/javalin/pull/2510)
> * Extend Context#redirect to beforeMatched and rename skipIfExceptionOccurred by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2515](https://redirect.github.com/javalin/javalin/pull/2515)
> * [routing] Clean up unused interfaces and generics by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2517](https://redirect.github.com/javalin/javalin/pull/2517)

... (truncated)


Commits

* [`bbe55e5`](javalin/javalin@bbe55e5) [maven-release-plugin] prepare release javalin-parent-7.0.1
* [`f5a4934`](javalin/javalin@f5a4934) [logging] Allow for multiple request loggers ([#2539](https://redirect.github.com/javalin/javalin/issues/2539))
* [`e134377`](javalin/javalin@e134377) [micrometer] Fix interference with user-configured request logger ([#2533](https://redirect.github.com/javalin/javalin/issues/2533))
* [`5b5b2fb`](javalin/javalin@5b5b2fb) [websocket] Fix attributes set in wsBeforeUpgrade not persisting to onConnect
* [`d4b8c5b`](javalin/javalin@d4b8c5b) [ratelimitplugin] Fix regression in default key function
* [`698995d`](javalin/javalin@698995d) [endpoints] Add option to get the future matched enpoint
* [`9c3461f`](javalin/javalin@9c3461f) [docs] Update for v7
* [`6821dea`](javalin/javalin@6821dea) [maven-release-plugin] prepare for next development iteration
* [`3e02e28`](javalin/javalin@3e02e28) [maven-release-plugin] prepare release javalin-parent-7.0.0
* [`a02ecb7`](javalin/javalin@a02ecb7) [pom] Publish aggregator poms to fix release deploy
* Additional commits viewable in [compare view](javalin/javalin@javalin-parent-6.7.0...javalin-parent-7.0.1)
  
Updates `io.javalin:javalin-testtools` from 6.7.0 to 7.0.1
Release notes

*Sourced from [io.javalin:javalin-testtools's releases](https://github.com/javalin/javalin/releases).*

> 7.0.1
> -----
>
> What's Changed
> --------------
>
> * [readme] v7 release updates by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2527](https://redirect.github.com/javalin/javalin/pull/2527)
> * [micrometer] Fix interference with user-configured request logger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2533](https://redirect.github.com/javalin/javalin/pull/2533)
> * [logging] Allow for multiple request loggers by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2539](https://redirect.github.com/javalin/javalin/pull/2539)
>
> **Full Changelog**: <javalin/javalin@javalin-parent-7.0.0...javalin-parent-7.0.1>
>
> 7.0.0
> -----
>
> What's Changed
> --------------
>
> * Fix infinite loop in custom exception handling by [`@​LordOfLeaks`](https://github.com/LordOfLeaks) in [javalin/javalin#2423](https://redirect.github.com/javalin/javalin/pull/2423)
> * [workflow]: Bump actions/checkout from 4 to 5 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2428](https://redirect.github.com/javalin/javalin/pull/2428)
> * Add comprehensive GitHub Copilot instructions with commit message convention by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2433](https://redirect.github.com/javalin/javalin/pull/2433)
> * Bump and rename sslcontext-kickstart to ayza by [`@​Hakky54`](https://github.com/Hakky54) in [javalin/javalin#2434](https://redirect.github.com/javalin/javalin/pull/2434)
> * Update Javalin to version 7.0.0-SNAPSHOT with Java 17 requirement by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2431](https://redirect.github.com/javalin/javalin/pull/2431)
> * Improve test suite by adding HTTP status code assertions and cleaning up static files tests by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2437](https://redirect.github.com/javalin/javalin/pull/2437)
> * [core] Migrate to Jetty 12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2444](https://redirect.github.com/javalin/javalin/pull/2444)
> * [workflow]: Bump the dependencies group with 3 updates by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2445](https://redirect.github.com/javalin/javalin/pull/2445)
> * Optimize static file handling by leveraging Jetty 12 native capabilities by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2447](https://redirect.github.com/javalin/javalin/pull/2447)
> * Upgrade Kotlin from 1.9.25 to 2.0.21 and remove JTE integration by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2452](https://redirect.github.com/javalin/javalin/pull/2452)
> * [deps] Update Pebble to 3.2.4 and fix package imports for CVE security fix by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2453](https://redirect.github.com/javalin/javalin/pull/2453)
> * Update all dependencies and plugins to latest stable versions by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2456](https://redirect.github.com/javalin/javalin/pull/2456)
> * [context] add support for quoted charset in content-type header ([#2448](https://redirect.github.com/javalin/javalin/issues/2448)) by [`@​Pinusar`](https://github.com/Pinusar) in [javalin/javalin#2449](https://redirect.github.com/javalin/javalin/pull/2449)
> * Add onUpgrade method to WebSocket RequestLogger by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2450](https://redirect.github.com/javalin/javalin/pull/2450)
> * Fix cookie handling in JavalinTest client by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2459](https://redirect.github.com/javalin/javalin/pull/2459)
> * Replace OkHTTP with native JDK HttpClient in javalin-testtools by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2461](https://redirect.github.com/javalin/javalin/pull/2461)
> * [ssl] Drop Conscrypt ALPN support from SSL Plugin by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2464](https://redirect.github.com/javalin/javalin/pull/2464)
> * [compression] Add preferred compressors list by [`@​fabiobento512`](https://github.com/fabiobento512) in [javalin/javalin#2427](https://redirect.github.com/javalin/javalin/pull/2427)
> * Add Zstandard compression support using zstd-jni by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2465](https://redirect.github.com/javalin/javalin/pull/2465)
> * Fix Missing Allow Header in HTTP 405 Responses by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2468](https://redirect.github.com/javalin/javalin/pull/2468)
> * [sse] Relax Accept header validation to support multiple content types by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2474](https://redirect.github.com/javalin/javalin/pull/2474)
> * [routing] Support custom HTTP methods by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2478](https://redirect.github.com/javalin/javalin/pull/2478)
> * [tests] Fix flakiness in TestRateLimitUtil by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2477](https://redirect.github.com/javalin/javalin/pull/2477)
> * [javalin] Move routing to config by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2479](https://redirect.github.com/javalin/javalin/pull/2479)
> * [maven] Refactor modules by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2481](https://redirect.github.com/javalin/javalin/pull/2481)
> * [github] Improve copilot-instructions.md with comprehensive Javalin patterns and philosophy by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2483](https://redirect.github.com/javalin/javalin/pull/2483)
> * [core] Introduce endpoint stack and utilize endpoints more by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2486](https://redirect.github.com/javalin/javalin/pull/2486)
> * [async] Improve async handling by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2489](https://redirect.github.com/javalin/javalin/pull/2489)
> * [deps] Upgrade OkHttp to 5.3.0 by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2496](https://redirect.github.com/javalin/javalin/pull/2496)
> * [core] Add config option to disable old version check warning by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2499](https://redirect.github.com/javalin/javalin/pull/2499)
> * Add static keyword to wsBefore and wsAfter in ApiBuilder by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2501](https://redirect.github.com/javalin/javalin/pull/2501)
> * [deps] Update Pebble to 4.0.0 by [`@​kamenitxan`](https://github.com/kamenitxan) in [javalin/javalin#2502](https://redirect.github.com/javalin/javalin/pull/2502)
> * [workflow]: Bump actions/checkout from 5 to 6 in the dependencies group by [`@​dependabot`](https://github.com/dependabot)[bot] in [javalin/javalin#2503](https://redirect.github.com/javalin/javalin/pull/2503)
> * [config] Rework JavalinConfig by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2504](https://redirect.github.com/javalin/javalin/pull/2504)
> * [tests] Add missing test cases by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2506](https://redirect.github.com/javalin/javalin/pull/2506)
> * [cors] Use JDK's URI class by [`@​Playacem`](https://github.com/Playacem) in [javalin/javalin#2180](https://redirect.github.com/javalin/javalin/pull/2180)
> * [micrometer] Restore Micrometer plugin for Javalin7/Jetty12 by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2511](https://redirect.github.com/javalin/javalin/pull/2511)
> * [json] Fix NoClassDefFoundError for ObjectMapper on Kotlin 2.x by [`@​fahrradflucht`](https://github.com/fahrradflucht) in [javalin/javalin#2510](https://redirect.github.com/javalin/javalin/pull/2510)
> * Extend Context#redirect to beforeMatched and rename skipIfExceptionOccurred by [`@​Copilot`](https://github.com/Copilot) in [javalin/javalin#2515](https://redirect.github.com/javalin/javalin/pull/2515)
> * [routing] Clean up unused interfaces and generics by [`@​tipsy`](https://github.com/tipsy) in [javalin/javalin#2517](https://redirect.github.com/javalin/javalin/pull/2517)

... (truncated)


Commits

* [`bbe55e5`](javalin/javalin@bbe55e5) [maven-release-plugin] prepare release javalin-parent-7.0.1
* [`f5a4934`](javalin/javalin@f5a4934) [logging] Allow for multiple request loggers ([#2539](https://redirect.github.com/javalin/javalin/issues/2539))
* [`e134377`](javalin/javalin@e134377) [micrometer] Fix interference with user-configured request logger ([#2533](https://redirect.github.com/javalin/javalin/issues/2533))
* [`5b5b2fb`](javalin/javalin@5b5b2fb) [websocket] Fix attributes set in wsBeforeUpgrade not persisting to onConnect
* [`d4b8c5b`](javalin/javalin@d4b8c5b) [ratelimitplugin] Fix regression in default key function
* [`698995d`](javalin/javalin@698995d) [endpoints] Add option to get the future matched enpoint
* [`9c3461f`](javalin/javalin@9c3461f) [docs] Update for v7
* [`6821dea`](javalin/javalin@6821dea) [maven-release-plugin] prepare for next development iteration
* [`3e02e28`](javalin/javalin@3e02e28) [maven-release-plugin] prepare release javalin-parent-7.0.0
* [`a02ecb7`](javalin/javalin@a02ecb7) [pom] Publish aggregator poms to fix release deploy
* Additional commits viewable in [compare view](javalin/javalin@javalin-parent-6.7.0...javalin-parent-7.0.1)
  
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
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.

Support Zstandard compression

2 participants