diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 507b3e91..09c7d1a3 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -11,7 +11,7 @@ on:
env:
# Java version to use for the release
- RELEASE_JAVA_VERSION: 11
+ RELEASE_JAVA_VERSION: 17
jobs:
test:
@@ -19,7 +19,7 @@ jobs:
strategy:
matrix:
- java: [ 11, 17, 21 ]
+ java: [ 17, 21 ]
name: Java ${{ matrix.java }}
diff --git a/jicoco-config/pom.xml b/jicoco-config/pom.xml
index f29343a8..33e04338 100644
--- a/jicoco-config/pom.xml
+++ b/jicoco-config/pom.xml
@@ -105,7 +105,7 @@
- 11
+ 17
diff --git a/jicoco-health-checker/pom.xml b/jicoco-health-checker/pom.xml
index ee876a36..d8c72c37 100644
--- a/jicoco-health-checker/pom.xml
+++ b/jicoco-health-checker/pom.xml
@@ -76,7 +76,7 @@
- 11
+ 17
@@ -108,7 +108,7 @@
- 11
+ 17
-Xlint:all,-serial
diff --git a/jicoco-jetty/pom.xml b/jicoco-jetty/pom.xml
index f32ff613..9019d011 100644
--- a/jicoco-jetty/pom.xml
+++ b/jicoco-jetty/pom.xml
@@ -39,27 +39,22 @@
org.eclipse.jetty
jetty-proxy
- ${jetty.version}
org.eclipse.jetty
jetty-server
- ${jetty.version}
- org.eclipse.jetty
- jetty-servlet
- ${jetty.version}
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlet
- org.eclipse.jetty
- jetty-servlets
- ${jetty.version}
+ org.eclipse.jetty.ee10
+ jetty-ee10-servlets
org.eclipse.jetty
jetty-util
- ${jetty.version}
org.xeustechnologies
@@ -233,7 +228,7 @@
- 11
+ 17
@@ -265,7 +260,7 @@
- 11
+ 17
-Xlint:all,-serial
diff --git a/jicoco-jetty/src/main/kotlin/org/jitsi/rest/JettyHelpers.kt b/jicoco-jetty/src/main/kotlin/org/jitsi/rest/JettyHelpers.kt
index 2cea3bb5..4bb33a67 100644
--- a/jicoco-jetty/src/main/kotlin/org/jitsi/rest/JettyHelpers.kt
+++ b/jicoco-jetty/src/main/kotlin/org/jitsi/rest/JettyHelpers.kt
@@ -18,16 +18,20 @@
package org.jitsi.rest
import jakarta.servlet.DispatcherType
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler
+import org.eclipse.jetty.ee10.servlet.ServletHolder
+import org.eclipse.jetty.ee10.servlets.CrossOriginFilter
import org.eclipse.jetty.http.HttpStatus
+import org.eclipse.jetty.server.Handler
import org.eclipse.jetty.server.HttpConfiguration
import org.eclipse.jetty.server.HttpConnectionFactory
+import org.eclipse.jetty.server.Request
+import org.eclipse.jetty.server.Response
import org.eclipse.jetty.server.SecureRequestCustomizer
import org.eclipse.jetty.server.Server
import org.eclipse.jetty.server.ServerConnector
import org.eclipse.jetty.server.SslConnectionFactory
-import org.eclipse.jetty.servlet.ServletContextHandler
-import org.eclipse.jetty.servlet.ServletHolder
-import org.eclipse.jetty.servlets.CrossOriginFilter
+import org.eclipse.jetty.util.Callback
import org.eclipse.jetty.util.ssl.SslContextFactory
import java.nio.file.Paths
import java.util.EnumSet
@@ -39,15 +43,9 @@ import java.util.EnumSet
fun createJettyServer(config: JettyBundleActivatorConfig): Server {
val httpConfig = HttpConfiguration().apply {
sendServerVersion = config.sendServerVersion
- addCustomizer { _, _, request ->
- if (request.method.equals("TRACE", ignoreCase = true)) {
- request.isHandled = true
- request.response.status = HttpStatus.METHOD_NOT_ALLOWED_405
- }
- }
}
val server = Server().apply {
- handler = ServletContextHandler()
+ handler = TraceBlockingHandler(ServletContextHandler())
}
val connector = ServerConnector(server, HttpConnectionFactory(httpConfig)).apply {
port = config.port
@@ -83,7 +81,7 @@ fun createSecureJettyServer(config: JettyBundleActivatorConfig): Server {
sendServerVersion = config.sendServerVersion
}
val server = Server().apply {
- handler = ServletContextHandler()
+ handler = TraceBlockingHandler(ServletContextHandler())
}
val connector = ServerConnector(
@@ -114,11 +112,28 @@ fun createServer(config: JettyBundleActivatorConfig): Server {
fun JettyBundleActivatorConfig.isEnabled(): Boolean = port != -1 || tlsPort != -1
-// Note: it's technically possible that this cast fails, but
-// shouldn't happen in practice given that the above methods always install
-// a ServletContextHandler handler.
+/**
+ * A [Handler.Wrapper] that rejects HTTP TRACE requests with 405 Method Not Allowed,
+ * forwarding everything else to the wrapped [ServletContextHandler].
+ */
+private class TraceBlockingHandler(
+ val servletContextHandler: ServletContextHandler
+) : Handler.Wrapper(servletContextHandler) {
+ override fun handle(request: Request, response: Response, callback: Callback): Boolean {
+ if (request.method.equals("TRACE", ignoreCase = true)) {
+ Response.writeError(request, response, callback, HttpStatus.METHOD_NOT_ALLOWED_405)
+ return true
+ }
+ return super.handle(request, response, callback)
+ }
+}
+
val Server.servletContextHandler: ServletContextHandler
- get() = handler as ServletContextHandler
+ get() = when (val h = handler) {
+ is TraceBlockingHandler -> h.servletContextHandler
+ is ServletContextHandler -> h
+ else -> error("Unexpected server handler type: ${h?.javaClass?.name}")
+ }
fun ServletContextHandler.enableCors(pathSpec: String = "/*") {
addFilter(CrossOriginFilter::class.java, pathSpec, EnumSet.of(DispatcherType.REQUEST)).apply {
diff --git a/jicoco-jwt/pom.xml b/jicoco-jwt/pom.xml
index aeaee832..576e7baf 100644
--- a/jicoco-jwt/pom.xml
+++ b/jicoco-jwt/pom.xml
@@ -116,7 +116,7 @@
- 11
+ 17
@@ -150,7 +150,7 @@
- 11
+ 17
-Xlint:all
diff --git a/jicoco-mediajson/pom.xml b/jicoco-mediajson/pom.xml
index bb7083e4..427e44ad 100644
--- a/jicoco-mediajson/pom.xml
+++ b/jicoco-mediajson/pom.xml
@@ -97,7 +97,7 @@
- 11
+ 17
@@ -131,7 +131,7 @@
- 11
+ 17
-Xlint:all
diff --git a/jicoco-metrics/pom.xml b/jicoco-metrics/pom.xml
index dd8356ae..fe1d9c7d 100644
--- a/jicoco-metrics/pom.xml
+++ b/jicoco-metrics/pom.xml
@@ -141,7 +141,7 @@
- 11
+ 17
@@ -175,7 +175,7 @@
- 11
+ 17
-Xlint:all
diff --git a/jicoco-mucclient/pom.xml b/jicoco-mucclient/pom.xml
index b0be935e..92cf1a88 100644
--- a/jicoco-mucclient/pom.xml
+++ b/jicoco-mucclient/pom.xml
@@ -158,7 +158,7 @@
- 11
+ 17
@@ -190,7 +190,7 @@
- 11
+ 17
-Xlint:all,-serial
diff --git a/jicoco-test-kotlin/pom.xml b/jicoco-test-kotlin/pom.xml
index 4075148e..bd08b7f2 100644
--- a/jicoco-test-kotlin/pom.xml
+++ b/jicoco-test-kotlin/pom.xml
@@ -90,7 +90,7 @@
- 11
+ 17
diff --git a/pom.xml b/pom.xml
index db910972..8b0ffffc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,8 +66,8 @@
1.13.8
0.16.0
1.9.10
- 11.0.21
- 3.0.10
+ 12.0.35
+ 3.1.11
0.12.6
1.83
4.4.8-jitsi-4
@@ -85,6 +85,26 @@
kotlin-stdlib-jdk8
${kotlin.version}
+
+
+ org.eclipse.jetty
+ jetty-bom
+ ${jetty.version}
+ pom
+ import
+
+
+ org.eclipse.jetty.ee10
+ jetty-ee10-bom
+ ${jetty.version}
+ pom
+ import
+